spark2.4 整合 hadoop2.6.0-cdh5.7.0 源码编译

1.前置要求

  • java 8 +
  • maven 3.5.4 +
  • scala 2.11

2.下载 spark2.4 源码包

spark官网 下载页面中选择对应的spark版本和源码包
在这里插入图片描述

[hadoop@hadoop000 softwore]$ wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0.tgz
[hadoop@hadoop000 softwore]$ tar -zxvf spark-2.4.0.tgz -C ~/app/

3.编译

3.1 修改配置文件

为了让编译速度得到提升 修改如下的配置文件;

3.1.1 vim ./dev/make-distribution.sh

#VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | grep -v "WARNING"\
#    | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | grep -v "WARNING"\
#    | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | grep -v "WARNING"\
#    | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | grep -v "WARNING"\
#    | 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.0  # spark 版本
SCALA_VERSION=2.11 # scala版本
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0 #对应的hadoop版本 
SPARK_HIVE=1 # 支持的hive

3.1.1 vim ./pom.xml

修改远程仓库地址,(修改成阿里镜像地址,增加cdh镜像地址)

<repositories>
        <repository>
            <id>maven-ali</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
        
		<repository>
			<id>cloudera</id>
			<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
		</repository>
</repositories>

3.2 执行编译命令

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0

3.2.1 编译命令分析

./dev/make-distribution.sh \
--name 2.6.0-cdh5.7.0\				# 指定的名字,对最后产生的tgz包名 有联系
--tgz \								# 编译之后打成 tgz 包
-Phadoop-2.6 \						# 支持 hadoop2.6
-Phive\								# 支持 hive
-Phive-thriftserver\					# 支持 hive-thriftserver
-Pyarn\								# 支持 yarn
-Dhadoop.version=2.6.0-cdh5.7.0	# 对应的 hadoop2.6 具体的版本号

可以看到,在编译命令的时候有一些 -P -D 的参数指定,这些在 spark的pom.xml 都是有体现的;
首先,在 pom.xml 文件中 可以看到,spark2.4 版本是支持 hadoop2.6 ,2.7 ,3.1 的版本,然后看出来在对hadoop2.6支持并没有对应的版本;
在这里插入图片描述

然后在此处 找到了 对应的hadoop版本是2.6.5 但是我的是hadoop2.6.0-cdh5.7.0 所以,我在执行编译命令的时候
指定了 -Phadoop-2.6-Dhadoop.version=2.6.0-cdh5.7.0

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2.2 关于make-distribution.sh脚本

对于最后生成编译好的 spark-2.4.0-bin-2.6.0-cdh5.7.0.tgz 文件, 但是这个文件名是怎么来的呢;
在分析 ./dev/make-distribution.sh 这个脚本的时候

if [ "$MAKE_TGZ" == "true" ]; then
  TARDIR_NAME=spark-$VERSION-bin-$NAME
  TARDIR="$SPARK_HOME/$TARDIR_NAME"
  rm -rf "$TARDIR"
  cp -r "$DISTDIR" "$TARDIR"
  tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
  rm -rf "$TARDIR"
fi
TARDIR_NAME=spark-$VERSION-bin-$NAME

-$NAME 就是我们传入的-name 参数

tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"

最后会把将编译的spark相关内容 打成 tgz包

参考文档: https://spark.apache.org/docs/latest/building-spark.html

猜你喜欢

转载自blog.csdn.net/weixin_40420525/article/details/84963724