确保HADOOP_CONF_DIR或YARN_CONF_DIR指向包含Hadoop集群(客户端)配置文件的目录。这些配置用于写HDFS和连接YARN ResourceManager。该目录中包含的配置将被分发到YARN集群,以便应用程序使用的所有容器都使用相同的配置。如果配置引用Java系统属性或不受YARN管理的环境变量,它们也应该在Spark应用程序的配置中进行设置(驱动程序、执行程序和AM运行时),粗体部分意思是可以在启动app的时候进行参数传递配置.
2.spark application载入yarn的方式
Spark applications 载入yarn cluster有两种部署方式( deploy modes )
此模式下spark driver(spark 驱动程序) 运行在一个被yaran管理的application master 进程中,并且client(提交程序的spark-submmit)可以在启动应用程序后离开.
此种模式下,spark driver驱动运行在起送客户端的机器上 并且application master 进程 仅用于向yarn申请资源
简述二者区别: cluster:application的驱动程序运行在yarn集群上,该驱动程序drive由yarn上的applicationMaster管理, 任务提交到集群之后,client结束.—>driver在yarn的applicationMaster中, client可以退出 client:驱动程序driver运行在client进程中,client不可以退出.–>driver运行在client进程中,client不可以退出
3.— —master说明
与Spark支持的其他集群管理器不同,在YARN模式下,ResourceManager的地址是从Hadoop配置中获取的。因此,— —master参数是yarn。
4.载入集群的命令
$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster/client [spark options] [your-app options] 注意加粗的地方为application的部署模式,二选一即可: client意思是客户端模式 cluster意思是集群模式
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi –master yarn –deploy-mode cluster –driver-memory 4g –executor-memory 2g –executor-cores 1 –queue thequeue examples/jars/spark-examples*.jar 10 上述操作将启动一个YARN客户端程序,该程序将启动默认的Application Master。然后SparkPi将作为Application Master的子线程运行。客户端将定期轮询Application Master以获取状态更新,并在控制台中显示它们。一旦应用程序完成运行,客户端将退出。
5.注意事项
client模式下,dirver驱动程序(也就是sparkContext 入口),在当前机器运行,当前机器可以访问到在此机器上的jar(通过配置), 但是在cluster模式,spark程序入口在yarn集群上的某台机器,该机器是访问不到客户端所在的机器的,所以cluster模式下依赖的jar等文件必须通过参数传递给driver所在的yarn集群上的某台机器.
$ ./bin/spark-submit --class my.main.Class –master yarn –deploy-mode cluster –jars my-other-jar.jar,my-other-other-jar.jar my-main-jar.jar app_arg1 app_arg2
6.准备工作
在 YARN 上运行 Spark 需要使用 YARN 支持构建的 Spark 二进制分发版。二进制发行版可以从项目网站的下载页面下载。您可以下载两种 Spark 二进制发行版的版本。一种是使用特定版本的 Apache Hadoop 预先构建的;这个 Spark 发行版包含内置的 Hadoop 运行环境,所以我们称之为with-hadoopSpark 发行版。另一个是使用用户提供的 Hadoop 预先构建的;由于这个 Spark 发行版不包含内置的 Hadoop 运行环境,所以它更小,但用户必须单独提供 Hadoop 安装。我们称这种变体为no-hadoopSpark 分布。对于with-hadoopSpark 发行版,因为它已经包含一个内置的 Hadoop 运行时,默认情况下,当一个作业提交到 Hadoop Yarn 集群时,为了防止 jar 冲突,它不会将 Yarn 的类路径填充到 Spark 中。要覆盖此行为,您可以设置spark.yarn.populateHadoopClasspath=true. 对于no-hadoopSpark 发行版,Spark 将默认填充 Yarn 的类路径以获取 Hadoop 运行时。对于with-hadoopSpark 发行版,如果您的应用程序依赖于某些仅在集群中可用的库,您可以尝试通过设置上述属性来填充 Yarn 类路径。如果这样做遇到 jar 冲突问题,则需要将其关闭并将此库包含在应用程序 jar 中。 要从 YARN 端访问 Spark 运行时 jar,您可以指定spark.yarn.archive或spark.yarn.jars。有关详细信息,请参阅Spark 属性。如果既未指定也spark.yarn.archive未spark.yarn.jars指定,Spark 将创建一个包含所有 jar 的 zip 文件$SPARK_HOME/jars并将其上传到分布式缓存。
spark yarn 有很多配置参数,参考spark-yarn-配置
7. 自定义log4j
To use a custom log4j configuration for the application master or executors, here are the options:
- spark-submmit 通过–files指定logj.properties
- spark-submmit --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=/tmp/myconfig/log4j.properties
- 更新$ SPARK_CONF_DIR / log4j。属性文件,它将与其他配置一起自动上传。注意,如果指定了多个选项,其他上面2个选项的优先级比这个选项高。
注意,对于第一个选项,executors 和应用程序主程序将共享相同的log4j配置,这可能会在它们运行在同一个节点上时导致问题(例如试图写入相同的日志文件。
1.如果您需要在YARN中放置日志文件的正确位置的引用,以便YARN能够正确地显示和聚合日志文件,请在您的log4j.properties中使用spark.yarn.app.container.log.dir。例如,log4j.appender.file_appender.File = $ {spark.yarn.app.container.log.dir} / spark.log。对于流应用,配置RollingFileAppender并将文件位置设置为YARN的日志目录,可以避免因日志文件过大而导致磁盘溢出,并且可以使用YARN的日志实用工具访问日志。 2.To use a custom metrics.properties for the application master and executors,update the $SPARK_CONF_DIR/metrics.properties file. It will automatically be uploaded with other configurations, so you don’t need to specify it manually with --files.
|