博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark 编译
阅读量:7209 次
发布时间:2019-06-29

本文共 5499 字,大约阅读时间需要 18 分钟。

hot3.png

1.编译环境
CentOS6.6  JDK1.7.0_80  Maven3.2.5
2.下载Spark源代码并解压
[yyl@vmnode ~]$ pwd/home/yyl[yyl@vmnode make]$ pwd/home/yyl/make[yyl@vmnode make]$ wget http://mirrors.cnnic.cn/apache/spark/spark-1.5.0/spark-1.5.0.tgz[yyl@vmnode make]$ tar -zxf spark-1.5.0.tgz
3.编译
解压后的源码包的根目录下有个 pom.xml 文件,这个文件就是使用 Maven 编译 Spark 的脚步文件。
OK,现在开始编译:
[yyl@vmnode spark-1.5.0]$ pwd/home/yyl/make/spark-1.5.0[yyl@vmnode spark-1.5.0]$ export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"[yyl@vmnode spark-1.5.0]$ mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
编译过程中报错:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4:enforce (enforce-versions) on project spark-parent_2.10: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
这个错误有两个解决办法:一是编译时加入 -Denforcer.skip=true 参数;二是修改 pom.xml 文件中 properties 定义的变量的值为实际环境中 maven 、java 的版本
[yyl@vmnode spark-1.5.0]$ vim pom.xml     
1.7
3.2.5
解决上面的错误后重新编译,结果又报错:
[INFO] ------------------------------------------------------------------------[INFO] Reactor Summary:[INFO] [INFO] Spark Project Parent POM ........................... SUCCESS [  4.619 s][INFO] Spark Project Launcher ............................. SUCCESS [ 11.669 s][INFO] Spark Project Networking ........................... SUCCESS [ 11.537 s][INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [  6.245 s][INFO] Spark Project Unsafe ............................... SUCCESS [ 17.217 s][INFO] Spark Project Core ................................. SUCCESS [04:15 min][INFO] Spark Project Bagel ................................ SUCCESS [ 22.739 s][INFO] Spark Project GraphX ............................... SUCCESS [01:09 min][INFO] Spark Project Streaming ............................ SUCCESS [02:04 min][INFO] Spark Project Catalyst ............................. SUCCESS [02:43 min][INFO] Spark Project SQL .................................. SKIPPED......---------------------------------------------------java.lang.reflect.InvocationTargetException        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)Caused by: scala.reflect.internal.Types$TypeError: bad symbolic reference. A signature in WebUI.class refers to term servletin value org.jetty which is not available.It may be completely missing from the current classpath, or the version onthe classpath might be incompatible with the version used when compiling WebUI.class.        at scala.reflect.internal.pickling.UnPickler$Scan.toTypeError(UnPickler.scala:847)        at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:854)        at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.load(UnPickler.scala:863)        at scala.reflect.internal.Symbols$Symbol.typeParams(Symbols.scala:1489)......
这是什么原因呢,查看Spark1.5官方编译文档,有这么一句话:
Building Spark using Maven requires Maven 3.3.3 or newer and Java 7+. The Spark build can supply a suitable Maven binary; see below. 果断升级 maven 到3.3.3,再次编译,OK,编译成功!
如果你想要编译兼容 Scala2.11.x 的 Spark,则使用如下命令编译(默认兼容 Scala2.10.x):
[yyl@vmnode spark-1.5.0]$ ./dev/change-scala-version.sh 2.11[yyl@vmnode spark-1.5.0]$ mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
编译支持 Hive 和 JDBC 的 Spark
[yyl@vmnode spark-1.5.0]$ mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package
4. 生成部署包
源码包的根目录下有个 make-distribution.sh 脚本,这个脚本可以打包Spark的发行包,make-distribution.sh 文件其实就是调用了 Maven 进行编译,可以通过下面的命令运行:
[yyl@vmnode spark-1.5.0]$ ./make-distribution.sh --tgz -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver
make-distribution.sh的语法:./make-distribution.sh [--name] [--tgz] [--mvn <mvn-command>] [--with-tachyon] <maven build options>
   --tgz :在根目录下生成 spark-$VERSION-bin.tgz ,不加此参数时不生成 tgz 文件,只生成 /dist 目录
   --name NAME :和 tgz 结合可以生成 spark-$VERSION-bin-$NAME.tgz 的部署包,不加此参数时 NAME 为 hadoop 的版本号
   --with-tachyon :是否支持内存文件系统 Tachyon ,不加此参数时不支持 tachyon
PS:编译时如何指定 Hadoop 版本
例如,Spark要读取的是 Hadoop2.5.2 上的文件,使用 maven 该如何编译呢?答案是:mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.5.2 -Phive -Phive-thriftserver -DskipTests clean package
具体请看官网说明:
另外,如若遇到官方编译文件不兼容的新的 Hadoop 版本,只能是自行修改 pom.xml 文件,添加新版本的支持,例如添加:
    <profile>
      <id>hadoop-2.7</id>
      <properties>
        <hadoop.version>2.7.1</hadoop.version>
        <jets3t.version>0.9.3</jets3t.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <curator.version>2.6.0</curator.version>
      </properties>
    </profile>

转载于:https://my.oschina.net/zc741520/blog/505521

你可能感兴趣的文章
解决Wamp 开启vhost localhost 提示 403 Forbbiden 的问题!
查看>>
[WinAPI] API 14 [获取、设置文件属性和时间]
查看>>
AutoCompleteTextView 和 TextWatcher 详解
查看>>
2.5. SciTE
查看>>
喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
查看>>
【转载】Java 内存分配全面浅析
查看>>
【Android】监听Notification被清除
查看>>
jQuery动态五星评分
查看>>
自制简单表单验证relative与absolute定位
查看>>
C标准函数库中获取时间与日期、对时间与日期数据操作及格式化
查看>>
WebGIS中解决使用Lucene进行兴趣点搜索排序的两种思路
查看>>
驱动继电器实验
查看>>
技术宅---我的网上抢火车票攻略
查看>>
爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
查看>>
R+Hadoop大数据方案有哪些坑?
查看>>
架构,改善程序复用性的设计~第五讲 复用离不开反射和IOC
查看>>
Android 使用dagger2进行依赖注入(基础篇)
查看>>
一个游戏
查看>>
如何让帝国CMS7.2搜索模板支持动态标签调用
查看>>
公众号和小程序可以同名了 名称支持同主体复用
查看>>