• Spark 源码编译


    写在前面

    生产上的spark一般来说都是需要我们自己手动编译的,编译适合自己公司生产环境上的spark版本。参照官网http://spark.apache.org/docs/latest/building-spark.html

    前置:使用Maven构建Spark需要Maven 3.5.4和Java 8.

    Spark 源码编译

    首先调大CacheSize

    vim ~/.bash_profile
    export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
    不把参数调大可能会报OOM的错误,如下:
    [ERROR] Java heap space -> [Help 1]

    方式一:不推荐

    Spark 源代码中自带一个maven
    ./build/mvn -DskipTests clean package
    这样编译出来的都是源代码中pom.xml中指定的版本
    默认情况编译的是不支持yarn,hive,jdbc…这样就不能使用yarn,访问hive等

    方式二:不能得到tgz的包

    以上种种原因,我们坑定是需要自己指定hadoop,hive等等的版本
    -P 通过-P来指定pom文件中的哪一个profile,是不能乱写的,必须要pom文件中有定义过才行
    -Pyarn 让yarn生效
    -Phadoop-2.7 指定的hadoop版本是2.7,默认是hadoop2.6
    -Dhadoop.version=2.7.3 -D指定具体的小版本

    支持yarn,并指定hadoop的版本:

    # Apache Hadoop 2.6.X
    ./build/mvn -Pyarn -DskipTests clean package
    
    # Apache Hadoop 2.7.X and later
    ./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package
    

    支持hive:

    # With Hive 1.2.1 support
    
    ./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package
    

    我们公司的版本是:
    hadoop: hadoop-2.6.0-cdh5.7.0.tar.gz
    scala:scala-2.11.8.tgz

    直接来到下载的源码根目录,使用自己的maven,执行:

    mvn -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -DskipTests clean package
    

    第一次编译会非常慢,会下载非常多的依赖
    执行可能会报错: zinc
    解决后,再次执行。但是这样的方式是不能得到类似.tar.gz这样的文件的。

    方式三:推荐

    上产上使用的方式是make-distribution.sh:文件
    https://github.com/apache/spark/blob/master/dev/make-distribution.sh
    就是封装好了许多maven的参数

    –name: 指定打包出来的文件的名称,建议就使用hadoop的版本

    源码的根目录执行:

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

    直接这样是会很慢的,要想快一点也是可以的
    make-distribution.sh
    找到源码根目录/dev/make-distribution.sh,
    手动指定以下的版本,先注释掉,再贴进去就可以【生产最佳实践】

    VERSION=2.4.3
    SCALA_VERSION=2.11
    SPARK_HADOOP_HOME=2.6.0-cdh5.7.0
    SPARK_HIVE=1

    保存退出,再次执行上面的编译命令

    报错:
    Failed to execute goal on project spark_launcher_2.11…

    修改 下载源码的pom.xml,/repo 进行搜索

    添加cdh的仓库

    <repositories>
    	...
    	<repository>
    		<id>cloudera</id>
    	 	<name>Cloudera Repository</name>
    	 	<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    	</repository>
    
    </repositories>
    

    保存退出,再次执行上面的编译命令

    名字由来:

    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
    

    编译成功,成功文件位置在源代码的根目录下
    spark-2.4.3-bin-2.6.0-cdh5.7.0

    Spark 安装包目录结构说明:

    bin/  存放客户端相关的脚本
    conf/ 配置文件
    data/ 存放测试数据
    examples/ Spark自带的测试用例, 重点
    jars/ 存放Spark相应的jar包, 2.x里面是散的
    lib/
    logs/
    python/
    sbin/ 存放服务端相关的脚本:启停集群...
    work/
    yarn/ 存放yarn相关的jar包
    

    几个点:
    1.make-distribution.sh 这个shell文件的学习 重点
    2.编译过程的最佳实践,手动指定参数
    3.编译出来的examples测试用例的学习

    很多东西可以借助别人的,github等。对自己的代码也要学会复用,自己的代码总结好。新的项目说不定就能使用上

  • 相关阅读:
    寻找两个有序数组的中位数
    JAVA设计模式(组合模式)
    excel 操作
    研究生英语-春
    cvs
    Spring课程安排
    Spring的事务管理
    在WEB项目中集成Spring
    计算机网络参考模型
    揭开5G神秘面纱
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614734.html
Copyright © 2020-2023  润新知