当前位置: 首页 > 工具软件 > Spark Kernel > 使用案例 >

Spark(二)编译Spark

宗政子辰
2023-12-01
  1. 编译Spark方式: Spark官网提供了多种利用Maven编译Spark源码的方式,编译之前需要配置所需环境,Maven版本必须是3.3.9或者更高,JDK必须是1.8或者更高。
    1. 利用本地Maven编译:需要配置内存区的大小,配置如下:export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
    2. 利用Spark自带的Maven编译:在解压后的Spark源码的build目录中运行./mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package,Hadoop的版本根据自己的环境进行设置,具体的依赖也可以根据业务需求进行拼接相应的依赖。
    3. 利用make-distribution.sh编译(推荐)在:在解压后的Spark源码的dev目录中运行./make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver 。Hadoop的版本根据自己的环境进行设置,具体的依赖也可以根据业务需求进行拼接相应的依赖。这种编译方式出来的是一种能够解压运行的tgz包。
  2. 编译Spark:

    1. 下载Spark源码:http://spark.apache.org/downloads.html
    2. 解压:tar -zxvf spark-2.2.0.tgz
    3. 编译:我用到的编译方式就是Sparkmake-distribution.sh来编译。编译命令在解压后的Spark目录下的dev目录,里边有一个make-distribution.sh命令,我们就用这个命令来编译Spark。命令中的一些参数要根据自己的hadoop环境来指定对应的版本,hadoop的版本根据自己的实际环境来指定版本,我用的是CDH版本的hadoop。编译后的tgz包在Spark源码的根目录。命令如下:

      ./make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver 
      //以上命令解释
      ./make-distribution.sh --name 2.6.0-cdh5.7.0 \ //指定打成tgz包的名字
      --tgz \ //指定打成tgz包
      -Pyarn -Phadoop-2.6 \ //指定hadoop profile版本,并指定运行在Yarn上
      -Dhadoop.version=2.6.0-cdh5.7.0 \ //指定hadoop版本
      -Phive -Phive-thriftserver  //添加Hive依赖
  3. distribution.sh命令部分详解:在该脚本中我们可以看到我们的命令为什么不需要设置Maven的使用内存大小,也不需要设置忽略测试、以及设置--name以后编译出来的tgz包的名字.

    export MAVEN_OPTS="${MAVEN_OPTS:--Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m}"//已经设置了Maven使用的内存大小
    BUILD_COMMAND=("$MVN" -T 1C clean package -DskipTests $@) //将忽略测试已经拼到了命令中了
    TARDIR_NAME=spark-$VERSION-bin-$NAME //根据编译指定的--name,那么编出来的tar包的名字为spark-2.2.0-bin-2.6.0-cdh5.7.0.tar
  4. Hadoop版本与Profile对应关系:

    Hadoop versionProfile required
    2.2.xhadoop-2.2
    2.3.xhadoop-2.3
    2.4.xhadoop-2.4
    2.6.xhadoop-2.6
    2.7.x and later 2.xhadoop-2.7
  5. 编译中出现的问题:

    1. 没有配置Java环境变量
    2. 没有配置Maven环境变量
    3. 机器内存过小
    4. 指定HadoopCDH版本的时候找不到CDH版本的Hadoop,那么解决方案是在Spark源码的pom.xml文件中添加CDH版本的仓库,并且一定要添加在repositories标签的最后边。在repositories标签添加如下配置。
     <repository>
      <id>cloudera-releases</id>
       <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
       <releases>
           <enabled>true</enabled>
       </releases>
       <snapshots>
           <enabled>false</enabled>
       </snapshots>
    </repository>
 类似资料: