0、操作系统

centos:6.4
hadoop:2.5.0-cdh5.3.6

1、为什么要编译 spark 源码?

学习spark的第一步 就应该是编译源码,后期修改和调试,扩展集成的功能模块

2、Spark 源码编译的三种形式?

a.maven 编译
# export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
# ${SPARK_HOME_SRC}/./build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

b.SBT 编译
#${SPARK_HOME_SRC}/./build/sbt -Pyarn -Phadoop-2.3 package

c.打包编译
# ${SPARK_HOME_SRC}/./dev/make-distribution.sh --tgz -Psparkr -Dhadoop.version=2.5.0-cdh5.3.6 -Phadoop-2.4 -Phive -Phive-thriftserver -Pyarn

3、版本要求:

Maven 3.3.9

JDK 1.8+(1.8.0_12)
Scala 2.11.8
Note: Starting version 2.0, Spark is built with Scala 2.11 by default.
R(3.2.0)
wget http://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-3/R-3.2.0.tar.gz

4、编译步骤概览:

0. root 用户编译 + 网络通畅
1. jdk 环境搭建
2. maven 环境搭建
3. R(3.2.0)语言环境
4. 正式编译

5、jdk、maven 环境都是采用压缩包安装形式

操作形式:上传压缩包、解压、配置环境变量、更新source 资源文件
NOTE:
检查Maven 是否和现有Java 环境对应起来
给Maven 配置阿里云镜像:
修改 ${MAVEN_HOME}/conf/settings.xml
添加镜像:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

R 语言 搭建
下载源码
# cd ${R_HOME}
# yum install gcc-gfortran readline-devel libXt-devel

error:
# yum install gcc-gfortran #否则报”configure: error: No F77 compiler found”错误

# yum install gcc gcc-c++ #否则报”configure: error: C++ preprocessor “/lib/cpp” fails sanity check”错误

# yum install readline-devel #否则报”–with-readline=yes (default) and headers/libs are not available”错误

# yum install libXt-devel #否则报”configure: error: –with-x=yes (default) and X11 headers/libs are not available”错误

# ./configure --enable-R-shlib

#make && make install
# vi ~/.bashrc (配置环境变量)
export R_HOME=/opt/modules/R-3.2.0
export PATH=$R_HOME/bin:$PATH、

6、正式编译

上传源码压缩包并解压
# cd ${SPARK_HOME_SRC}
# ${SPARK_HOME_SRC}/./dev/make-distribution.sh --tgz -Psparkr -Phadoop-2.4 -Dhadoop.version=2.5.0-cdh5.3.6 -Phive -Phive-thriftserver -Pyarn
a. 添加 sparkr

b. 添加hadoop版本 -Dhadoop.version=2.5.0-cdh5.3.6

c. scala 压缩包解压到${SPARK_HOME_SRC}/build/

d. 修改为对应的版本(dev/make-distribution.sh)
初始
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
| grep -v "INFO"\
| tail -n 1)
SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
| grep -v "INFO"\
| tail -n 1)
SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
| grep -v "INFO"\
| fgrep --count "<id>hive</id>";\
# Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
# because we use "set -o pipefail"
echo -n)
替换为下面对应的参数值
VERSION=2.10
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.5.0-cdh5.3.6
SPARK_HIVE=1

e.spark pom.xml 添加 cdh reponsitory
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>

如果不添加会出现如下错误信息:
Failed to execute goal on project spark-launcher_2.11: Could not resolve dependencies for project org.apache.spark:spark-launcher_2.11:jar:2.1.0: Could not find artifact org.apache.hadoop:hadoop-client:jar:2.5.0-cdh5.3.6

[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :spark-launcher_2.11
-rf :spark-launcher_2.11

# ${SPARK_HOME_SRC}/./dev/make-distribution.sh --tgz -Psparkr -Phadoop-2.4 -Dhadoop.version=2.5.0-cdh5.3.6 -Phive -Phive-thriftserver -Pyarn -rf :spark-launcher_2.11

下面是没有使用R模块的
# ${SPARK_HOME_SRC}/./dev/make-distribution.sh --tgz -Phadoop-2.4 -Dhadoop.version=2.5.0-cdh5.3.6 -Phive -Phive-thriftserver -Pyarn
===============================================================================

最终打包编译 生成的包目录对应为${SPARK_HOME_SRC}/spark-2.1.0-bin-2.5.0-cdh5.3.6.tgz
SPARK_VERSION-bin-HADOOP-VERSION.tgz

NOTE:
将编译好的spark 源码打包保存一份,后面 spark sql 及 spark streaming 后续学习会使用到相关的 jar 包.

=====================================================================================

真正使用R 运行在 spark 上,前面编译完成以后你需要初始化 R
# cd {SPARK_HOME_SRC}/R/
# ./install-dev.sh
参考文章:https://github.com/apache/spark/tree/master/R

spark2的编译的更多相关文章

  1. Spark2.0编译

    Spark2.0编译 1 前言 Spark2.0正式版于今天正式发布,本文基于CDH5.0.2的Spark编译. 2 编译步骤 #2.1 下载源码 wget https://github.com/ap ...

  2. 新闻实时分析系统 Spark2.X环境准备、编译部署及运行

    1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...

  3. 新闻网大数据实时分析可视化系统项目——14、Spark2.X环境准备、编译部署及运行

    1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...

  4. 附录A 编译安装Hadoop

    A.1  编译Hadoop A.1.1  搭建环境 第一步安装并设置maven 1.  下载maven安装包 建议安装3.0以上版本(由于Spark2.0编译要求Maven3.3.9及以上版本),本次 ...

  5. Spark编译

    Spark的运行版本使用mvn编译,已经集成在源码中.如果机器有外网或者配置了http代理,可以直接调用编译命令来进行编译. windows&Linux命令如下: ./build/mvn \ ...

  6. 自编译Apache Spark2.3.3支持CDH5.16.1

    1 下载源代码文件 https://archive.apache.org/dist/spark/spark-2.3.3/ 2 解压后导入编辑器,修改依赖的Hadoop版本,下面截图是修改后的,要看自己 ...

  7. mac os x 编译spark-2.1.0 for hadoop-2.7.3

    mac os x maven编译spark-2.1.0  for hadoop-2.7.3 1.官方文档中要求安装Maven 3.3.9+ 和Java 8 ; 2.执行         export ...

  8. Spark2.1.0编译

    1.下载spark源码包 http://spark.apache.org/downloads.html 2.安装Scala与maven,解压spark源码包 安装Scala: tar zxf scal ...

  9. Spark2.0.0源码编译

    Hive默认使用MapReduce作为执行引擎,即Hive on mr,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark.由于MapRedu ...

随机推荐

  1. ListView如何优化

    1.ListView 如何提高其效率? 当 convertView 为空时,用 setTag()方法为每个 View 绑定一个存放控件的ViewHolder 对象. 当 convertView 不为空 ...

  2. css 页面特殊显示效果

    1.移动端最小设置字体为12px,如果想要更小字体效果: -webkit-transform:scale(0.9); 2.文字超过两行时,末尾显示点点的效果: overflow:hidden;text ...

  3. Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法

    当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确: 按F12 Debug查看报错原因,提示net::ERR_BLOCKED_BY_CLIENT错误,但当我们点击图片地址 ...

  4. Java基础总结--流程控制

    Java流程控制* 顺序结构--最常见的执行情况,语句按照出现的先后次序依次执行.* 判断结构--对条件进行判断,执行相应的语句.有三种常见的形式< if(判断条件){语句;}--为真执行语句, ...

  5. 读书笔记-你不知道的JS上-声明提升

    变量声明提升 Javascript代码一般情况下是由上往下执行的,但是有些情况下不成立. a = 2; //变量声明被提升在当前作用域顶部 var a; console.log(a); console ...

  6. ES6新特性之Symbol使用细节

    在迭代器章节的时候出现过[Symbol.iterator ]的属性,那么到底Symbo到底是什么? 答:Symbol是ES6新定义的一种值,它既不是字符串,也不是对象,而是为javaScript增加的 ...

  7. Pick apples(大范围贪心,小范围完全背包)

    Pick apples Time Limit: 1000MS Memory Limit: 165536KB Submit Statistic Discuss Problem Description O ...

  8. Circle

    Circle   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Status Description Your task is so ...

  9. robotframework2.8.7日志输出List乱码

    今天在完善robotframework的数据分离的时候,需要读取list中的中文信息,在日志输出中,英文显示是正常的:但是中文就出现所谓的乱码情况,如截图所示 对于list中的信息,日志显示乱码:查找 ...

  10. Java 核心内容相关面试题【1】

    1.什么是 transient 变量? transient 变量是指不会被序列化的变量. 2.什么是同步(synchronization)? 在多线程环境中,同步是指控制多个线程访问共享资源的方式.没 ...