使用适用于 Amazon EMR on EKS 的 Apache Livy 运行 Spark 应用程序
在使用 Apache Livy 运行 Spark 应用程序之前,请确保已完成设置适用于 Amazon EMR on EKS 的 Apache Livy 和开始使用适用于 Amazon EMR on EKS 的 Apache Livy 中的步骤。
您可以使用 Apache Livy 运行两种类型的应用程序:
-
批处理会话:一种 Livy 工作负载,用于提交 Spark 批处理作业。
-
交互式会话:一种 Livy 工作负载,提供了运行 Spark 查询的编程和可视化界面。
注意
来自不同会话的驱动程序和执行程序容器组(pod)可以相互通信。命名空间不能保证容器组(pod)之间的任何安全性。Kubernetes 不允许对给定命名空间内的容器组(pod)子集进行选择性许可。
运行批处理会话
要提交批处理作业,请运行以下命令。
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.3.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
运行交互式会话
要使用 Apache Livy 运行交互式会话,请参阅以下步骤。
-
确保您可以访问自托管或托管的 Jupyter Notebook,如 SageMaker Jupyter Notebook。您的 Jupyter Notebook 必须安装了 sparkmagic
。 -
为 Spark 配置
spark.kubernetes.file.upload.path
创建一个存储桶。确保 Spark 服务账户拥有对存储桶的读写权限。有关如何配置 Spark 服务账户的更多详细信息,请参阅“使用服务账户的 IAM 角色(IRSA)设置访问权限” -
使用
%load_ext sparkmagic.magics
命令在 Jupyter Notebook 中加载 sparkmagic。 -
运行
%manage_spark
命令以使用 Jupyter Notebook 设置 Livy 端点。选择添加端点选项卡,选择配置的身份验证类型,将 Livy 端点添加到笔记本,然后选择添加端点。 -
再次运行
%manage_spark
以创建 Spark 上下文,然后转到创建会话。选择 Livy 端点,指定唯一的会话名称,选择语言,然后添加以下属性。{ "conf": { "spark.kubernetes.namespace": "
livy-namespace
", "spark.kubernetes.container.image": "public.ecr.aws/emr-on-eks/spark/emr-7.3.0:latest", "spark.kubernetes.authenticate.driver.serviceAccountName": "<spark-service-account>
", "spark.kubernetes.file.upload.path": "<URI_TO_S3_LOCATION_>
" } } -
提交应用程序,等待其创建 Spark 上下文。
-
要监控交互式会话的状态,请运行以下命令。
curl -s -k -H 'Content-Type: application/json' -X GET
livy-endpoint
/sessions/my-interactive-session
监控 Spark 应用程序
要使用 Livy UI 监控 Spark 应用程序的进度,请使用链接 http://<livy-endpoint>/ui
。