本文介绍centos7Hadoop安装配置以及一些个人发现的问题。
1、Hadoop伪分布式配置
这里推荐一篇专业文章:
http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/ 按照所述步骤即可完成。
注意:
- 我这里是伪分布式配置,中间的单机分布配置请忽略。
- jdk配置因为个人安装版本以及使用终端的不同,配置参数也会不同。如果你使用的centos选择安装了jdk并且终端切换为了zsh,可以参考我的另一篇文章: 如果没有切换zsh,把需要打开的配置文件换成bashrc即可。生效也是。
- 安装Hadoop时,命令需要根据自己下载的版本修改,个人下载的是2.10.0版本,即把2.6.0换成2.10.0即可;同时上述网址提供的下载网站好像已经没有校验文件下载了,请忽略校验这一步。
- 配置伪分布式时,如果gedit无法使用,使用vi编辑器也是一样效果的;如果你已经修改了终端为zsh,同上,你需要打开的配置文件是zshrc,而不是bashrc,反之照常即可。
2、遇到的问题
1、启动Hadoop后,键入jps后,四个节点都需要有显示,若有一个节点没有显示,则Hadoop配置失败。具体错误可以参考上述专业文章内容里的查看日志文件方法;
其中,我遇到了DataNode的错误,可以参考这个链接解决:
2、启动Hadoop的时输出的警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform
百度大多都是在以 ldd libhadoop.so.1.0.0和ldd库版本在说明问题,但是较新的Hadoop大多都不会有这个问题,当然,你也可以用这个方法排除一下,有以下文章:
3、在伪分布式HDFS实例中,在完成第2步后键入hdfs dfs -ls时还出现以下警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable:
在/usr/local/hadoop/etc/hadoop/hadoop-env.sh 文件末尾添加:
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
4、在伪分布式HDFS实例中,复制网页命令出现Unknown command:
如复制:./bin/hdfs dfs –mkdir –p /user/hadoop
出现:–mkdir: Unknown command
这可能是因为字符编码不一致,代码本身没有错,手动敲入就不会这个问题。
========================================================
更新:
1、上述配置过后,我在启动spark时,原警告依然存在,以下步骤来确定具体错误位置:
- 我们先打开一下Hadoop的调试信息显示:
sudo vim /etc/profile
在最后添加一行
export HADOOP_ROOT_LOGGER=DEBUG,console
生效一下
source /etc/profile
- 查找具体错误信息
按照上述blog完成安装Hadoop配置后,无法加载本地类库的警告,所以
1、 进入Hadoop安装目录
cd /usr/local/hadoop
2、查看报错信息
hadoop checknative -a
3、完全按照上述配置Hadoop的话,应该会输出以下信息:
Native library checking:
hadoop: false
zlib: false
snappy: false
lz4: false
bzip2: false
openssl: false
70/01/01 01:02:05 INFO util.ExitUtil: Exiting with status 1
全为false,这是因为我们配置path字段少了两个重要的字段,所以:
4、打开bashrc在原Hadoop字段下添加两行(如果终端为zsh则换成zshrc):
vim ~/.bashrc
添加:
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
生效:
source ~/.basherc
5、安装基础类库:
sudo yum install -y autoconf automake libtool
sudo yum install -y gcc gcc-c++ cmake
sudo yum install -y zlib-devel
sudo yum install -y openssl-devel
sudo yum install -y snappy snappy-devel
sudo yum install -y bzip2 bzip2-devel
6、再次检查本地类库:
hadoop checknative -a
此时大概率输出:
Native library checking:
hadoop: true /usr/local/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /usr/lib64/libsnappy.so.1
zstd : false
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
我们就需要安装zstd:
cd /usr/local
sudo git clone -b master https://github.com/facebook/zstd.git
cd zstd
sudo make && make install
zstd --version
sudo cp -rf lib/*.so* /usr/local/hadoop/lib/native/
安装完成后回到Hadoop安装目录再次验证hadoop checknative -a即可
7、最好还是要安装protobuf
具体步骤可以参考我的另一篇文章:
8、如果你的Linux没有安装glibc库,可能需要自己安装
可以参考这篇博文:
一般centos你选择开发环境安装的话,都会有
验证是否安装;
打开终端:
ldd --version
第一个即是版本信息。
========================================================
再更新
再完成了上述的调整后,还是出现了一些问题。下面是解决方法:
1、在开启了调试信息:export HADOOP_ROOT_LOGGER=DEBUG,console后,启动时出现类似的debug信息:
[hadoop@hadoop2 ~]$ hdfs dfs -ls /
17/01/13 14:04:39 DEBUG util.Shell: setsid exited with exit code 0
17/01/13 14:04:39 DEBUG conf.Configuration: parsing URL jar:file:/home/hadoop/app/hadoop-2.5.2/share/hadoop/common/hadoop-common-2.5.2.jar!/core-default.xml
17/01/13 14:04:39 DEBUG conf.Configuration: parsing input stream sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@6e90891
17/01/13 14:04:39 DEBUG conf.Configuration: parsing URL file:/home/hadoop/app/hadoop-2.5.2/etc/hadoop/core-site.xml
17/01/13 14:04:39 DEBUG conf.Configuration: parsing input stream java.io.BufferedInputStream@3021eb3f
17/01/13 14:04:40 DEBUG lib.MutableMetricsFactory: field org.apache.hadoop.metrics2.lib.MutableRate org.apache.hadoop.security.UserGroupInformation$UgiMetrics.loginSuccess with annotation @org.apache.hadoop.metrics2.annotation.Metric(value=[Rate of successful kerberos logins and latency (milliseconds)], about=, valueName=Time, type=DEFAULT, always=false, sampleName=Ops)
17/01/13 14:04:40 DEBUG lib.MutableMetricsFactory: field org.apache.hadoop.metrics2.lib.MutableRate org.apache.hadoop.security.UserGroupInformation$UgiMetrics.loginFailure with annotation @org.apache.hadoop.metrics2.annotation.Metric(value=[Rate of failed kerberos logins and latency (milliseconds)], about=, valueName=Time, type=DEFAULT, always=false, sampleName=Ops)
17/01/13 14:04:40 DEBUG lib.MutableMetricsFactory: field org.apache.hadoop.metrics2.lib.MutableRate org.apache.hadoop.security.UserGroupInformation$UgiMetrics.getGroups with annotation @org.apache.hadoop.metrics2.annotation.Metric(value=[GetGroups], about=, valueName=Time, type=DEFAULT, always=false, sampleName=Ops)
17/01/13 14:04:40 DEBUG impl.MetricsSystemImpl: UgiMetrics, User and group related metrics
17/01/13 14:04:41 DEBUG security.Groups: Creating new Groups object
17/01/13 14:04:41 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
17/01/13 14:04:41 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/hadoop/app/hadoop-2.5.2/lib/native/libhadoop.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/hadoop/app/hadoop-2.5.2/lib/native/libhadoop.so)
这表示hadoop本地库与glibu库不一致
如果安装的centos版本较新,这并不会影响hadoop的使用
每次启动出现这样的debug信息会影响获取其他有用信息,所以最好完成了这一步后关闭这个调试信息显示。方法:重新进入profile文件,在上述第一次更新加的字段前加一个 # 号注释掉
但是如果这影响的这影响了你hadoop的使用,你可以参考以下文章解决:
https://blog.51cto.com/laowafang/1912345
2、启动hadoop时,出现以下字段:
connect to host localhost port 22: Connection refused
这个情况是因为配置ssh服务时,没有配置其随系统自启动,所以此时ssh服务未启动,以下命令启动:
service sshd start
但是这个方法治标不治本,下次重启后还是需要上述命令启动,比较麻烦
以下方法设置ssh随系统自启动:
su root #root登陆
systemctl start sshd
systemctl enable sshd
3、安装hadoop3.0.0以上的hadoop版本时,在使用’hadoop checknative -a’命令检查本地库时,比2.0版本多了一个ISA-L加速库,可使用以下链接进行安装:
(输入上述文章命令时,建议加上都sudo获得更大权限)
4、启动hadoop时,出现以下字段:
ssh: connect to host jancy port 22: Connection timed out
这里推荐一篇文章:
我的是遇见了主机ping不同的情况。
5、启动hadoop时,出现以下字段:
Warning: Permanently added the ECDSA host key for IP address ‘192.168.x.x’
解决:删除~文件夹下.ssh目录下的know_hosts文件,把以前的centos6.7的ip删掉或改掉。