Hadoop和Hbase也好,Zookeeper也是,看着官方和别人写的过程去布的时候,也不知道是安装包的问题还是什么的,它们永远就会在本来挺顺利的中间环节用bug把你烦透,就好像明明知道某个数学题怎么解,就是没有办法用正确的解法解出,结果总和正解不一样;幸运的是,大部分都被不断的搜寻资料和摸爬滚打中解决。以下总结了部分遇到的问题,希望和我一样遇到这样问题的人可以因此受惠。
环境:Hadoop:2.7.2
独立的Zookeeper:3.3.6
Hbase:1.0.1
服务器:server01 master
slave1 slave
slave2 slave
Hadoop
一、在执行 hadoop namenode -format 时遇到的报错、hadoop初始化时出现的报错
Q: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
A: 提示本地库不存在,或本地库与当前操作系统的版本不一致,可以选择更新glibc库* 或者 下载一个hadoop-native-位数-版本号.tar包 解压到 hadoop/lib/native下,问题解决。
Q: Unable to obtain hostName java.net.UnknownHostException:server01:server01
A: Hadoop通过hostname命令得到的主机名是server01,但在/etc/hosts文件中进行映射时,没有找到server01,在/etc/hosts中加入一行对应的 IP地址 主机名 即可
二、启动hadoop后启动hbase,报错,但成功进入hbase(main):001:0> 界面
Q: ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 4 attempts
2016-03-29 14:55:58,988 WARN [main] zookeeper.ZKUtil: hconnection-0xba0381a0x0, quorum=localhost:2181, baseZNode=/hbase Unable to set watcher on znode (/hbase/hbaseid)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
2016-03-29 14:55:58,996 ERROR [main] zookeeper.ZooKeeperWatcher: hconnection-0xba0381a0x0, quorum=localhost:2181, baseZNode=/hbase Received unexpected KeeperException, re-throwing exception
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
A: 查询得知该错误由hbase-site.xml配置错误导致,在hbase-site.xml中配置上正确的hbase缓存目录(hbase.rootdir)即可。
上述报错解决后,执行hbase shell时报错改变,但也成功进入hbase(main):001:0> 界面
Q: SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/service/pinpoint-1.5.1/quickstart/hbase/hbase-1.0.1/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/service/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
A: 查询得知是发生jar包冲突了:
分别为:/usr/service/pinpoint-1.5.1/quickstart/hbase/hbase-1.0.1/lib/slf4j-log4j12-1.7.7.jar和/usr/service/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar 选择一个删除后报错消失。
Zookeeper
一、部署zookeeper时遇到的报错
Q: 运行 zookeeper/bin/zkServer.sh status 后出现Error contacting service.It is probably not running.但使用 netstat -tnl 可以找到默认zookeeper的端口2181,zookeeper/bin/zkServer.sh stop也能执行。
A:时间不同步;故在server01上布了NTP服务,slave1和slave2都设置server01为ntpserver,错误排除。(就算具体的时间很接近也不行,必须布上NTP才会乖乖开始选举leader)
Hbase
一、Hadoop的hdfs运行正常,Zookeeper正常启动,但在其基础上运行Hbase时,刚开始启动良好,但十几秒后HMaster和HRegionServer自动退出,查看Hbase的log,发现报错。(HMaster出现一会儿就消失了/挂了)
Q: keeperErrorCode = ConnectionLoss for /hbase 或者/和 Hbase:Session 0x0 for server null,unexpected error,closing socket connection and attempting reconnect
A: 在删除/etc/hosts中的 127.0.0.1 localhost 后报错消失。
Q: 在Hbase的master中的log中找到了报错内容,没有记录下来,但大致意思为无法连接zookeeper的端口(2181端口)。
A: SELINUX或者是iptables的问题,关闭它们*或者做策略后 按情况重启,问题消失,Hadoop&Hbase均可成功启动。
*SELINUX关闭:
永久:修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
临时:使用命令setenforce 0
如果不想重启,那就两个都执行一下
iptables关闭:
servise iptables stop + chkconfig iptables off
然后防火墙再也不会阻挡你~(仅限实验中,生产环境万万不可)
*glibc库的安装之前需要安装gcc套件,不然会报错