EMR Serverless Spark服务是阿里云推出的一种全托管、一站式的数据计算平台,旨在简化大数据计算的工作流程,让用户更加专注于数据分析和价值提炼,而非基础设施的管理和运维。下面就跟我一起通过Serverless Spark提交PySpark流任务吧。
前提条件
已创建工作空间,详情请参见创建工作空间。
操作流程
步骤一:创建实时数据流集群并产生消息
cd /var/log/emr/taihao_exporter
- 执行以下命令,创建Topic。
# 创建名为taihaometrics的Topic,分区数10,副本因子2。 kafka-topics.sh --partitions 10 --replication-factor 2 --bootstrap-server core-1-1:9092 --topic taihaometrics --create
- 执行以下命令,发送消息。
# 使用kafka-console-producer发送消息到taihaometrics Topic。 tail -f metrics.log | kafka-console-producer.sh --broker-list core-1-1:9092 --topic taihaometrics
步骤二:新增网络连接
- 进入网络连接页面。
- 在EMR控制台的左侧导航栏,选择EMR Serverless > Spark。
- 在Spark页面,单击目标工作空间名称。
- 在EMR Serverless Spark页面,单击左侧导航栏中的网络连接。
- 在网络连接页面,单击新增网络连接。
- 在新增网络连接对话框中,配置以下信息,单击确定。
- 当状态显示为已成功时,表示新增网络连接成功。
步骤三:为EMR集群添加安全组规则
- 获取集群节点交换机的网段。
您可以在节点管理页面,单击节点组名称,查看关联的交换机信息,然后登录专有网络管理控制台,在交换机页面获取交换机的网段。
- 添加安全组规则。
- 在集群管理页面,单击目标集群的集群ID。
- 在基础信息页面,单击集群安全组后面的链接。
- 在安全组规则页面,单击手动添加,填写端口范围和授权对象,然后单击保存。
参数 |
说明 |
端口范围 |
填写9092端口。 |
授权对象 |
填写前一步骤中获取的指定交换机的网段。 重要 为防止被外部的用户攻击导致安全问题,授权对象禁止填写为0.0.0.0/0。 |
步骤四:上传JAR包至OSS
上传kafka.zip中的所有JAR包至OSS,上传操作可以参见简单上传。
步骤五:上传资源文件
- 在EMR Serverless Spark页面,单击左侧导航栏中的资源上传。
- 在资源上传页面,单击上传文件。
- 在上传文件对话框中,单击待上传文件区域选择pyspark_ss_demo.py文件。
步骤六:新建并启动流任务
- 在EMR Serverless Spark页面,单击左侧的任务开发。
- 单击新建。
- 输入任务名称,新建一个Application(流任务) > PySpark类型的任务,然后单击确定。
- 在新建的任务开发中,配置以下信息,其余参数无需配置,然后单击保存。
参数 |
说明 |
主Python资源 |
选择前一个步骤中在资源上传页面上传的pyspark_ss_demo.py文件。 |
引擎版本 |
Spark的版本,详情请参见引擎版本介绍。 |
运行参数 |
EMR集群core-1-1节点的内网IP地址。您可以在EMR集群的节点管理页面的Core节点组下查看。 |
Spark配置 |
Spark的配置信息。本文示例如下。
spark.jars oss://<yourBucket>/kafka-lib/commons-pool2-2.11.1.jar,oss://<yourBucket>/kafka-lib/kafka-clients-2.8.1.jar,oss://<yourBucket>/kafka-lib/spark-sql-kafka-0-10_2.12-3.3.1.jar,oss://<yourBucket>/kafka-lib/spark-token-provider-kafka-0-10_2.12-3.3.1.jar spark.emr.serverless.network.service.name connection_to_emr_kafka 说明
|
- 单击发布。
- 在发布任务对话框中,单击确定。
- 启动流任务。
- 单击前往运维。
- 单击启动。
步骤七:查看日志
- 单击日志探查页签。
- 在Driver日志列表中,单击stdOut.log。
在打开的日志文件中,您可以看到应用程序执行的相关信息以及返回的结果。
结论:
EMR Serverless Spark对于追求敏捷开发、快速迭代、降低成本以及希望避免复杂运维的大数据项目来说是一个很有吸引力的选择。它特别适合那些希望快速搭建数据处理应用、有弹性资源需求的企业和开发者。然而,对于特定的Hive使用场景和高度定制化的集群管理需求,用户在采用前应详细评估其功能和成本效益。
优点:
- 零运维:作为Serverless服务,EMR Serverless Spark免去了集群管理和运维的复杂性,用户无需担心资源预估、扩缩容等问题,降低了运维成本。
- 按需付费:采用按实际使用量计费的模式,用户只需为实际消耗的计算和存储资源付费,有助于成本控制和优化预算。
- 兼容性:100%兼容Spark,意味着现有的Spark应用可以无缝迁移至EMR Serverless Spark,减少迁移成本和学习曲线。
- 集成性:与阿里云的其他服务如OSS(对象存储服务)紧密集成,便于数据的存储与分析,同时也支持与实时计算Flink等组件的集成,实现流批一体的处理能力。
- 易用性:提供工作空间的概念,作为业务开发的基本单元,集成了任务、资源和权限管理,便于团队协作和权限控制。
- 性能优化:尽管具体性能指标需根据实际使用情况评估,但阿里云在Spark SQL性能优化方面有深厚积累,EMR Serverless Spark可能继承了这些优化特性,有助于提升数据分析的效率和效果。
缺点或注意事项:
- Hive支持限制:EMR Serverless Spark当前使用的Hive作业引擎是Tez,不支持Hive on Spark,对于依赖特定Hive特性的用户可能需要评估影响。
- 学习曲线:尽管Spark兼容性高,但初次接触Serverless概念和阿里云平台的用户仍需时间学习相关服务的使用和最佳实践。
- 网络依赖:由于服务完全基于云环境,对外网访问的稳定性依赖于云服务商的网络质量及用户的网络环境,可能需要关注网络延迟和带宽问题。
- 成本考量:虽然按需付费模式灵活,但在高并发或大规模数据处理场景下,成本可能会迅速上升,需要精细的成本监控和管理。