Spark 源码编译

摘要:
方法3:建议使用make-distribution.sh:filehttps://github.com/apache/spark/blob/master/dev/make-distribution.sh它封装了许多maven参数-name:指定打包文件的名称。建议使用Hadoop版本源代码的根目录执行:/Dev/make distribution。sh-name2.6.0-cdh5.7.0--tgz-Hive-Phive-freetserver-Pyarn-Shadoop-2.6-Shadowop.version=2.6.0-cdh5.70直接执行此操作非常缓慢。如果你想更快,你也可以进行分配。sh查找源代码根目录/dev/make distribution。sh,手动指定以下版本,首先将其注释掉,然后将其粘贴到version=2.4.SCALA_version=2.11SPARK_HADOOP_HOME=2.6.0-cdh5.7.0SPARK_HIVE=1保存并退出,然后再次执行上述编译命令。报告错误:无法执行单独的项目spark_ launcher_ 2.11…

写在前面

生产上的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等。对自己的代码也要学会复用,自己的代码总结好。新的项目说不定就能使用上

免责声明:文章转载自《Spark 源码编译》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java 基础之详解 Java IO@RestController注解下返回到jsp视图页面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

alluxio2.0特性-预览

项目地址 https://github.com/Alluxio/alluxio/tree/branch-2.0-preview 2.0版本-构思和设计 支持超大规模数据工作负载 Alluxio作为计算和存储之间的数据编排层,使数据移动并且可以跨多个不同的存储系统访问:HDFS,对象存储,网络附加存储,随着时间的推移,Alluxio需要的元数据支持规模 提供...

ubuntu13.04下载android4.0.1源码过程

最初我参考的是老罗的博客http://blog.csdn.net/luoshengyang/article/details/6559955 进行下载安装的,但弄着弄着就发现不太对劲了。这里记录下详细过程: 1,我的前提是已经搭建好了Android开发环境,也即jdk已经安装好了,输入java -version来检查是否成功。搭建android开发环境可以...

ERROR: Cannot set priority of registrydns process 33740

hdp安装yarn时,yarn registry dns无法启动。报错 ERROR: Cannot set priority of registrydns process xxxxx 原因: The default port for Registry DNS is 53. Check if that port is opened netstat -tnlp...

pyspark 针对mongodb的读写

1.创建pyspark与mongodb的连接,首先加载依赖包,其有三种方式: 1)直接将其放在在安装spark的jars目录下; 2)在spark_submit中,添加依赖包信息; 3)在创建spark的对象的时候添加依赖信息,具体案例如下图所示 spark = SparkSession .builder .appName('mongo c...

Hive速览

一、概述 Hive由Facebook开源,是一个构建在Hadoop之上的数据仓库工具 将结构化的数据映射成表 支持类SQL查询,Hive中称为HQL 1.读模式 2.Hive架构 3.使用Hive的原因 Hadoop数据分析的问题: MapReduce实现复杂查询逻辑开发难度大,周期长 开发速度无法快速满足业务发展 使用Hive原因 类似SQL语法,使...

Android 7.0 Gallery图库源码分析1

分析一个项目的源代码时,第一件事就是查看清单文件,找到程序入口,我们从Gallery2源码的清单文件中可以看到GalleryActivity是此应用的启动Activity。 1 <activity android:name="com.android.gallery3d.app.GalleryActivity" android:label="@stri...