从源码编译Cloudera CDH的Spark - All About Free

为毛要用源码重新编译CDH的Spark?

上篇文章说过,CDH官方发布的Spark版本中并不包含一些特殊的组件,比如SparkR和Thriftserver。要想让Spark支持这些功能,就必须重新编译CDH版本的Spark。

在本地搭建Spark的编译环境太过繁琐,并且由于官方文档的说明,部分RedHat系统中编译的Spark版本甚至会有错误,所以我们直接使用一个现成的集成了编译环境的虚拟机来进行。

环境

如果你在国内,翻墙的网络是必须的,我们需要确保下载安装所需要的组件顺利。

在你的本地机器上,需要以下工具:

您可以根据上面的链接一个一个安装所需要的组件

开始啦

从github的repo中科隆我之前所说的集成编译环境的虚拟机vagrant-sparkbuilder

$ git clone https://github.com/teamclairvoyant/vagrant-sparkbuilder.git
$ cd vagrant-sparkbuilder

启动这个vagrant虚拟机实例,这个实例中包含了Centos 7.0,同时会安装Puppet代理,通过Puppet来部署编译所需的基本环境(Orcale Java和Cloudera Spark)

$ vagrant up

这个步骤须要一些时间,请耐心等待。
启动成功后就可以登录进虚拟机了

$ vagrant ssh

进入虚拟机以后,我们可以切换到Spark的目录

$ cd spark

刚才的过程中,系统已经自动克隆了Cloudera Spark的repo,我们只需要切换到需要的版本的branch或者tag就可以开始编译了。

$ git checkout cdh5-1.6.0_5.7.1
$ git pull # 确保代码是最新的

由于我需要SparkR的组件支持,所以在编译之前,还需要安装以下R的环境

$ sudo yum -y -e1 -d1 install epel-release
$ sudo yum -y -e1 -d1 install R

安装好以后,就可以开始编译了,编译根据配置,大概须要10~20分钟。

这个命令会编译出包含SparkR和Thriftserver的Cloudera Spark。

$ patch -p0 </vagrant/undelete.patch # 修改make-distribution.sh,让编译的结果包含SparkR等组件
$ ./make-distribution.sh -DskipTests \
    -Dhadoop.version=2.6.0-cdh5.7.1 \
    -Phadoop-2.6 \
    -Pyarn \
    -Psparkr \
    -Phive \
    -Pflume-provided \
    -Phadoop-provided \
    -Phbase-provided \
    -Phive-provided \
    -Pparquet-provided \
    -Phive-thriftserver

编译成功以后,就可以把编译好的数据同步回我们的机器了。

$ rsync -a dist/ /vagrant/dist-cdh5.7.1-nodeps

如果你需要再编译其他的CDH版本,那么记得抛弃掉我们之前对make-distribution.sh的修改

$ git checkout -- make-distribution.sh

一切结束后,使用exit退出ssh,然后关闭vagrant虚拟机

$ vagrant halt
$ vagrant destroy # 摧毁,如果需要的话

可能的问题

如果在编译过程中出现内存不足的错误Cannot allocate memory,则须要修改Vagrantfile,将配置文件中的v.memoryv.cpus提高,并且重新启动vagrant up

Free /
Published under (CC) BY-NC-SA in categories technology