因直接下载官方版本的spark1.0.0-hadoop2(hadoop2,cdh5),部署在hadoop2.0.0-cdh4.7.0版本上一直不成功,google了一下,看到:http://apache-spark-user-list.1001560.n3.nabble.com/spark-1-0-0-on-yarn-td6636.html 这篇文件,决定重新编译spark1.0.0。
Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对不同场景而已:
- Maven编译
- SBT编译
- IntelliJ IDEA编译(可以采用Maven或SBT插件编译),适用于开发人员
- 部署包生成(内嵌Maven编译),适用于维护人员
SPARK_HADOOP_VERSION=2.0.0-cdh4.7.0 SPARK_YARN=true sbt/sbt assembly
export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”
再运行:
mvn -Pyarn-alpha -Dhadoop.version=2.0.0-cdh4.7.0 -Dprotobuf.version=2.5.0 -DskipTests clean package
在maven projects视图选择Spark Project Parent POM(root),然后选中工具栏倒数第四个按钮(ship Tests mode)按下,这时Liftcycle中test是灰色的。
-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
按OK 保存。
回到maven projects视图,点中Liftcycle中package,然后按第5个按钮(Run Maven Build按钮),开始编译。其编译结果和Maven编译是一样的。
- –hadoop VERSION:打包时所用的Hadoop版本号,不加此参数时hadoop版本为1.0.4。
- –with-yarn:是否支持Hadoop YARN,不加参数时为不支持yarn。
- –with-hive:是否在Spark SQL 中支持hive,不加此参数时为不支持hive。
- –skip-java-test:是否在编译的过程中略过java测试,不加此参数时为略过。
- –with-tachyon:是否支持内存文件系统Tachyon,不加此参数时不支持tachyon。
- –tgz:在根目录下生成 spark-$VERSION-bin.tgz,不加此参数时不生成tgz文件,只生成/dist目录。
- –name NAME:和–tgz结合可以生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此参数时NAME为hadoop的版本号。
./make-distribution.sh –hadoop 2.0.0-cdh4.7.0 –with-yarn –tgz
./make-distribution.sh –hadoop 2.0.0-cdh4.7.0 –with-yarn –with-hive –tgz
./make-distribution.sh –hadoop 2.0.0-cdh4.7.0 –with-yarn –with-tachyon –tgz
生成在部署包位于根目录下,文件名类似于spark-1.0.0-bin-2.0.0-cdh4.7.0.tgz。
[ERROR] /home/hadoop2/spark-1.0.0/yarn/alpha/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocationHandler.scala:36: object AMResponse is not a member of package org.apache.hadoop.yarn.api.records
[ERROR] import org.apache.hadoop.yarn.api.records.{AMResponse, ApplicationAttemp
tId}
[ERROR] ^
[ERROR] /home/hadoop2/spark-1.0.0/yarn/alpha/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocationHandler.scala:110: value getAMResponse is not a member of
org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse
[ERROR] val amResp = allocateExecutorResources(executorsToRequest).getAMResp
onse
[ERROR] ^
[ERROR] two errors found
解决方法:
修改spark-1.0.0/yarn/alpha/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocationHandler.scala文件:
(1)
import org.apache.hadoop.yarn.api.records.{AMResponse, ApplicationAttemptId}
改为:
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId
(2)
val amResp = allocateExecutorResources(executorsToRequest).getAMResponse
改为:
val amResp = allocateExecutorResources(executorsToRequest)
之后编译成功
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。