欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

用Maven编译Spark 1.0.0源码以错误解决

  写在前面的话,最近发现有很多网站转载我博客的文章,这个我都不介意的,但是这些网站转载我博客都将文章的出处去掉了,直接变成自己的文章了!!我强烈谴责他们,鄙视那些转载文章去掉出处的人!所以为了防止这些,我以后发表文章的时候,将会在文章里面加入一些回复之后才可见的内容!!请大家不要介意,本博客Hadoop相关的文章都是原创,每篇文章都花了很长时间编写,这些都是无偿的,所以转载本文章请标明出处:
  本篇博客地址:《用Maven编译Spark 1.0.0源码以错误解决》: https://www.iteblog.com/archives/1038.html
  博客地址:过往记忆:https://www.iteblog.com

  目前Spark已经更新到1.0.0了,在本博客的《Spark 1.0.0于5月30日正式发布》中已经介绍了Spark 1.0.0的一些新特性。我们可以看到Spark 1.0.0带来了许多很不错的感受。本篇文章来介绍如何用Maven编译Spark 1.0.0源码。步骤主要如下:

一、先去Spark官网下载好源码。
# wget http://d3kbcqa49mib13.cloudfront.net/spark-1.0.0.tgz
# tar -zxf spark-1.0.0.tgz
二、设置MAVEN_OPTS参数

  在编译Spark的时候Maven需要很多内存,否则会出现类似下面的错误信息:

Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:545)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

解决方法是:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
三、 Cannot run program "javac": java.io.IOException:

  如果编译的过程出现以下错误,请设置一下Java path。

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.1.6:
compile (scala-compile-first) on project spark-core_2.10: wrap: 
java.io.IOException: Cannot run program "javac": java.io.IOException:
 error=2, No such file or directory -> [Help 1]
四、 Please set the SCALA_HOME

  这个错误很明显没有设置SCALA_HOME,去下载一个scala,然后设置一下即可。

[ERROR] Failed to execute goal org.apache.maven.plugins:
maven-antrun-plugin:1.7:run (default) on project spark-core_2.10:
 An Ant BuildException has occured: Please set the SCALA_HOME
 (or SCALA_LIBRARY_PATH if scala is on the path) environment 
variables and retry.
[ERROR] around Ant part ...<fail message="Please set the SCALA_HOME 
(or SCALA_LIBRARY_PATH if scala is on the path) environment variables 
and retry.">... @ 6:126 in spark-1.0.0/core/target/antrun/build-main.xml
五、选择相应的Hadoop和Yarn版本

  因为不同版本的HDFS在协议上是不兼容的,所以如果你想用你的Spark从HDFS上读取数据,那么你就的选择相应版本的HDFS来编译Spark,这个可以在编译的时候通过设置hadoop.version来选择,默认情况下,Spark是用Hadoop 1.0.4版本。

Hadoop versionProfile required
0.23.xhadoop-0.23
1.x to 2.1.x(none)
2.2.xhadoop-2.2
2.3.xhadoop-2.3
2.4.xhadoop-2.4

  (1)、对于Apache Hadoop 1.x、Cloudera CDH的mr1发行版,这些版本没有 YARN,所以我们可以用下面的命令来编译Spark

# Apache Hadoop 1.2.1
mvn -Dhadoop.version=1.2.1 -DskipTests clean package

# Cloudera CDH 4.2.0 with MapReduce v1
mvn -Dhadoop.version=2.0.0-mr1-cdh4.2.0 -DskipTests clean package

# Apache Hadoop 0.23.x
mvn -Phadoop-0.23 -Dhadoop.version=0.23.7 -DskipTests clean package

  (2)、对于Apache Hadoop 2.x, 0.23.x,Cloudera CDH以及其它一些版本的Hadoop,它们都是带有YARN,所以你可以启用“yarn-alpha”或者“yarn”配置选项,并通过yarn.version来设置不同版本的YARN,可选择的值如下:

YARN versionProfile required
0.23.x 到 2.1.xyarn-alpha
2.2.x和之后版本yarn

  我们可以通过下面命令来编译Spark

# Apache Hadoop 2.0.5-alpha
mvn -Pyarn-alpha -Dhadoop.version=2.0.5-alpha -DskipTests clean package

# Cloudera CDH 4.2.0
mvn -Pyarn-alpha -Dhadoop.version=2.0.0-cdh4.2.0 -DskipTests clean package

# Apache Hadoop 0.23.x
mvn -Pyarn-alpha -Phadoop-0.23 -Dhadoop.version=0.23.7 -DskipTests clean package

# Apache Hadoop 2.2.X
mvn -Pyarn -Phadoop-2.2 -Dhadoop.version=2.2.0 -DskipTests clean package

# Apache Hadoop 2.3.X
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package

# Apache Hadoop 2.4.X
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

# Different versions of HDFS and YARN.
mvn -Pyarn-alpha -Phadoop-2.3 -Dhadoop.version=2.3.0 -Dyarn.version=0.23.7 
                              -DskipTests clean package
  当然(1)我们也可以用sbt来编译Spark,本博客的《Spark 0.9.1源码编译》有详细的介绍,大家可以去参考。
  (2)、自己编译Spark可以学到许多东西,不过你完全可以去下载已经编译好的Spark,这完全由你自己去决定。
  (3)、本文原文出自: 《用Maven编译Spark 1.0.0源码以错误解决》: https://www.iteblog.com/archives/1038.html
  (4)、在下载下来的Spark源码中的同一级目录下有个make-distribution.sh脚本,这个脚本可以打包Spark的发行包,make-distribution.sh文件其实就是调用了Maven进行编译的,可以通过下面的命令运行:

./make-distribution.sh --tgz -Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.2.0

  大量关于Hadoop、Spark的干货博客:过往记忆:https://www.iteblog.com

如果你看到下面的输出信息,那恭喜你,编译成功了!

[WARNING] See http://docs.codehaus.org/display/MAVENUSER/Shade+Plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Spark Project Parent POM .......................... SUCCESS [2.172s]
[INFO] Spark Project Core ................................ SUCCESS [3:14.405s]
[INFO] Spark Project Bagel ............................... SUCCESS [22.606s]
[INFO] Spark Project GraphX .............................. SUCCESS [56.679s]
[INFO] Spark Project Streaming ........................... SUCCESS [1:14.616s]
[INFO] Spark Project ML Library .......................... SUCCESS [1:31.366s]
[INFO] Spark Project Tools ............................... SUCCESS [15.484s]
[INFO] Spark Project Catalyst ............................ SUCCESS [1:13.788s]
[INFO] Spark Project SQL ................................. SUCCESS [1:22.578s]
[INFO] Spark Project Hive ................................ SUCCESS [1:10.762s]
[INFO] Spark Project REPL ................................ SUCCESS [36.957s]
[INFO] Spark Project YARN Parent POM ..................... SUCCESS [2.290s]
[INFO] Spark Project YARN Stable API ..................... SUCCESS [38.067s]
[INFO] Spark Project Assembly ............................ SUCCESS [23.663s]
[INFO] Spark Project External Twitter .................... SUCCESS [19.490s]
[INFO] Spark Project External Kafka ...................... SUCCESS [24.782s]
[INFO] Spark Project External Flume Sink ................. SUCCESS [24.539s]
[INFO] Spark Project External Flume ...................... SUCCESS [27.308s]
[INFO] Spark Project External ZeroMQ ..................... SUCCESS [21.148s]
[INFO] Spark Project External MQTT ....................... SUCCESS [2:00.741s]
[INFO] Spark Project Examples ............................ SUCCESS [54.435s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17:58.481s
[INFO] Finished at: Tue Sep 16 19:20:10 CST 2014
[INFO] Final Memory: 76M/1509M
[INFO] ------------------------------------------------------------------------
本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【用Maven编译Spark 1.0.0源码以错误解决】(https://www.iteblog.com/archives/1038.html)
喜欢 (6)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(40)个小伙伴在吐槽
  1. 博主给力,在你这里学到了很多东西

    洛克鬼泣2019-04-02 19:33 回复
  2. Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-sql_2.10: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed. CompileFailed -> [Help 1]

    To see the full stack trace of the errors, re-run Maven with the -e switch.
    Re-run Maven using the -X switch to enable full debug logging.

    For more information about the errors and possible solutions, please read the following articles:
    [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

    After correcting the problems, you can resume the build with the command
    mvn <goals> -rf :spark-sql_2.10
    这个错误有没有人遇见过,求解.....

    DOVE2017-01-09 17:05 回复
  3. 感谢分享。

    化华2016-10-26 16:37 回复
  4. Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-streaming-flume-sink_2.10: wrap: java.io.IOException: Cannot run program "javac": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ -> [Help 1]
    最近刚学spark,请问这个错误怎么解决啊???

    myGitZgl2016-05-07 12:09 回复
    • 具体是什么错误?能不能贴出来啊?

      w3970907702016-05-09 11:46 回复
  5. 学习一下

    王老三2015-03-19 20:57 回复
  6. 看看,点赞

    bombviper2014-08-05 10:53 回复
  7. 看看

    bombviper2014-08-05 10:52 回复
  8. 点赞

    向小雨2014-07-24 15:05 回复
  9. 看看有没有我的问题的答案

    冬日的阳光zy2014-07-24 00:50 回复
  10. 主要想看看flume怎么配置,SBT里面flume包不会编译

    胸前第三颗星2014-07-23 15:55 回复
  11. 可能是Cookie失效了,解决办法已经发送到你的邮箱了。

    左手牵右手TEL2014-07-22 10:04 回复
  12. 感謝版主的分享 受教了

    ssslllllp2014-07-21 15:14 回复
  13. 是我想要的。谢

    yxw2014-07-18 15:42 回复
  14. thank you

    x2014-07-16 13:51 回复
  15. 感谢分享!

    gavin2014-07-16 09:32 回复
  16. 编译spark遇到了问题,在这参考到了有价值的东西。

    sparker2014-07-09 09:09 回复
  17. 真不错啊

    嘿嘿2014-07-08 20:27 回复
  18. 编译有错误,所以过来看看有什么能帮助我的。

    yyxzxh2014-07-08 14:47 回复
  19. 不错

    seeme2014-07-07 14:09 回复
  20. 不错,来看看,之前spark-0.9.1的我编译过,比较痛苦

    hadoop_spark2014-07-05 13:59 回复
  21. 不错,收益了

    xiaozhi2014-07-04 15:26 回复
  22. 写的很详细,谢谢

    404buffer2014-07-02 23:44 回复
  23. 不错 很好好的啊

    bruthe2014-07-02 14:53 回复
  24. 不错的文章,感谢博主

    lipeng2014-06-30 11:46 回复
  25. 都是实战经验,学习了

    hadooper2014-06-26 22:15 回复
  26. 博主厉害

    Bingooo2014-06-22 19:02 回复
  27. 博主厉害

    baiyang2014-06-20 20:25 回复
  28. spark入门学习,重点关注博主,不错

    jales2014-06-19 17:19 回复
  29. 编辑中遇到各种问题,在这找到了答案

    lee2014-06-19 16:07 回复
  30. 编译spark出现问题,看看博主的文章

    spark2014-06-18 15:18 回复
  31. 编辑中遇到各种问题,在这找到了答案

    spark爱好者2014-06-16 16:54 回复
  32. 1.0在别的机器上做为客户端来提交到master上时,状态一直是
    application identifier: application_1401431360131_0168
    appId: 168
    clientToAMToken: null
    appDiagnostics:
    appMasterHost: N/A
    appQueue: default
    appMasterRpcPort: -1
    appStartTime: 1402811940303
    yarnAppState: ACCEPTED
    distributedFinalState: UNDEFINED

    查看后台ui 发现 RMProxy: Connecting to ResourceManager at /0.0.0.0:8030
    Retrying connect to server: 0.0.0.0/0.0.0.0:8030. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)

    而在master 这台机器上可以提交成功,不知道问题出在哪

    风风火火2014-06-15 14:32 回复
  33. 博主真的是太厉害了,服了

    asdfasdf2014-06-12 16:01 回复
  34. 目前也在编译Spark 1.0,遇到了很多问题,这篇文章来得正是时候

    ancestor2014-06-10 08:25 回复
  35. 博主的文章质量一直很高!

    javaer2014-06-09 09:45 回复
  36. 文章的内容都是实战经验

    jim2014-06-08 17:40 回复
  37. 文章总结的很棒

    test2014-06-08 17:38 回复
  38. 一直都关注博主文章,很不错

    hadooper2014-06-07 00:11 回复
  39. 文章总结的很棒

    无名2014-06-07 00:03 回复