

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用适用于 Amazon EMR on EKS 的 Apache Livy 运行 Spark 应用程序
<a name="job-runs-apache-livy-run-spark"></a>

在使用 Apache Livy 运行 Spark 应用程序之前，请确保已完成[设置适用于 Amazon EMR on EKS 的 Apache Livy](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html) 和[开始使用适用于 Amazon EMR on EKS 的 Apache Livy](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-install.html) 中的步骤。

您可以使用 Apache Livy 运行两种类型的应用程序：
+ 批处理会话：一种 Livy 工作负载，用于提交 Spark 批处理作业。
+ 交互式会话：一种 Livy 工作负载，提供了运行 Spark 查询的编程和可视化界面。

**注意**  
来自不同会话的驱动程序和执行程序容器组（pod）可以相互通信。命名空间不能保证容器组（pod）之间的任何安全性。Kubernetes 不允许对给定命名空间内的容器组（pod）子集进行选择性许可。

## 运行批处理会话
<a name="job-runs-apache-livy-run-spark-batch"></a>

要提交批处理作业，请运行以下命令。

```
curl -s -k -H 'Content-Type: application/json' -X POST \
      -d '{
            "name": "my-session",
            "file": "entryPoint_location (S3 or local)",
            "args": ["argument1", "argument2", ...],
            "conf": {
                "spark.kubernetes.namespace": "<spark-namespace>",
                "spark.kubernetes.container.image": "public.ecr.aws/emr-on-eks/spark/emr-7.12.0:latest",
                "spark.kubernetes.authenticate.driver.serviceAccountName": "<spark-service-account>"
            }
          }' <livy-endpoint>/batches
```

要监控批处理作业，请运行以下命令。

```
curl -s -k -H 'Content-Type: application/json' -X GET <livy-endpoint>/batches/my-session
```

## 运行交互式会话
<a name="job-runs-apache-livy-run-spark-interactive"></a>

要使用 Apache Livy 运行交互式会话，请参阅以下步骤。

1. 确保您可以访问自托管或托管的 Jupyter 笔记本，例如 SageMaker AI Jupyter 笔记本。您的 Jupyter Notebook 必须安装了 [sparkmagic](https://github.com/jupyter-incubator/sparkmagic/blob/master/README.md)。

1. 为 Spark 配置 `spark.kubernetes.file.upload.path` 创建一个存储桶。确保 Spark 服务账户拥有对存储桶的读写权限。有关如何配置 Spark 服务账户的更多详细信息，请参阅“使用服务账户的 IAM 角色（IRSA）设置访问权限”

1. 使用 `%load_ext sparkmagic.magics` 命令在 Jupyter Notebook 中加载 sparkmagic。

1. 运行 `%manage_spark` 命令以使用 Jupyter Notebook 设置 Livy 端点。选择**添加端点**选项卡，选择配置的身份验证类型，将 Livy 端点添加到笔记本，然后选择**添加端点**。

1. 再次运行 `%manage_spark` 以创建 Spark 上下文，然后转到**创建会话**。选择 Livy 端点，指定唯一的会话名称，选择语言，然后添加以下属性。

   ```
   {
     "conf": {
       "spark.kubernetes.namespace": "livy-namespace",
       "spark.kubernetes.container.image": "public.ecr.aws/emr-on-eks/spark/emr-7.12.0:latest",
       "spark.kubernetes.authenticate.driver.serviceAccountName": "<spark-service-account>", 
       "spark.kubernetes.file.upload.path": "<URI_TO_S3_LOCATION_>"
     }
   }
   ```

1. 提交应用程序，等待其创建 Spark 上下文。

1. 要监控交互式会话的状态，请运行以下命令。

   ```
   curl -s -k -H 'Content-Type: application/json' -X GET livy-endpoint/sessions/my-interactive-session
   ```

## 监控 Spark 应用程序
<a name="job-runs-apache-livy-run-ui"></a>

要使用 Livy UI 监控 Spark 应用程序的进度，请使用链接 `http://<livy-endpoint>/ui`。