由于YARN client模式对用户不直接暴露用于提交YARN程序的辅助程序,因此许多参数是通过环境变量来设置的,可以在spark-env.sh中进行如下配置:
这是我的spark-env.sh里面进行的相关配置,对于启动Spark最关键的前三项设置。
HADOOP_HOME:设置hadoop的安装目录;
HADOOP_CONF_DIR:设置hadoop配置文件的目录;
YARN_CONF_DIR:设置yarn配置文件的目录,同上;
在我通过bin/spark-submit --master yarn-client.....提交我的应用程序时,出现了如下诊断错误,导致应用程序状态失败,异常退出:
经过查找资料和配置分析, 找到了问题的根源。从诊断报告可以看出主要是container的虚拟内存的使用量超出的原因,可以通过(1)关闭虚拟内存使用检查(2)增加虚拟内存与物理内存的比例值。具体参数在yarn-site.xml中完成:
将修改后的配置文件发送给集群中的各个节点,重启集群后,发现可以成功通过yarn-client模式启动spark。
成功提交作业后,HDFS的${yarn.app.mapreduce.am.staging-dir}/${username}/.sparkStaging下面,就会产生两个jar包,一个是spark-assembly-*.jar,另一个是提交执行的jar包:
作业执行完毕之后,所在目录的jar包会自动被删除,可以通过在spark-defaults.conf中设置保留jar包: