spark编译教程—maven

来源:互联网 发布:用java编写菱形图案 编辑:程序博客网 时间:2024/06/10 06:02
                  spark编译教程—maven

本文为原创,转载请标明本文地址。


Spark的源码编译和部署包生成,其本质只有两种:Maven和SBT(simple builder tools),
maven 是官方推荐的spark编译的方式,但是SBT 越来越的到人们的热捧,因为它能提供更快的交互编译。
教程从以下几个方面介绍maven编译:
 编译环境准备
 几种常见的编译方式
 编译问题总结
 常见编译参数配置
 附录
一、编译环境准备
首先查看maven, jdk,scala是否安装
maven的安装网址可以参考:
http://my.oschina.net/pengqiang/blog/275306?p={{currentPage+1}}
jdk的安装教程可以参考:
http://www.cnblogs.com/plinx/archive/2013/06/01/3113106.html
教主的jdk-1.7出了问题,在网上各种修复无果,随后安装了Ubuntu自带的openjdk,倒腾了一天,最后得知必须用sun公司的jdk才可以,教主所用的jdk版本是:
1. 在官方下载spark 源码(http://spark.apache.org/downloads.html)

这里选择的版本是1.3.1
2.把项目解压
sudo tar zxvf spark-1.3.1 -C /usr/local/byr/spark

二、几种编译方式
1.用build/mvn 来编译
build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
(-Pyarn 提供yarn支持 ,—Phadoop-2.4 提供hadoop支持,并且指定hadoop的版本)

因为第一次maven需要下载很多依赖包,所以需要比较久的时间,以后的编译就不需要那么久。

原理:用build目录下自带的mvn来部署安装,它可以自动提供部署工程所需要的资源,并把资源下载到build目录下,如果用户提供合适的参数来部署的话,就选择用户的,如果没有提供,那么mvn也可以给他配置默认的参数和资源。(这个是maven的特点,详情见附录一)打开mvn脚本,你会发下有以下几个重要函数:install_app(),install_mvn(),install_zinc()等函数,它就是调用这些函数来下载相应的资源。
编译完成后,你会发现在assembly/build下面多了一个target文件,这个就是编译的结果

2.用make-distributed 脚本来编译
编译完源代码后,虽然直接用编译后的目录再加以配置就可以运行spark,但是这时目录很庞大,部署起来很不方便,所以需要生成部署包。生成在部署包位于根目录下,文件名类似于spark-1.0.0-bin-2.2.0.tgz。
值得注意的是:make-distribution.sh已经带有Maven编译过程,所以不需要先编译再打包,所以,它可以作为一种单独的编译方式。

./make-distribution.sh –name custom-spark –tgz -Phadoop-2.7 -Pyarn

在这里解释下该命令:

–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 :和–tgz结合可以生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此参数时NAME为hadoop的版本号。

tips:
解压部署包后或者直接在编译过的目录,通过配置conf下的文件,就可以使用spark了。
Spark有下列几种部署方式:
Standalone
YARN
Mesos
Amazon EC2
一般会选择standalone 和 YARN
其实说部署,还不如说运行方式,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

三、编译遇到问题总结:
1.

这个就返回检查jdk的路径,注意jdk啦,maven啦,scala啦要用sun公司、oracle的,最好不要用Ubuntu自带的(自带的亲测出现很多问题)。
2.

官方解决方案是: 在编译前设置一下内存的参数(因为要占用更大内存)
export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”
3. 网络问题,编译的时候经常会发生卡死的现象,对于maven编译,只需要安ctrl+z结束进程重新编译就可以了网络问题。

n.问题解决终结版:
如果你出现了某一个问题,已经改正,但是反复编译不过,那就说明是你该下一个原始版的源码,重新编译啦。这个问题教主遇到啦,纠结了两天,最后在高人指点下,换了初始版源码,才发现spark,你竟然逗我!!!!

四、maven编译常用配置参数
1)内存使用量
export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”
2)如果想从HDFS中读取数据,那么需要指明相应的hdfs 的版本,可以通过hadoop。version这个参数来配置。那么如果你不想制定的话,系统会默认把HDFS的版本设置为:2.2.0。
对于 Apache Hadoop versions 1.x, Cloudera CDH MRv1, and other Hadoop versions without YARN 等版本用命令:

$ mvn -Dhadoop.version=1.2.1 -DskipTests clean package

$ mvn -Dhadoop.version=2.0.0-mr1-cdh4.2.0 -DskipTests clean package
对于 Apache Hadoop 2.x, 0.23.x, Cloudera CDH MRv2, and other Hadoop versions with YARN 等版本需要开启 “ yarn-alpha ” or “ yarn ” 属性配置,并且要指定 “ hadoop.version ”, “ yarn.version ” 的属性值:

$ mvn -Pyarn-alpha -Dhadoop.version=2.0.5-alpha -Dyarn.version=2.0.5-alpha -DskipTests clean package

$ mvn -Pyarn-alpha -Dhadoop.version=2.0.0-cdh4.2.0 -Dyarn.version=2.0.0-chd4.2.0 -DskipTests clean package

$ mvn -Pyarn -Dhadoop.version=2.2.0 -Dyarn.version=2.2.0 -DskipTests clean package
3) 增加hive 和 jdbc 支持,那么需要在语句中加入 -Phive -Phive-thriftserver
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package

4)如果想生成一个用scala2.1.2编译的spark 部署包,那么要在加入以下配置参数:
dev/change-version-to-2.11.sh
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
五、附录
附录一:maven简介
maven是Apache生产的一款软件,它基于面向项目对象模型project object model (POM)的一款项目管理和综合的工具。所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,Maven可以管理项目的整个声明周期,包括编译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。而Maven本身还支持多种插件,可以方便更灵活的控制项目。Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven使用约定优于配置,这意味着开发者不需要创建构建过程。开发人员不必为每一个配置详细信息。Maven提供一个合理的默认项目。创建一个Maven 项目时,Maven使用默认的项目结构。开发者只需要把相应的文件以及在pom.xml 定义相关配置。
作为一个例子,下表列出了项目的源代码文件,资源文件和配置的默认值。假设basedirItemJava{basedir}/src/main/java
项目的资源,比如说property文件 basedir/src/main/resources{basedir}/src/test
发布的部署包 ${basedir}/target
为了建设项目,Maven提供了开发人员生命周期的目标和项目的依赖(依赖于Maven插件能力,并在其默认约定)。在大部分的项目管理都建立相关的任务和维护Maven插件。
开发人员可以构建任何给定的Maven项目,而不需要了解插件。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车违章扣6分怎么办 汽车扣了72分年检怎么办 汽车扣了50分怎么办 汽车扣了15分怎么办 汽车扣了27分怎么办 汽车扣了40分怎么办 行驶证掉了怎么办 异地 高速上没带驾驶证行驶证怎么办 身份证驾驶证行驶证都丢了怎么办 驾驶证年审过期一个月怎么办 柴油车辆年检尾气不合格怎么办 驾驶证过期了5天怎么办 过了审车时间怎么办 骑车没带行驶证怎么办 轿车行驶证丢了怎么办 车子没年检被扣怎么办 上海车辆年检过期了怎么办 行驶证过期十天怎么办 行驶证盖章满了怎么办 驾照c证扣12分怎么办 两年小车忘年审怎么办 4年车检过期了怎么办 车检过期了1周怎么办 超过检车几天了怎么办 驾驶证扣两个6分怎么办 行驶证检验有效期过期怎么办 驾驶证被扣26分怎么办 c1驾驶证扣26分怎么办 驾驶证被扣6分后怎么办 c1驾照年审过期一天怎么办 审驾照时间过了怎么办 b2驾驶证扣了分怎么办 a2驾照逾期未审怎么办 中学生只想打游戏不肯学习怎么办 汽车4年未年检怎么办 2年没有验车怎么办 驾驶证过期2年半怎么办 审车逾期一个月怎么办 摩托车驾驶证年审过期一个月怎么办 摩托车驾驶证记满12分怎么办 b2驾驶证扣2分该怎么办