Spark的YARN模式部署

1:Spark的编译

Spark可以通过SBT(Scala Build Tool)或者Maven来编译,官方提供的二进制安装文件是用Maven编译,如果是要在YARN集群上运行的话,还需要再用SBT编译一下,生成YARN client端使用的jar包;最好是直接对源码使用SBT进行编译而生成YARN client端使用的jar包。笔者在测试过程中,对Maven编译过的Spark进行SBT二次编译后,在运行部分例子的时候有错误发生。

A:Maven编译

笔者使用的环境曾经编译过Hadoop2.2.0(参见hadoop2.2.0源码编译(CentOS6.4)),所以不敢确定Maven编译过程中,Spark是不是需要编译Hadoop2.2.0中使用的部分底层软件(看官方资料是需要Protobuf2.5)。除了网络下载不给力而不断的中止、然后重新编译而花费近1天的时间外,编译过程还是挺顺利的。

maven编译时,首先要进行设置Maven使用的内存项配置:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

然后用Maven编译:

mvn -Pnew-yarn -Dhadoop.version=2.2.0 -Dyarn.version=2.2.0 -DskipTestspackage

参考文档:Building Spark with Maven

B:SBT编译

Spark源码和二进制安装包都绑定了SBT。值得注意的是,如果要使用Scala进行Spark应用开发,必须使用和Spark版本相对应版本的Scala,如:Spark0.8.1对应的Scala2.9.3。对于不匹配的Scala应用开发可能会不能正常工作。

SBT编译命令:

SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assembly

二种编译都是在Spark根目录下运行。在SBT编译过程中如果网络不给力,手工中断编译(ctrl+z)后要用kill-9 将相应的进程杀死后,然后再重新编译,不然会被之前的sbt进程锁住而不能重新编译。

2:Spark运行

Spark可以单独运行,也可以在已有的集群上运行,如Amazon EC2、Apache Mesos、Hadoop YARN。下面用Spark自带的例程进行测试,运行的时候都是在Spark的根目录下进行。如果需要知道运行更详细的信息,可以使用log4j,只要在根目录下运行:

cp conf/log4j.properties.template conf/log4j.properties

A:本地运行

./run-example org.apache.spark.examples.SparkPi local

Spark的YARN模式部署

也可以多线程方式运行,下面的命令就是开4个线程。

./run-example org.apache.spark.examples.SparkPi local[4]

Spark的YARN模式部署

B:YARN集群

启动Hadoop2.2.0集群

确保环境变量HADOOP_CONF_DIR或YARN_CONF_DIR已经设置

在YARN集群中运行Spark应用程序的命令:

  1. SPARK_JAR=<SPARK_ASSEMBLY_JAR_FILE> ./spark-classorg.apache.spark.deploy.yarn.Client \ 
  2.   --jar <YOUR_APP_JAR_FILE> \ 
  3.   --class <APP_MAIN_CLASS> \ 
  4.   --args <APP_MAIN_ARGUMENTS> \ 
  5.   --num-workers <NUMBER_OF_WORKER_MACHINES> \ 
  6.   --master-class <ApplicationMaster_CLASS> 
  7.   --master-memory <MEMORY_FOR_MASTER> \ 
  8.   --worker-memory <MEMORY_PER_WORKER> \ 
  9.   --worker-cores <CORES_PER_WORKER> \ 
  10.   --name <application_name> \ 
  11.   --queue <queue_name> \ 
  12.   --addJars <any_local_files_used_in_SparkContext.addJar> \ 
  13.   --files <files_for_distributed_cache> \ 
  14.   --archives <archives_for_distributed_cache> 

例1计算PI,可以看出程序运行时是先将运行文件上传到Hadoop集群的,所以客户端最好是和Hadoop集群在一个局域网里。

  1. SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \ 
  2.     ./spark-class org.apache.spark.deploy.yarn.Client \ 
  3.       --jar examples/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \ 
  4.       --class org.apache.spark.examples.SparkPi \ 
  5.       --args yarn-standalone \ 
  6.       --num-workers 3 \ 
  7.       --master-memory 2g \ 
  8.       --worker-memory 2g \ 
  9.       --worker-cores 1 

Spark的YARN模式部署

例2计算TC

  1. SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \ 
  2.     ./spark-class org.apache.spark.deploy.yarn.Client \ 
  3.       --jar examples/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \ 
  4.       --class org.apache.spark.examples.SparkTC \ 
  5.       --args yarn-standalone \ 
  6.       --num-workers 3 \ 
  7.       --master-memory 2g \ 
  8.       --worker-memory 2g \ 
  9.       --worker-cores 1 

Spark的YARN模式部署

点击Tracking UI中的相应链接可以查看Spark的运行信息:

Spark的YARN模式部署

Spark的YARN模式部署

Spark的YARN模式部署

Spark的YARN模式部署

相关推荐