Spark编译hadoop-2.6.0-cdh2.7.0

前提

在这里我们编译的是Spark2.4.2,Hadoop版本为hadoop-2.6.0-cdh5.7.0,Scala版本为2.12.8

更多关于编译Spark2.4.2参见Spark编译官方文档

Spark-2.4.0下载地址:https://archive.apache.org/dist/spark/spark-2.4.2/spark-2.4.2.tgz

环境要求

The Maven-based build is the build of reference for Apache Spark. Building Spark using Maven requires Maven 3.5.4 and Java 8. Note that support for Java 7 was removed as of Spark 2.2.0.

JDK最低要求是1.8,maven最低要求是3.5.4,scala最低要求是2.11.12

软件环境

组件名称 组件版本 百度网盘链接
JDK jdk-8u45-linux-x64.gz 链接:https://pan.baidu.com/s/1dv40KqvdxepxOCMdZF5DRA 提取码:b3fr
Maven apache-maven-3.5.4-bin.tar.gz 链接:https://pan.baidu.com/s/1AiUR-rg5l79mE3RZ8MQ9QQ 提取码:xxon
Scala scala-2.11.12.tgz 链接:https://pan.baidu.com/s/1SzmPmdFTsDY89jSc9kvybQ 提取码:khod

JDK7+ 的安装 可参考教程

Maven 3.3.9+安装 可参考教程

Scala 安装 可参考教程

版本验证:

#jdk验证
[hadoop@hadoop-01 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)
#maven验证
[hadoop@hadoop-01 app]$ which mvn
~/app/apache-maven-3.6.0/bin/mvn
#scala验证
[hadoop@hadoop-01 app]$ scala -version
Scala code runner version 2.12.8 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.

编译spark要内存够大

环境变量中最好添加如下配置:export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

如果不加入这些参数到MAVEN_OPTS,可能会出现下面的错误

[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]

应为我这里使用的是CDH版的Hadoop所以需要在源码文件夹下的pom.xml中添加如下,位置在 第一个内,不然编译过程报错找不到对应的jar

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

为了加编译速度,修改ake-distribution.sh文件

[hadoop@hadoop-01 ~]$ 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.2.0        #Spark版本
SCALA_VERSION=2.11   #Scala版本(大版本)
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0 #Hadoop版本
SPARK_HIVE=1         #是否将Hive打包(非1表示不打包)

编译方法

使用build/mvn 来编译

build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package

(-Pyarn 提供yarn支持 ,—Phadoop-2.6 提供hadoop支持,并且指定hadoop的版本)

用build目录下自带的mvn来部署安装,它可以自动提供部署工程所需要的资源,并把资源下载到build目录下,如果用户提供合适的参数来部署的话,就选择用户的,如果没有提供,那么mvn也可以给他配置默认的参数和资源
编译完成后,你会发现在assembly/build下面多了一个target文件,这个就是编译的结果

用make-distributed 脚本来编译

编译完源代码后,虽然直接用编译后的目录再加以配置就可以运行spark,但是这时目录很庞大,部署起来很不方便,所以需要生成部署包。生成在部署包位于根目录下,文件名类似于spark-[spark版本号]-bin-[Hadoop版本号].tgz

使用命令如下

./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

在这里解释下该命令:

--name:指定编译完成后Spark安装包的名字
--tgz:以tgz的方式进行压缩
-Psparkr:编译出来的Spark支持R语言
-Phadoop-2.6:以hadoop-2.6的profile进行编译,具体的profile可以看出源码根目录中的pom.xml中查看
-Phive和-Phive-thriftserver:编译出来的Spark支持对Hive的操作
-Pmesos:编译出来的Spark支持运行在Mesos上
-Pyarn:编译出来的Spark支持运行在YARN上

这里我采用的是第二种make-distributed 脚本来编译

package查看

#make-distribution脚本最终打包的包在sparkhome目录下
#生成的能运行的包:spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz
[hadoop@hadoop-01 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
[hadoop@hadoop-01 spark-2.4.2]$ 

注意

如若编译过程中碰到以下报错,那就需要按照以下几个步骤检查配置一遍再进行编译

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-core_2.11: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed.: CompileFailed -> [Help 1]

1、在spark的pom文件中添加这个依赖,但是下边的那个version3.2.2,你要看自己的报错处的具体数字,我的是3.2.2

<dependency>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
</dependency>
#不管怎么样,你先加上吧,因为也没有别的办法,如果编译的过程中报错说pom文件有问题,具体就是显示你新加的那个位置有问题,那你就好好检查一下,如果没有问题还是报错,那就删了吧!

2、修改spark的pom文件这里的true,说改了这个在编译就能解决这个问题

<scalaVersion>${scala.version}</scalaVersion>
<recompileMode>incremental</recompileMode>
<useZincServer>true</useZincServer>
#此项默认应该就是ture,我是没做修改

3、如果你试完了以上方法还是报错,你需要检查一下你的zinc进程是否还留着,一定要杀死,要不然会让你的编译done住或者直接被莫名奇妙的杀死。

ps -ef |grep hadoop     #看看有关于zinc的进程全部杀掉

4、如果你进行了以上方法还是没有编译成功,或者说报错都没有改变,还有一种情况就是那么在你确定环境确实没有问题的情况下我们要进行一下操作,进入spark家目录,执行vim dev/make-distribution.sh

#找到第39行(MVN="$SPARK_HOME/build/mvn"),把它注掉并且添加MVN="${MAVEN_HOME}/bin/mvn"
#MVN="$SPARK_HOME/build/mvn"
MVN="${MAVEN_HOME}/bin/mvn"

部署验证

解压以及添加环境变量

#解压
[hadoop@hadoop-01 spark-2.4.2]$ cp spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz ~/software/
[hadoop@hadoop-01 spark-2.4.2]$ cd ~/software/
[hadoop@hadoop-01 software]$ tar -zxvf spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz -C ~/app/
#添加环境变量
[hadoop@hadoop-01 ~]$ 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@hadoop-01 ~]$ source ~/.bash_profile

运行测试脚本

[hadoop@hadoop-01 ~]$ spark-shell local[2]
19/05/05 08:32:57 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://hadoop-01:4040
Spark context available as 'sc' (master = local[*], app id = local-1557016387261).
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> 

猜你喜欢

转载自blog.csdn.net/weixin_43212365/article/details/89838286