CDH 在YARN上运行Spark应用程序

翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_running_spark_on_yarn.html
版本: 5.14.2

在YARN上运行Spark应用程序

当Spark应用程序在YARN集群管理器上运行时,资源管理,调度和安全性由YARN控制。

继续阅读:

  • 部署模式
  • 配置环境
  • 在YARN上运行Spark Shell应用程序
  • 将Spark应用程序提交给YARN
  • 监视和调试Spark应用程序
  • 例如:在YARN上运行SparkPi
  • 在YARN应用程序上配置Spark
  • 动态分配
  • 优化CDH部署中的YARN模式

部署模式

在YARN中,每个应用程序实例都有一个ApplicationMaster进程,该进程是为该应用程序启动的第一个容器。应用程序负责从ResourceManager请求资源。一旦分配了资源,应用程序将指示NodeManagers代表它启动容器。ApplicationMasters消除了对活动客户端的需求:客户端上启动应用程序的进程可以终止,YARN进行协作管理的进程继续进行。

有关指定部署模式的选项,请参阅spark-submit选项。

群集部署模式

在集群模式下,Spark驱动程序在集群主机上的ApplicationMaster中运行。YARN容器中的单个进程负责驱动应用程序并向YARN请求资源。启动应用程序的客户端不需要在应用程序的生命周期中运行。

CDH 在YARN上运行Spark应用程序_第1张图片
图片.png

集群模式不太适合交互式使用Spark。需要用户输入的Spark应用程序,例如 spark-shell and pyspark,需要Spark驱动程序在启动Spark应用程序的客户端进程中运行。

客户端部署模式

在客户端模式下,Spark驱动程序在提交作业的主机上运行。ApplicationMaster仅负责从YARN请求执行程序容器。容器启动后,客户端与容器通信以安排工作。

CDH 在YARN上运行Spark应用程序_第2张图片
图片.png

Deployment Mode Summary

Mode YARN客户端模式 YARN集群模式
Driver runs in 客户 ApplicationMaster
Requests resources ApplicationMaster ApplicationMaster
Starts executor processes YARN NodeManager YARN NodeManager
Persistent services YARN ResourceManager和NodeManagers YARN ResourceManager和NodeManagers
Supports Spark Shell YES No

配置环境

Spark要求客户端配置文件包含 HADOOP_CONF_DIR or YARN_CONF_DIR 环境变量,指向集群目录。这些配置用于写入HDFS并连接到YARN ResourceManager。如果您使用Cloudera Manager部署,则会自动配置这些变量。如果您使用的是非托管部署,请确保按照在YARN上运行Spark中所述设置变量。

在YARN上运行Spark Shell应用程序

在YARN上使用运行spark-shell or pyspark ,使用 --master yarn --deploy-mode client 启动应用程序。

如果您正在使用Cloudera Manager部署,则会自动配置这些属性。

将Spark应用程序提交给YARN

要向YARN提交应用,请使用spark-submit,指定--master yarn 选项,请参阅spark-submit参数。

监视和调试Spark应用程序

要获取有关Spark应用程序行为的信息,可以参考YARN日志和Spark Web应用程序UI。这两种方法提供补充信息。有关如何查看由Spark应用程序和Spark Web应用程序UI创建的日志的信息,请参阅监控Spark应用程序。

例如:在YARN上运行SparkPi

这些例子演示了如何使用 spark-submit 用各种选项提交SparkPi Spark示例应用程序。在这些例子中,在JAR控制了逼近应该与pi接近多少之后通过的参数。

在CDH部署中,SPARK_HOME 默认为/usr/lib/spark 在包装安装和

在YARN集群模式下运行SparkPi

在集群模式下运行SparkPi:

  • CDH 5.2和更低
spark-submit --class org.apache.spark.examples.SparkPi --master yarn \
--deploy-mode cluster SPARK_HOME/examples/lib/spark-examples.jar 10
  • CDH 5.3和更高
spark-submit --class org.apache.spark.examples.SparkPi --master yarn \
--deploy-mode cluster SPARK_HOME/lib/spark-examples.jar 10

该命令会打印状态,直到作业完成或您按下control-C。终止spark-submit 集群模式下的进程不会像在客户端模式下那样终止Spark应用程序。要监视正在运行的应用程序的状态,请运行yarn application -list.

在YARN客户端模式下运行SparkPi

在客户端模式下run SparkPi:

  • CDH 5.2和更低
spark-submit --class org.apache.spark.examples.SparkPi --master yarn \
--deploy-mode client SPARK_HOME/examples/lib/spark-examples.jar 10
  • CDH 5.3和更高
spark-submit --class org.apache.spark.examples.SparkPi --master yarn \
--deploy-mode client SPARK_HOME/lib/spark-examples.jar 10

在YARN集群模式下运行Python SparkPi

  1. 解压缩Python示例存档:
sudo su gunzip SPARK_HOME/lib/python.tar.gz
sudo su tar xvf SPARK_HOME/lib/python.tar
  1. run pi.py 文件:
spark-submit --master yarn --deploy-mode cluster SPARK_HOME/lib/pi.py 10

在YARN应用程序上配置Spark

除了spark-submit选项之外,在YARN上运行spark-submit的其他选项。

spark-submit on YARN Options

选项 描述
archives 逗号分隔的archives列表,被提取到每个执行者的工作目录中。对于 客户端部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。
executor-cores 每个执行器上分配的处理器内核数量。或者,您可以使用 spark.executor.cores 属性。
executor-memory 分配给每个执行程序的最大堆大小。或者,您可以使用spark.executor.memory 属性。
num-executors 为此应用程序分配的YARN容器总数。或者,您可以使用spark.executor.instances 属性。
queue 提交作业的YARN队列。有关更多信息,请参阅将应用程序和查询分配给资源池。默认: default。

在初始安装期间,Cloudera Manager根据您的群集环境调整属性。

除了命令行选项外,还提供以下属性:

属性 描述
spark.yarn.driver.memoryOverhead 每个驱动程序可以从YARN请求的额外off-heap 存储量。结合spark.driver.memory,这是YARN可用于为驱动程序进程创建JVM的总内存。
spark.yarn.executor.memoryOverhead 每个执行程序进程可从YARN请求的额外堆外存量。结合spark.executor.memory,这是YARN可用于为执行程序进程创建JVM的总内存。

动态分配

动态分配允许Spark根据工作负载动态扩展分配给应用程序的集群资源。当启用动态分配并且Spark应用程序有待处理任务的积压时,它可以请求执行程序。当应用程序空闲时,其执行程序将被释放并可被其他应用程序获取。

从CDH 5.5开始,默认启用动态分配。动态分配属性描述了控制动态分配的属性。

如果你设置spark.dynamicAllocation.enabled 为false 或使用 --num-executors 命令行参数或设置 spark.executor.instances 时,动态分配被禁用。有关动态分配如何工作的更多信息,请参阅资源分配策略。

当启用Spark动态资源分配时,所有资源都会分配给第一个可用的作业,导致后续应用程序排队。为了允许应用程序并行获取资源,将资源分配给池,在池中运行应用程序,并允许池中运行的应用程序被抢占。请参阅动态资源池。

如果您正在使用Spark Streaming,请参阅Spark Streaming和Dynamic Allocation中的建议。

动态分配属性

CDH 在YARN上运行Spark应用程序_第3张图片
图片.png

优化非 CM 部署CDH中的YARN模式

在不由Cloudera Manager管理的CDH部署中,Spark每次(spark-submit)运行时都会将Spark程序集JAR文件复制到HDFS 。您可以通过执行以下任一操作来避免此复制:

  • 设置 spark.yarn.jar 为 JAR的本地路径:local:/usr/lib/spark/lib/spark-assembly.jar. 。
  • 上传JAR并配置JAR位置:
    1. 手动将Spark程序集JAR文件上传到HDFS:
$ hdfs dfs -mkdir -p /user/spark/share/lib
$ hdfs dfs -put SPARK_HOME/assembly/lib/spark-assembly_*.jar /user/spark/share/lib/spark-assembly.jar

每次将Spark升级到新的 CDH版本时,您都必须手动上载JAR。
2. 设置spark.yarn.jar 为 HDFS路径:

spark.yarn.jar=hdfs://namenode:8020/user/spark/share/lib/spark-assembly.jar

你可能感兴趣的:(CDH 在YARN上运行Spark应用程序)