Spark 2.3.2源码编译,支持hadoop-2.6.0-cdh5.15.0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kaku812814843/article/details/83501266

前置准备&软件安装

spark2.3.2源码官方Apache下载地址:

http://spark.apache.org/downloads.html

编译spark源码的官方Apache参考文档

http://spark.apache.org/docs/2.3.2/building-spark.html

编译Spark源码的前置要求(官方Apache编译要求说明): 

Maven 3.3.9 or newer 
Java 8+ 
Scala 
Git(后文会通过分析make-distribution.sh脚本,来阐述为何需要安装Git)

本人使用的软件的版本: 
apache-maven-3.5.4-bin.tar.gz 
hadoop-2.6.0-cdh5.15.0.tar.gz 
jdk-8u181-linux-x64.tar.gz 
scala-2.12.7.tgz

关于maven本地仓库配置的建议(可不配置,默认本地仓库位置在/home/用户名/.m2/repository目录下): 
maven的setting.xml文件配置 指定本地仓库的位置:

<localRepository>自己指定的本地仓库目录</localRepository>

解压Spark源码到~/app/下(由于本人使用的Linux是ubuntu系统版本,以下下所有Linux命令都是ubuntu版本命令,若读者使用CentOS或者其他Linux版本请自行查找相关命令)

kaku@ubuntu:~$ tar -zxvf spark-2.3.2.tgz -C ~/app/

Git的安装:

kaku@ubuntu:~$ sudo apt-get install git

Building with Maven

配置在系统环境变量里(官方建议Maven的内存配置大一点,不然有可能会出现报错):

export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

如果不配置,可能会遇到如下问题:

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.11/classes...
[ERROR] Java heap space -> [Help 1]


通过观察pom.xml,可以观察到编译Spark的时候,如果不手动指定hadoop与yarn的版本,会默认采用hadoop、yarn的版本 


因此,当我们使用官方文档里的命令:

./build/mvn -DskipTests clean package

编译时所使用的hadoop版本为2.6.5

官方文档也给出了编译指定hadoop版本为Apache Hadoop 2.6.X和Apache Hadoop 2.7.X and later的命令:

# Apache Hadoop 2.6.X
./build/mvn -Pyarn -DskipTests clean package

# Apache Hadoop 2.7.X and later
./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package

还有支持Hive和JDBC的编译命令:

# With Hive 1.2.1 support
./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package

根据官方文档的命令结合我使用的hadoop版本可以知道编译hadoop-2.6.0-cdh5.15.0的命令:

./build/mvn -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.15.0 -DskipTests clean package

命令简单解释:

./build/mvn
 -Pyarn    指定支持yarn
 -Phive -Phive-thriftserver    指定支持Hive和JDBC
 -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.15.0    指定支持hadoop以及设置hadoop的版本
 -DskipTests clean package    跳过测试,进行清理打包

以上Maven进行Spark 2.3.2源码编译完成,支持hadoop-2.6.0-cdh5.15.0编译,编译结果会得到Spark相应的Maven工程,并不是能直接运行的Spark

Building a Runnable Distribution

官方文档给出了编译一个可以运行的Spark的命令:

./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phadoop-2.7 -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes

该命令需要用到一个make-distribution.sh文件,文件在spark-2.3.2/dev/make-distribution.sh目录下

分析make-distribution.sh: 

[--mvn <mvn-command>]表示可以跟上maven的相关命令:
而-Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.15.0是相应的Maven编译不可直接运行的Spark的命令

发现make-distribution.sh中有需要需要检查使用Git,因此在前文中说在Spark源码编译之前需要安装Git


官方文档提示的Setting up Maven’s Memory Usage中在Spark源码编译之前所需要设置的,在make-distribution.sh的脚本中,已经给出不用自己手动设置了

这里可以发现make-distribution.sh脚本文件已经将maven的命令中的clean package -DskipTests封装到Linux变量$MVN中,即使用make-distribution.sh脚本进行Spark源码编译时命令不用带上clean package -DskipTests了,只需要添加Maven的其他相关参数即可(-Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.15.0)

由于make-distribution.sh脚本执行时会进行检测系统当前Scala、Hadoop、Hive的版本,会浪费很长时间,可选择将其注释掉用下面内容替代(根据自己的版本进行相应改动),如果你时间充足可以不进行修改

VERSION=2.3.2
SCALA_VERSION=2.12.7
SPARK_HADOOP_VERSION=2.6.0-cdh5.15.0
SPARK_HIVE=1

根据官方文档使用make-distribution.sh脚本进行Spark源码编译的命令结合我使用的hadoop版本可以知道编译hadoop-2.6.0-cdh5.15.0的命令:

kaku@ubuntu:~/app/spark-2.3.2$ ./dev/make-distribution.sh --name 2.6.0-cdh5.15.0 --tgz -Dhadoop.version=2.6.0-cdh5.15.0 -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn

编译中可能会遇到的问题:

这个问题是因为本人使用的hadoop是cdh版本而且Maven仓库用的不是官方Maven中央仓库是阿里云Maven镜像仓库,而阿里云Maven镜像里hadoop是Apache版本(官方Maven中央仓库里的hadoop也是Apache版本的),所以Maven找不到cdh版的hadoop报错(如果使用的hadoop不是cdh版本是正常的官方Apache版本应该不会出现这样的问题),需要在spark-2.3.2/pom.xml配置文件中repositories标签下加入cdh版的hadoop的一个仓库:

<repository>
    <id>cloudera</id>
    <name>cloudera Repository</name>
    <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>

既然说到阿里云Maven镜像,那就在提一个建议吧,可以在apache-maven-3.5.4/conf目录下的settings.xml配置文件中mirrors标签下加入阿里云Maven镜像,这样可以提高Maven工程编译的速度,当然这只是建议(如果时间充足可以考虑不添加)

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

使用make-distribution.sh脚本编译一个可以运行的Spark完成:

 编译成功后在spark-2.3.2目录下会得到一个压缩包文件spark-2.3.2-bin-2.6.0-cdh5.15.0.tgz


启动运行spark: 

解压压缩包文件spark-2.3.2-bin-2.6.0-cdh5.15.0.tgz

kaku@ubuntu:~/app/spark-2.3.2$ tar -zxvf spark-2.3.2-bin-2.6.0-cdh5.15.0.tgz -C ~/app/

进入spark-2.3.2-bin-2.6.0-cdh5.15.0/bin目录运行命令(本人使用local模式两个线程启动):

kaku@ubuntu:~/app/spark-2.3.2-bin-2.6.0-cdh5.15.0/bin$ ./spark-shell --master local[2]

启动完成:

猜你喜欢

转载自blog.csdn.net/kaku812814843/article/details/83501266