本文转自大数据躺过的坑博客园博客,原文链接:xxxxx,如需转载请自行联系原作者说在前面的话
前言
Spark可以通过SBT和Maven两种方式进行编译,再通过make-distribution.sh脚本生成部署包。
SBT编译需要安装git工具,而Maven安装则需要maven工具,两种方式均需要在联网 下进行。
尽管maven是Spark官网推荐的编译方式,但是sbt的编译速度更胜一筹。因此,对于spark的开发者来说,sbt编译可能是更好的选择。由于sbt编译也是基于maven的POM文件,因此sbt的编译参数与maven的编译参数是一致的。
心得
有时间,自己一定要动手编译源码,想要成为高手和大数据领域大牛,前面的苦,是必定要吃的。
无论是编译spark源码,还是hadoop源码。新手初次编译,一路会碰到很多问题,也许会花上个一天甚至几天,这个是正常。把心态端正就是!有错误,更好,解决错误,是最好锻炼和提升能力的。
更不要小看它们,能碰到是幸运,能弄懂和深入研究,之所以然,是福气。
各大版本简介
1、Apache版------可自己编译,也可采用预编译的版本
2、CDH版---------无需自己编译
3、HDP版----------无需自己编译
主流是这3大版本,其实,是有9大版本。CDH的CM是要花钱的,当然它的预编译包,是免费的。
hadoop/spark源码的下载方式:
1、官网下载
2、Github下载(仅source code)
以下是从官网下载:
以下是Github下载(仅source code)
CDH的下载
http://archive-primary.cloudera.com/cdh5/cdh/5/
HDP的下载
http://zh.hortonworks.com/products/
好的,那我这里就以,官网为例。
准备Linux系统环境(如CentOS6.5)
hd_admin@master:/usr/local/hadoop$ hadoop fs -ls
14/10/27 19:59:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
看了下解压后的目录,lib/naive下完全是空的,另外网上查也有说此文件夹下如果是32位环境下编译出来的.so文件,在64位系统上也会有此问题,因此直接从cloudera上下了src版手工编译一遍
因此如非必要,完全可以选择Apache Hadoop发行版,并且非源码安装编译的话可以跳过。
前言,这编译是一个复杂和长知识的过程。
版本和位置得要有自己的习惯。
1 首先检查并安装gcc-c++
在root用户下在线下载:
yum -y install gcc-c++
2● 首先检查并安装lrzsz
在root用户下在线下载:
yum -y install lrzsz
3.图形界面安装,会自带有Centos6.5自带的JDK
一般将获得如下信息:
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
第一步:查看Centos6.5自带的JDK是否已安装
<1> 检测原OPENJDK版本
# java -version
一般将获得如下信息:
tzdata-java-2013g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
<2>进一步查看JDK信息
# rpm -qa|grep java
rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
<3>卸载OPENJDK
自带的jdk已经没了。
在root用户下安装jdk-7u79-linux-x64.tar.gz
在/usr/local上传
解压,
tar -zxvf jdk-7u79-linux-x64.tar.gz
删去压缩包
rm -rf jdk-7u79-linux-x64.tar.gz
配置环境变量
vim /etc/profile
#java
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
文件生效
source /etc/profile
查看是否安装成功
java -version
4、● 安装maven
下载apache-maven-3.3.3-bin.tar.gz
/usr/local/
上传apache-maven-3.3.3-bin.tar.gz
解压
tar -zxvf apache-maven-3.3.3-bin.tar.gz
删除压缩包
rm -rf apache-maven-3.3.3-bin.tar.gz
5、● 安装ant
下载apache-ant-1.9.7-bin.tar.gz
/usr/local
上传
解压
tar -zxvf apache-ant-1.9.7-bin.tar.gz
删除压缩包
rm -rf apache-ant-1.9.7-bin.tar.gz
Maven和ant配置环境变量
vim /etc/profile
#maven
export MAVEN_HOME=/usr/local/apache-maven-3.3.3
export PATH=$PATH:$MAVEN_HOME/bin
(这里错误啦!!)
PATH=$MAVEN_HOME/bin: $PATH
Export MAVEN_HOME (对的)
#ant
export ANT_HOME=/usr/local/apache-ant-1.9.7
export PATH=$PATH:$ANT_HOME/bin
文件生效
source /etc/profile
查看是否安装成功
mvn -v
ant -v
如果出现如下内容,说明安装成功:
Buildfile: build.xml does not exist!
Build failed
说明ant安装成功!因为ant默认运行build.xml文件,这个文件需要我们建立。
6. ● 安装ProtocolBuffer
下载protobuf-2.5.0.tar.gz
在/usr/local/
上传protobuf-2.5.0.tar.gz
解压
tar -zxvf protobuf-2.5.0.tar.gz
删除压缩包
rm -rf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/usr/local/protobuf-2.5.0
make
make check
make install
配置环境变量
vim /etc/profile
# protobuf
export PROTOBUF_HOME=/usr/local/protobuf-2.5.0
export PATH=$PATH:$PROTOBUF_HOME/bin
文件生效
source /etc/profile
查看是否安装成功
protoc --version
6、安装cmake
yum -y install cmake
7● zlib安装
yum -y install zlib
8● openssl-devel
yum -y install openssl-devel
9 ● 安装snappy
下载snappy-1.1.3.tar.gz
上传/usr/local/
解压
tar -zxvf snappy-1.1.3.tar.gz
删除压缩包
rm -rf snappy-1.1.3.tar.gz
cd snappy-1.1.3
./configure
make
make install
如果安装成功的话进入【/usr/local/lib】目录下(默认位置),可以看到已经生成了snappy的库文件
此刻,已经是该装好的,装好了,准备执行!
10. 在编译hadoop源码之前,替换掉MAVEN_HOME/conf目录下的setting.xml
11 下载对应的Hadoop源码
其实啊,这之后也是hadoop-2.6.0-cdh5.4.5-src.tar.gz
编译,生成hadoop-2.6.0-cdh5.4.5.tar.gz,然后进行集群安装!
hadoop-2.6.0-cdh5.4.5-src.tar.gz
源码编译正在开始!
http://archive.cloudera.com/cdh5/cdh/5/
下载hadoop-2.6.0-cdh5.4.5-src.tar.gz
解压hadoop-2.6.0-cdh5.4.5-src.tar.gz源代码包
删除hadoop-2.6.0-cdh5.4.5-src.tar.gz源代码包
然后进入hadoop-2.6.0-cdh5.4.5目录,
mvn package -Pdist,native -DskipTests -Dtar
mvn编译时间很长,虚拟机里面编译了11分钟。
mvn package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib(也可以尝试)
mvn package [-Pdist] [-Pdocs] [-Psrc] [-Pnative] [Dtar] 这是构建发布版
进入
mvn package -Pdist,native -DskipTests -Dtar
[INFO] Apache Hadoop Extras ............................... SKIPPED
[INFO] Apache Hadoop Pipes ................................ SKIPPED
[INFO] Apache Hadoop OpenStack support .................... SKIPPED
[INFO] Apache Hadoop Amazon Web Services support .......... SKIPPED
[INFO] Apache Hadoop Client ............................... SKIPPED
[INFO] Apache Hadoop Mini-Cluster ......................... SKIPPED
[INFO] Apache Hadoop Scheduler Load Simulator ............. SKIPPED
[INFO] Apache Hadoop Tools Dist ........................... SKIPPED
[INFO] Apache Hadoop Tools ................................ SKIPPED
[INFO] Apache Hadoop Distribution ......................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:24 h
[INFO] Finished at: 2016-09-14T02:04:36+08:00
[INFO] Final Memory: 49M/120M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.16:test (default-test) on project hadoop-annotations: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.16:test failed: Plugin org.apache.maven.plugins:maven-surefire-plugin:2.16 or one of its dependencies could not be resolved: Failed to collect dependencies at org.apache.maven.plugins:maven-surefire-plugin:jar:2.16 -> org.apache.maven.surefire:maven-surefire-common:jar:2.16 -> org.apache.maven.plugin-tools:maven-plugin-annotations:jar:3.2: Failed to read artifact descriptor for org.apache.maven.plugin-tools:maven-plugin-annotations:jar:3.2: Could not transfer artifact org.apache.maven.plugin-tools:maven-plugin-annotations:pom:3.2 from/to nexus-osc (http://nexus.rc.dataengine.com/nexus/content/groups/public): Access denied to: http://nexus.rc.dataengine.com/nexus/content/groups/public/org/apache/maven/plugin-tools/maven-plugin-annotations/3.2/maven-plugin-annotations-3.2.pom , ReasonPhrase:Forbidden. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :hadoop-annotations
[root@Compiler hadoop-2.6.0-src]#
其实,同spark源码编译一样,见我的博客链接
遇到问题,就解决问题。
然后,我们来解决这个问题:
解决方法:
vim ./hadoop-common-project/hadoop-auth/pom.xml
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-annotations</artifactId>
<scope>compile</scope>
</dependency>
将节点hadoop-annotations的值由provide 改成compile