Spark 源码编译

选择Spark源码

  • 官网:spark.apache.org
  • 目的:从官网下载源码进行编译比下载的安装包要完整,并且可以定向编译出匹配自己Hadoop及其他组件的Spark版本

环境准备

  • JDK: Spark 2.2.0及以上版本只支持JDK1.8
  • Maven: maven3.3.9; 设置maven环境变量时,需设置maven内存:
    export MAVEN_OPTS=”-Xmx2g -XX:ReservedCodeCacheSize=512m”

  • scala:scala2.11.8

  • git: 下载 sudo yum install git

编译

方式一:

  • 命令:mvn -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -DskipTests clean package
  • 解释:
    -P,指定profile,即指定Spark支持的其他组件
    -D,指定组件的小版本
    -Pyarn,支持yarn
    -Phive -Phive-thriftserver,支持hive,JDBC
    -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0,指定hadoop版本

  • 编译报错:

    1. [ERROR] Failed to execute goal on project spark-launcher_2.11: 
    2. Could not resolve dependencies for project org.apache.spark:spark-launcher_2.11:jar:2.2.0: 
    3. Could not find artifact org.apache.hadoop:hadoop-client:jar:2.6.0-cdh5.7.0 in central (https://repo1.maven.org/maven2) -> [Help 1]
    

    https://repo1.maven.org/maven2 该连接是默认的中央仓库地址(我们编译的是CDH版本),使用maven下载jar包,但是默认的连接并没有找到,所以我们要修改pom.xml,重新设置连接地址,在pom.xml添加如下内容:

    1. <repositories>
    2. <repository>
    3.   <id>cloudera</id>
    4.   <name>cloudera Repository</name>
    5.   <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    6. </repository>
    7. </repositories>
    

    再次输入命令,编译。

方式二:

  • 使用此种编译方式,可以将编译好的文件打成tar包,推荐使用

    1. ./dev/make-distribution.sh \
    2. --name 2.6.0-cdh5.7.0 \
    3. --tgz \
    4. -Dhadoop.version=2.6.0-cdh5.7.0 \
    5. -Phadoop-2.6 \
    6. -Phive -Phive-thriftserver \
    7. -Pyarn
    
  • 使用这种方式编译,编译过程会很慢,需要修改/dev目录下的make-distribution.sh文件:

    1. #VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
    2. #SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
    3. #    | grep -v "INFO"\
    4. #    | tail -n 1)
    5. #SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
    6. #    | grep -v "INFO"\
    7. #    | tail -n 1)
    8. #SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
    9. #    | grep -v "INFO"\
    10. #    | fgrep --count "<id>hive</id>";\
    11. #    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
    12. #    # because we use "set -o pipefail"
    13. #    echo -n)
    

    使用#注释这段内容,并添加如下内容:

    1. VERSION=2.2.0
    2. SCALA_VERSION=2.11
    3. SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
    4. SPARK_HIVE=1
    
  • 再次编译,生成spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz压缩包

  • 生成的压缩包由make-distribution.sh脚本生成

    1. if [ "$MAKE_TGZ" == "true" ]; then
    2.   TARDIR_NAME=spark-$VERSION-bin-$NAME
    3.   TARDIR="$SPARK_HOME/$TARDIR_NAME"
    4.   rm -rf "$TARDIR"
    5.   cp -r "$DISTDIR" "$TARDIR"
    6.   tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
    7.   rm -rf "$TARDIR"
    8. fi
    

解压

  • 使用tar -xzvf解压,查看目录:
    bin:存放客户端相关的脚本
    conf:存放配置文件
    data:存放测试数据
    examples:Spark自带的测试用例,里面有很多好的例子**
    jars:存放Spark相关的jar包(最佳实践)
    sbin:存放服务端相关的脚本,启动停止集群。。。
    yarn:存放yarn相关的jar包
发布了44 篇原创文章 · 获赞 30 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章