spark安装包_Spark基础:Spark On Yarn(上)

4401c9594044ea47d7844762e4d806eb.png

1 在Yarn上启动Spark

要想使spark运行在yarn上,先决条件是spark启动节点上包含 HADOOP_CONF_DIR 或 YARN_CONF_DIR 环境变量,该变量指向的目录包含了 hdfs、 yarn相关的配置。该目录下的配置文件会分发到YARN集群的每个节点,从而保证每个容器都使用相同的配置。如果配置中包含Spark相关的应用配置,如driver、executor等,会自动添加到SparkConf中。

Spark基于Yarn有两种运行模式:cluster, 集群模式,即Spark Driver程序运行在Yarn集群中的App Master上,客户端会在启动App Master后自动关闭;client,客户端模式,即driver程序运行在客户端,App Master程序仅负责申请资源。

与其他的资源调度框架不同,一般的调度框架中--master参数指定的是调度框架master节点的地址,而在yarn模式中,yarn集群的连接是通过配置文件指定的,因此--master参数只需要指定 yarn ,标识调度框架类型即可。

比如,以cluster模式启动任务的命令如下:

./bin/spark-submit 
  --class path.to.your.Class 
  --master yarn 
  --deploy-mode cluster 
  [options] 
  <app jar> 
  [app options]

./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客户端程序,该程序目的就是启动一个 Yarn 的 Application Master。其中SparkPi这个程序将会运行在 App Master 程序中。客户端会周期性的访问 App Master, 查看应用的运行状态并展示在控制台上。当应用执行完毕时,客户端程序会立刻退出。如果想以client模式启动,那么只需要把cluster替换成client就可以了。

在cluster模式中,driver与client运行在不同的及其上,因此SparkContext.addJar不能直接在客户端使用,也就是说client端的jar包不能直接在driver上使用。为了让driver能够使用client端的jar包资源,可以在命令行中使用--jars参数:

$ ./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

2 环境准备

直接在官网可以选择hadoop版本的spark二进制安装包,解压就可以使用。为了在yarn上使用spark运行时的jar,可以配置 spark.yarn.archive 或 spark.yarn.jars , 这样可以避免每次都从client端上传spark相关的jar。如果没有配置该选项,那么spark会把HOME/jars下的文件打成zip压缩包,然后上传到hdfs中。

3 调试应用

在yarn的中,executor 和 app master 都运行在内部的容器 container 中。如果开启 yarn.log-aggregation-enable,容器中的日志会被拷贝到HDFS上并删除本地日志。这些日志可以通过yarn logs --applicationId <id>。如果没有开启日志聚合,日志会保存在本地 YARN_APP_LOGS_DIR 目录下,一般都是配在 /tmp/logs 或 $HADOOP_HOME/logs/userlogs 下。如果想看某个容器的日志,需要登录到容器所在的节点,并进入对应的目录,目录为 appId/containerId。如果想要应用停止后,还想查看相关信息,需要增加 yarn.nodemanager.delete.debug-delay-sec 的值, 如36000,可以确保当应用执行结束后,日志还会保留一段时间。进入 yarn.nodemanager.local-dirs 指定的应用缓存目录,这个目录包含了启动脚本、jar包、环境变量等,通过这个方法可以帮助定义特殊的类加载或环境变量问题。

如果想要使用自定义的log4j日志配置,需要下面几个步骤:使用spark-submit的--files参数上传log4j.properties;增加 -Dlog4j.configuration=<配置文件目录> 到 spark.driver.extraJavaOptions 或 spark.executor.extraJavaOptions。注意如果使用文件,需要满足file:协议,并且每个节点上的对应目录都有该文件;更新 $SPARK_CONF_DIR/log4j.properties文件,他会自动上传,注意前面两个优先级要比这个高。如果使用第一种方式,那么 app master 和 executor 都会使用相同的配置。

yarn的相关配置参考:

存放日志的配置如下:
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <source>yarn-site.xml</source>
</property>

<property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <source>yarn-default.xml</source>
</property>

<property>
    <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
    <value>logs</value>
    <source>yarn-default.xml</source>
</property>

日志保留时间
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    <source>yarn-site.xml</source>
</property>

history访问地址
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>0.0.0.0:10020</value>
    <source>mapred-default.xml</source>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hnode10:19888</value>
    <source>mapred-site.xml</source>
</property>

应用执行完日志保留的时间,默认0,即执行完立刻删除
<property>
    <name>yarn.nodemanager.delete.debug-delay-sec</name>
    <value>0</value>
    <source>yarn-default.xml</source>
</property>

<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>${hadoop.tmp.dir}/nm-local-dir</value>
    <source>yarn-default.xml</source>
</property>

更多内容关注公众号:

http://weixin.qq.com/r/-yjG3iTEbnkRrWC9933t (二维码自动识别)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值