根据官方文档,Spark可以用Maven进行编译,但是我试了好几个版本都编译不通过,所以没用(如果大家用Maven编译通过了Spark,求分享。)。这里是利用sbt对Spark进行编译。中间虽然也遇到了很多问题,但是经过几天的折腾,终于通过了,关于如何解决编译中间出现的问题,可以参见本博客的《Spark源码编译遇到的问题解决》进行阅读。
Spark 0.9.1可以用yarn(不过不是从这个版本开始支持的,从0.6.0开始支持, 在0.7.0和0.8.0有相应的提升),我用到的Hadoop版本为2.2.0,所以下面的所有编译过程都是在Hadoop 2.2.0环境下进行的。下载Spark,并用sbt进行编译
[wyp@master spark]$ wget http://d3kbcqa49mib13.cloudfront.net/spark-0.9.1.tgz [wyp@master spark]$ tar -zxf spark-0.9.1.tgz [wyp@master spark]$ ls -lh drwxr-xr-x 25 wyp wyp 4.0K Mar 27 13:28 spark-0.9.1 -rw-r--r-- 1 wyp wyp 6.2M Apr 9 06:45 spark-0.9.1.tgz [wyp@master spark]$ cd spark-0.9.1 [wyp@master spark-0.9.1]$ SPARK_HADOOP_VERSION=2.2.0 \ SPARK_YARN=true sbt/sbt assembly ######################################################################## 100.0% Launching sbt from sbt/sbt-launch-0.12.4.jar ############################################################# 这里有很多输出信息,就不列出 ############################################################# [success] Total time: 256 s, completed Apr 18, 2014 6:11:40 PM
编译spark整个过程比较慢,中间需要下载很多依赖包。请耐心等待。编译完之后,会在assembly/target/scala-2.10目录和examples/target/scala-2.10/目录分别产生spark-assembly-0.9.1-hadoop2.2.0.jar和spark-examples-assembly-0.9.1.jar文件(当然,整个编译过程不止产生这两个文件)。
wget http://d3kbcqa49mib13.cloudfront.net/spark-0.9.1-bin-hadoop2.tgz
下载完之后,可以直接解压,即可使用。
验证Spark是否可以,我们可以单机模式下运行Spark自带的几个例子,有两种模式:yarn-standalone模式和yarn-client模式,文档里面都有介绍,下面是如何使用yarn-standalone模式的例子:
SPARK_JAR=<SPARK_ASSEMBLY_JAR_FILE> \ ./bin/spark-class org.apache.spark.deploy.yarn.Client \ --jar <YOUR_APP_JAR_FILE> \ --class <APP_MAIN_CLASS> \ --args <APP_MAIN_ARGUMENTS> \ --num-workers <NUMBER_OF_WORKER_MACHINES> \ --master-class <ApplicationMaster_CLASS> --master-memory <MEMORY_FOR_MASTER> \ --worker-memory <MEMORY_PER_WORKER> \ --worker-cores <CORES_PER_WORKER> \ --name <application_name> \ --queue <queue_name> \ --addJars <any_local_files_used_in_SparkContext.addJar> \ --files <files_for_distributed_cache> \ --archives <archives_for_distributed_cache>
yarn-client模式的例子:
SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.1-hadoop2.0.5-alpha.jar \ SPARK_YARN_APP_JAR=examples/target/scala-2.10/spark-examples-assembly-0.9.1.jar \ ./bin/run-example org.apache.spark.examples.SparkPi yarn-client 或者 SPARK_YARN_MODE=true \ SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.1-hadoop2.0.5-alpha.jar \ SPARK_YARN_APP_JAR=examples/target/scala-2.10/spark-examples-assembly-0.9.1.jar \ MASTER=yarn-client ./bin/spark-shell
下面是具体的步骤:
[wyp@master spark-0.9.1]$ export \ SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.1-hadoop2.2.0.jar [wyp@master spark-0.9.1]$ ./bin/spark-class org.apache.spark.deploy.yarn.Client --jar examples/target/scala-2.10/spark-examples-assembly-0.9.1.jar --class org.apache.spark.examples.SparkPi --args yarn-standalone --num-workers 3 --master-memory 4g --worker-memory 2g --worker-cores 1 appDiagnostics: Application application_1396952624232_0176 failed 2 times due to AM Container for appattempt_1396952624232_0176_000002 exited with exitCode: -1000 due to: java.io.FileNotFoundException: File file:/export1/spark/ \ spark-0.9.1/examples/target/scala-2.10/spark-examples-assembly-0.9.1.jar does not exist .Failing this attempt.. Failing the application.
解决办法是在运行这个例子的时候设置一下Yarn的配置文件位置:
[wyp@master spark-0.9.1]$ export YARN_CONF_DIR=/home/q/hadoop-2.2.0/etc/hadoop
然后再运行,这时候将会成功,并且在类似下面的连接可以看到输出结果:
http://master:8042/node/containerlogs/ \ container_1396952624232_0177_01_000001/wyp/stdout/?start=-4096 Pi is roughly 3.13662
更复杂的例子:在Spark的例子里面,提供了一个图形闭包的程序,我们也可以来测试:
[wyp@master spark-0.9.1]$ export \ SPARK_JAR=./jars/spark-assembly-0.9.1-hadoop2.2.0.jar [wyp@master spark-0.9.1]$ ./bin/spark-class org.apache.spark.deploy.yarn.Client --jar ./jars/spark-examples-assembly-0.9.1.jar --class org.apache.spark.examples.SparkTC --args yarn-standalone --num-workers 3 --master-memory 4g --worker-memory 2g --worker-cores 1
这个程序运行的时间比较长,在我电脑上一共运行了17分钟左右,结果可以在计算节点上的stdout日志里面看到,我电脑上面的输出:
TC has 6254 edges.
说明你的Spark编译好了,下篇文章我将会介绍如何分布式部署Spark,感兴趣的同学可以关注本博客。
在本博客的《Spark在Yarn上运行Wordcount程序》文章中介绍了Spark在Yarn上运行Wordcount程序。
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Spark 0.9.1源码编译】(https://www.iteblog.com/archives/1016.html)