Spark1.0.0 源码编译和部署包生成

摘要:
问题指南:1.如何编译Spark 1.0.0源代码?Spark 1.0.0的源代码编译和部署包生成本质上是两种类型:Maven和SBT,但仅适用于不同的场景:Maven编译SBT编译IntelliJIDEA编译,这适用于为开发人员生成部署包,适用于生成JAR包,供维护人员在指定环境中运行Spark自身或开发SparkApplication。此编译的目的是生成运行在hadoop2.2.0上的SparkJAR包。

问题导读:
1、如何对Spark1.0.0源码编译?
2、如何生成Spark1.0的部署包?
3、如何获取包资源?
Spark1.0.0 源码编译和部署包生成第1张

Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对不同场景而已:
Maven编译
SBT编译
IntelliJ IDEA编译(可以采用Maven或SBT插件编译),适用于开发人员
部署包生成(内嵌Maven编译),适用于维护人员
编译的目的是生成指定环境下运行Spark本身或开发Spark Application的JAR包,本次编译的目的生成运行在hadoop2.2.0上的Spark JAR包。缺省编译所支持的hadoop环境是hadoop1.0.4。

1:获取Spark1.0.0 源码官网下载


2:SBT编译
将源代码复制到指定目录,然后进入该目录,运行:

  1. SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true sbt/sbt assembly
复制代码


3:Maven编译
事先安装好maven3.04或maven3.05,并设置要环境变量MAVEN_HOME,将$MAVEN_HOME/bin加入PATH变量。然后将源代码复制到指定目录,然后进入该目录,先设置Maven参数:

  1. export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
复制代码


再运行:

  1. mvn -Pyarn -Dhadoop.version=2.2.0 -Dyarn.version=2.2.0 -DskipTests clean package
复制代码

<ignore_js_op>Spark1.0.0 源码编译和部署包生成第2张 

4:IntelliJ IDEA编译
IntelliJ IDEA是个优秀的scala开发IDE,所以顺便就提一下IntelliJ IDEA里的spark编译。
首先将源代码复制到指定目录,然后启动IDEA -> import project -> import project from external model -> Maven编译目录中的pom.xml -> 在选择profile时选择hadoop2.2 -> 直到导入项目。
<ignore_js_op>Spark1.0.0 源码编译和部署包生成第3张 

在maven projects视图选择Spark Project Parent POM(root),然后选中工具栏倒数第四个按钮(ship Tests mode)按下,这时Liftcycle中test是灰色的。
接着按倒数第一个按钮进入Maven设置,在runner项设置VM option:

  1. -Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
复制代码

<ignore_js_op>Spark1.0.0 源码编译和部署包生成第4张 

按OK 保存。
回到maven projects视图,点中Liftcycle中package,然后按第5个按钮(Run Maven Build按钮),开始编译。其编译结果和Maven编译是一样的。

5:生成spark部署包
编译完源代码后,虽然直接用编译后的目录再加以配置就可以运行spark,但是这时目录很庞大,又3G多吧,部署起来很不方便,所以需要生成部署包。
spark源码根目录下带有一个脚本文件make-distribution.sh可以生成部署包,其参数有:
--hadoop VERSION:打包时所用的Hadoop版本号,不加此参数时hadoop版本为1.0.4。
--with-yarn:是否支持Hadoop YARN,不加参数时为不支持yarn。
--with-hive:是否在Spark SQL 中支持hive,不加此参数时为不支持hive。
--skip-java-test:是否在编译的过程中略过java测试,不加此参数时为略过。
--with-tachyon:是否支持内存文件系统Tachyon,不加此参数时不支持tachyon。
--tgz:在根目录下生成 spark-$VERSION-bin.tgz,不加此参数时不生成tgz文件,只生成/dist目录。
--name NAME:和--tgz结合可以生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此参数时NAME为hadoop的版本号。
如果要生成spark支持yarn、hadoop2.2.0的部署包,只需要将源代码复制到指定目录,进入该目录后运行:

  1. ./make-distribution.sh --hadoop 2.2.0 --with-yarn --tgz
复制代码


如果要生成spark支持yarn、hive的部署包,只需要将源代码复制到指定目录,进入该目录后运行:

  1. ./make-distribution.sh --hadoop 2.2.0 --with-yarn --with-hive --tgz
复制代码


如果要生成spark支持yarn、hadoop2.2.0、techyon的部署包,只需要将源代码复制到指定目录,进入该目录后运行:

  1. ./make-distribution.sh --hadoop 2.2.0 --with-yarn --with-tachyon --tgz
复制代码


生成在部署包位于根目录下,文件名类似于spark-1.0.0-bin-2.2.0.tgz。
值得注意的是:make-distribution.sh已经带有Maven编译过程,所以不需要先编译再打包。
资源下载包-较全


6:后记
解压部署包后或者直接在编译过的目录,通过配置conf下的文件,就可以使用spark了。
Spark有下列几种部署方式:
Standalone
YARN
Mesos
Amazon EC2
其实说部署,还不如说运行方式,Spark只是利用不同的资源管理器来申请计算资源。其中Standalone方式是使用Spark本身提供的资源管理器,可以直接运行;而在YARN运行,需要提供运行Spark Application的jar包(或者直接在NM节点上部署Spark):
maven编译的jar包为:./assembly/target/scala-2.10/spark-assembly-1.0.0-hadoop2.2.0.jar
SBT编译的jar包为:./assembly/target/scala-2.10/spark-assembly-1.0.0-hadoop2.2.0.jar
具体使用参见:Spark1.0.0 YARN模式部署


TIPS:
众所周知的网络问题,编译的时候经常会发生卡死的现象,对于maven编译,只需要安ctrl+z结束进程重新编译就可以了;而对于sbt编译,由于有时候会有文件锁定的问题,在按ctrl+z结束进程后,最好退出终端后再开启一个新的终端进行编译

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

上篇一、CentOS7.4下Elastic Stack 6.2.4日志系统搭建Linux升级gcc到最新版本--gcc-9.2.0下篇

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

相关文章

工作流调度器azkaban(以及各种工作流调度器比对)

1:工作流调度系统的作用: (1):一个完整的数据分析系统通常都是由大量任务单元组成:比如,shell脚本程序,java程序,mapreduce程序、hive脚本等;(2):各任务单元之间存在时间先后及前后依赖关系;(3):为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; (4):举例说明工作流调度系统的具体作用:   我们可能有这...

hiveserver2启动卡住问题解决方案

问题分析:hiveserver2可能是Hadoop集群进入安全模式,导致hiveserver2连接不上集群 临时解决方案:离开安全模式即可 #查看安全模式情况 hdfs dfsadmin -safemode get #离开安全模式 hdfs dfsadmin -safemode leave #进入安全模式 hdfs dfsadmin -safemode e...

Hadoop Eclipse 插件制作以及安装

在本地使用Eclipse调试MapReduce程序,需要Hadoop插件,笔摘记录下制作安装过程。 准备工作(hadoop-2.6.0为例):   搭建好Hadoop环境   下载Hadoop安装包,解压到某个路径(D:hadoop-2.6.0)   下载 hadoop2x-eclipse-plugin包   安装jdk 、ant、eclipse 相关资源...

Spark RPC框架源码分析(一)简述

Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 Spark是最近几年已经算是最为成功的大数据计算框架,那么这次我们就来介绍它内部的一个小点,Spark RPC框架。 在介绍之前,我们需要先说明什么是RPC...

Hadoop 序列化

摘自:http://blog.csdn.net/zhang0558/article/details/53444533 序列化和反序列化以及hadoop数据类型 1.什么是序列化和反序列化   序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。   反序列化就是将收到 字节序列(或其他数据传输协议)或者是硬盘的持久...

hadoop集群的搭建与配置(2)

对解压过后的文件进行从命名 把"/usr/hadoop"读权限分配给hadoop用户(非常重要) 配置完之后我们要创建一个tmp文件供以后的使用 然后对我们的hadoop进行配置文件的配置 vim /etc/profile 最下边的两行就是我们的hadoop文件的配置内容 重新启动配置文件。 之后要配置hadoop的hadoop-env.sh文件...