spark编译与onyarn的运行

Spark on yarn执行流程源代码分析

 

目前的分析主要基于spark0.9.0cdh5的版本进行分析,

 

源代码下载地址:https://github.com/cloudera/spark.git

 

下载方式:git clone url ./spark

 

进入spark目录,执行git checkout cdh5-0.9.0_5.0.0

 

 

 

 

源代码编译

 

使用sbt编译spark

 

运行sbt命令需要使用http代理,不然连接不上网络,进入sbt/目录,使用vim sbt修改里面的内容,

 

在最下面java 命令的第二行添加 -Dhttp.proxyHost=myserver -Dhttp.proxyPort=port \

 

运行如下命令编译spark

 

SPARK_HADOOP_VERSION=2.3.0-cdh5.0.0 SPARK_YARN=true sbt/sbt assembly

 

SPARK_HADOOP_VERSION后是hadoop的版本号,

 

 

 

SPARK_HADOOP_VERSION=2.2.0 sbt/sbt assembly

 

In addition, if you wish to run Spark on YARN, set SPARK_YARN to true:

 

SPARK_HADOOP_VERSION=2.0.5-alpha SPARK_YARN=true sbt/sbt assembly

 

http连接代理设置:

 

编辑spark_home/sbt/sbt文件,在文件最后的如下脚本部分:

 

printf "Launching sbt from ${JAR}\n"

 

java \

 

-Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \

 

-jar ${JAR} \

 

"$@"

 

修改为

 

printf "Launching sbt from ${JAR}\n"

 

java \

 

-Dhttp.proxyHost=myserver -Dhttp.proxyPort=port \

 

-Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \

 

-jar ${JAR} \

 

"$@"

 

 

 

通过如下命令通过sbtspark进行编译

 

SPARK_HADOOP_VERSION=2.3.0-cdh5.0.0 SPARK_YARN=true sbt/sbt assembly

 

 

 

sbt命令请参考http://www.scala-sbt.org/release/docs/Getting-Started/Running.html#common-commands

 

 

 

生成tar

 

spark_home的根目录下,执行如下命令,编译spark的分布式部署tar.gz

 

修改make-distribution.sh文件,

 

在如下命令后

 

Make directories

 

rm -rf "$DISTDIR"

 

mkdir -p "$DISTDIR/jars"

 

echo "Spark $VERSION built for Hadoop $SPARK_HADOOP_VERSION" > "$DISTDIR/RELEASE"

 



 

# Copy jars

 

cp $FWDIR/assembly/target/scala*/*assembly*hadoop*.jar "$DISTDIR/jars/"

 

添加此信息,把examples添加到tar.gz包中(测试过程可以执行此操作,把示例的代码一起打包起来)

 

# Make directories

 

mkdir -p "$DISTDIR/examples"

 



 

# Copy jars

 

cp $FWDIR/examples/target/scala*/*examples*assembly*.jar "$DISTDIR/examples/"

 

 

 

./make-distribution.sh --hadoop 2.3.0-cdh5.0.0 --with-yarn --tgz

 

命令执行完成后,在spark_home下会生成一个tar.gz包,spark-0.9.0-hadoop_2.3.0-cdh5.0.0-bin.tar.gz

 

 

 

通过Yarn运行spark示例程序

 

通过export命令设置yarnconf环境变量,如果没有配置全局的yarn conf环境变量

 

 

 

export YARN_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop

 

export SPARK_JAR=<spark_home>/jars/spark-assembly-0.9.0-incubating-hadoop2.0.0-cdh4.3.0.jar

 

export YARN_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop

 

export HADOOP_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop

 

SPARK_JAR=/home/hadoop/test.spark.yang/spark-0.9.0-incubating/jars/spark-assembly-0.9.0-incubating-hadoop2.0.0-cdh4.3.0.jar

 



 

./bin/spark-class org.apache.spark.deploy.yarn.Client \

 

--jar ./examples/spark-examples-assembly-0.9.0-incubating.jar \

 

--class org.apache.spark.examples.SparkTC \

 

--args yarn-standalone \

 

--num-workers 3 \

 

--worker-cores 1 \

 

--master-memory 512M \

 

--worker-memory 1g

 



 

通过java程序执行spark on yarn的启动

 

1.编写一个java应用程序,core-site/hdfs-site/yarn-site的配置文件添加到工程中。

 

2.sparkjar添加到工程中,作用于当前工程的class引用,

 

3.在工程中设置环境变量SPARK_JAR,来引用spark jar的位置,

 

4.在工程中设置环境变量SPARK_LOG4J_CONF,来引用spark log4j的位置

 

通过SPARK_YARN_USER_ENV配置其它用户定义的环境变量值。

 

通过SPARK_USE_CONC_INCR_GC配置是否使用默认的GC配置。,true/false

 

通过SPARK_JAVA_OPTS配置spark执行时的相关JAVA_OPTS.

 

通过JAVA_HOME配置java_home.

 

5.设置一些系统属性,共spark运行时的使用,当然这些个系统属性本身也有默认的值

 

a.属性名称QUEUE,默认值default。作用于am启动的队列名称,也可以在client调用进传入

 

b.属性名称spark.yarn.report.interval,默认值1000app运行监控的间隔时间ms

 

c.属性名称spark.yarn.submit.file.replication,默认值3。上传给yarn上运行的资源的复制份数,包括sparkjar,appjar

 

d.属性名称spark.yarn.max.worker.failures,默认值3numworker传入参数的值*2取最大值。

 

作用于app失败的重试次数,如果重试次数超过了指定的值,表示app运行失败。

 

e.属性名称spark.yarn.applicationMaster.waitTries,默认值10。等待SparkContext初始化完成的等待次数,

 

每次的等待时,让ApplicationMaster.sparkContextRef.wait=10000ms

 

f.属性名称spark.yarn.scheduler.heartbeat.interval-ms,默认值5000

 

通过此配置向RM设置am向其报告的时间间隔。

 

你可能感兴趣的:(spark,spark源代码编译,spark on yarn)