欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:977
  2. 浏览总数:11,944,989
  3. 评论:3936
  4. 分类目录:106 个
  5. 注册用户数:6113
  6. 最后更新:2018年12月13日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Spark 0.9.1源码编译

  根据官方文档,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文件(当然,整个编译过程不止产生这两个文件)。

  当然,你完全可以不编译Spark源码,直接去官方网站上下载编译好的Spark:

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程序。

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Spark 0.9.1源码编译】(https://www.iteblog.com/archives/1016.html)
喜欢 (6)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!