文章目录
前言:生产中不管是spark代码改造还是spark集成部署使用都离不开对spark源码的编译,本文详细记载了spark2.4.2版本源码编译的详细步骤,其中编译依赖的hadoop为2.6.0-cdh5.7.0版本
1.环境
1.1硬件环境
1台4G内存2core的CenOs6.x虚拟机
1.2软件环境
组件名称 | 组件版本 | 百度网盘链接 |
---|---|---|
VM | vm10 | 链接:https://pan.baidu.com/s/1N5i8p8htXz9H_v__YNV1lA 提取码:yasn |
Centos | centos6.7 | 链接:https://pan.baidu.com/s/1Z_6AcQ_WnvKz1ga_VCSI9Q 提取码:a24x |
JDK | jdk-8u45-linux-x64.gz | 链接:https://pan.baidu.com/s/1a8enrSl39Zp7tF2SJOcRJg 提取码:am6j |
Maven | apache-maven-3.5.4-bin.tar.gz | 链接:https://pan.baidu.com/s/1klnPGBrSlkbcqapzYbYjEA 提取码:svqo |
Scala | scala-2.11.12.tgz | 链接:https://pan.baidu.com/s/1hq1BIAZ9eqyQKYtn2SCplg 提取码:tipo |
注意:
1)JDK最低要求是1.8,maven最低要求是3.5.4,scala最低要求是2.11.12
2)官网编译链接
2.编译依赖软件安装
2.1 JDK安装
JDK安装非常的简单,具体安装步骤可参考我之前的博客。
版本验证:
[hadoop@hadoop001 app]$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
2.2 Maven安装
maven安装非常的简单,具体安装步骤可参考我之前的博客,在这里唯一要注意的是,在环境变量中最好添加如下配置:
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
版本验证:
[hadoop@hadoop001 app]$ which mvn
~/app/apache-maven-3.5.4/bin/mvn
2.3 Scala安装
Scala安装非常的简单,具体安装步骤可参考我之前的博客。
版本验证:
[hadoop@hadoop001 app]$ scala
Welcome to Scala 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
Type in expressions for evaluation. Or try :help.
scala> 1+1
res0: Int = 2
scala> :quit
3.编译Spark
本次编译的spark对应的hadoop是hadoop-2.6.0-cdh5.7.0的版本
3.1上传源码包以及解压
[hadoop@hadoop001 ~]$ cd ~/soft/
[hadoop@hadoop001 ~]$ tar -zxvf ~/soft/spark-2.4.2.tar.gz -C ~/source/
3.2配置pom文件
添加cdh仓库地址
[hadoop@hadoop001 ~]$ vim ~/source/spark-2.4.2/pom.xml
<repository>
<id>cloudera</id>
<name>cloudera repository</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
3.3(可选)修改ake-distribution.sh文件
为了加编译速度,修改ake-distribution.sh文件
[hadoop@hadoop001 ~]$ vim ~/source/spark-2.4.2/dev/make-distribution.sh
注销如下配置
#VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
# | grep -v "INFO"\
# | fgrep --count "<id>hive</id>";\
# # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
# # because we use "set -o pipefail"
# echo -n)
注销后面添加如下配置:
VERSION=2.4.2
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
SPARK_HIVE=1
3.4编译
- 执行如下命令,第一次编译会耗时很久,建议编译时虚拟机不要运行其它的程序。
[hadoop@hadoop001 ~]$ cd ~/source/spark-2.4.2/
[hadoop@hadoop001 spark-2.4.2]$ ./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0
- 命令参数解析:
1) --name 指定的是编译后”spark-2.4.2-后缀“ 的后缀名,规范写成hadoop的版本
2) -tgz,表示打成tar.gz包,必须有
3) -Pyarn,表示打的包支持yarn
4) -Phive -Phive-thriftserver,表示打的包支持hive的相关服务
5) -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0,表示打的包支持集成hadoop的相关服务
- package查看
#make-distribution脚本最终打包的包在sparkhome目录下
#生成的能运行的包:spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz
[hadoop@hadoop001 spark-2.4.2]$ du -sh ~/source/spark-2.4.2/*.tgz
205M /home/hadoop/source/spark-2.4.2/spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz
注意:并不是说高版本一定会支持低版本,比如spark2.4.2能支持的hadoop版本只能是pom文件中指定的那些。最低是hadoop-2.6
4.部署验证
4.1解压以及添加环境变量
#解压
[hadoop@hadoop001 spark-2.4.2]$ cp spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz ~/soft/
[hadoop@hadoop001 spark-2.4.2]$ cd ~/soft/
[hadoop@hadoop001 soft]$ tar -zxvf spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz -C ~/app/
#添加环境变量
[hadoop@hadoop001 ~]$ vim ~/.bash_profile
export SPARK_HOME=/home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
[hadoop@hadoop001 ~]$ source ~/.bash_profile
4.2解压后目录详解
bin:客户端相关脚本,如beeline,可以删除cmd的结尾文件
conf:配置文件脚本模板,用时拷贝修改
data:存放的一些测试数据
examples:存放测试用例代码,代码非常好 强烈建议观看学习
jars:一堆jar包,所有jar包放一起,不像1.0那样就几个jar,2.0散开了(最佳实践)
LICENSE、 licenses、 NOTICE、python、README.md、RELEASE等文件夹都可以删除
sbin:服务端的相关脚本,如集群启停命令
yarn:存在yarn相关jar包
4.2运行测试脚本
[hadoop@hadoop001 ~]$ spark-shell local[2]
19/04/28 20:57:03 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://hadoop001:4040
Spark context available as 'sc' (master = local[*], app id = local-1556456234963).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.2
/_/
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
测试脚本运行OK,在scala命令行窗口里我们就可以进行快速的spark的编程以及测试了。