Tips:
非手动编译的情况下,一定要注意各个软件包的版本对应关系。
如果学习的话还是推荐手动编译。
这是我在编译搭建过程中出现的一些问题。记录一下:
1.在搭建hadoop环境时,需要安装protobuf-3.3.0的包时,然而在源码编译的过程中出现错误如下:
./google/protobuf/metadata.h:175: error: class
‘google::protobuf::internal::InternalMetadataWithArena’
does not have any field named ‘InternalMetadataWithArenaBase’
只知道是编译过程中出现缺失什么的问题,却在网上一直找不到原因。
于是去该软件包的github上找,在该软件包的issue中找到了一个#2599找到了相关的解决方案,
安装上边所说,需要修改源码中的一个文件。在protobuf/src/google/protobuf/metadata_lite.h文件中修改。如下:
vim metadata_lite.h
replace:
explicit InternalMetadataWithArenaLite(Arena* arena)
: InternalMetadataWithArenaBase(arena) {}
with:
explicit InternalMetadataWithArenaLite(Arena* arena)
: InternalMetadataWithArenaBase(arena) {}
然后重新执行编译过程,就可以通过了。
#./configure
#make
#make check
#make install
然而在最后安装hadoop的时候,却提示需要protobuf-2.5.0的包,我无语了,但是重新安装这个包时,却没有遇到问题,不明白。。。。。
2.在build hadoop中的时候,使用命令:
mvn package -Pdist,native,docs -DskipTests -Dtar。
出现错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-
javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-annotations:
MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /tmp/hadoop-2.5.0-src/hadoop-common-
project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java:27: error: unexpected end tag:
[ERROR] *
看这个错误是在包的doc文件中出现的的,根据stack Overflow上的提示,在编译的时候忽略掉doc文件。使用如下命令:
mvn package -Pdist,native,docs -DskipTests -Dtar -Dmaven.javadoc.skip=true
就可以正确安装了。
在build hadoop时,注意与其依赖包的对应关系。
比如,在我编译hadoop2.5.0的时候,需要依赖的包有protobuf-2.5.0,如果使用其他版本,就会出现错误。
3.配置好hadoop-2.5.0后,执行启动 ./start-all.sh,报错:
[hadoop@hadoop1]$ ./start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Error: Cannot find configuration directory: /etc/hadoop
starting yarn daemons
Error: Cannot find configuration directory: /etc/hadoop
[hadoop@hadoop1]$ ./start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Error: Cannot find configuration directory: /etc/hadoop
starting yarn daemons
Error: Cannot find configuration directory: /etc/hadoop
这是因为使用了hadoop-env.sh默认的关于hadoop配置文件所在目录的配置,这里需要根据你自己的安装路径重新设置。修改hadoop-env.sh:
export HADOOP_CONF_DIR=/app/hadoop/hadoop-2.5.0/etc/hadoop/
最后别忘了:
source hadoop-env.sh