参考:
https://blog.csdn.net/cafebar123/article/details/73500014
Hadoop+Spark+Zookeeper+HBase+Hive集群搭建:
https://blog.csdn.net/qazwsxpcm/article/details/78937820
一、Hadoop datanode正常启动,但是livenodes为0
问题描述:
所有数据节点都已经正常启动了(通过jps查看子节点、或8088页面显示节点RUNNING),防火墙关闭,同时通过web页面查看http://master:50070
,在Live Nodes那一栏显示位0(或节点不够数)。【我这里只有2个datanode】
- master一个作为NameNode
- slave1作为DataNode
- slave2作为另一个DataNode
解决方法:
第一种可能:
1. 打开配置文件hdfs-site.xml找到dfs.datanode.name.dir
这个属性,或者dfs.data.dir
具体看你用哪个设置的数据存储路径。
2. 分别在master, slave1, slave2中更改此属性
# master中的值
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.2/dfs/data</value>
</property>
# slave1中的值
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.2/dfs/data/slave1</value>
</property>
# slave2中的值
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.2/dfs/data/slave2</value>
</property>
问题可能就是多个节点存放data数据的目录路径相同了,造成了报告中误认为只有一个datanode。
第二种可能:(克隆虚拟机所导致的)
1. 首先在master机上查看端口使用情况是否正常,再去slave机中查看datanode有关日志,若发现slave机在反复尝试连接localhost:9000,因为一开始在配置master中的core-site.xml时属性fs.defaultFS的值为hdfs://localhost:9000,然后克隆出的两个slave机会导致了启动守护线程时slave机去尝试连接本地的9000端口。
2. 需要将slave机中core-site.xml的value改为hdfs://master:9000即可
第三种可能:
查看/etc/hosts,localhost前面不能有其他名称,如下
hadoop在启动的时候,根据配置文件监听的时候监听的是hadoop01的9000端口,而这个hadoop01被解析成了127.0.0.1,这样hadoop01节点就不会监听master的9000端口,来自hadoop02和hadoop03的信息不会被hadoop01节点接收到,也就会出现hadoop02和hadoop03节点日志里面的内容,live node一直为0。
2016-03-05 07:34:23,972 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop01/192.168.116.101:9000
2016-03-05 07:34:29,980 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hadoop01/192.168.116.101:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
正确的:
最后 hdfs namenode -format,重新启动 start-all.sh
二、zookeeper集群重启 Error contacting service. It is probably not running 问题
问题出现情形
查看zookeeper.out分析原因
cat zookeeper.out
问题排查
排查前确保防火墙关闭,确保每个机器都启动了zookeeper。初次启动个个环节都有可能有问题 如果有报错信息可以针对性解决。
1 java环境
java -version
2 排查端口占用
netstat -apn | grep 2181 #默认2181端口为服务端提供端口
备注:若集群未启动 则不应该有端口占用
kill -9 pid #pid为占用端口的进程id号
3 排除网卡问题
ip addr
备注:如果为物理地址则 重启网卡
service network restart
4 排除网络问题
ping ip #ping其他节点主机 若zoo.cfg 使用域名则用域名
备注:无ping命令则安装 yum install iputils-ping 若有问题则 host映射问题
5 排查节点配置信息
dataDir 是否存在 myid文件内容与 service.x 中x对应
例如:zk01 其对应service.x 则该目录下myid内容为1
6 删除节点残留信息
rm -rf version-2/ zookeeper_server.pid
7 防火墙拦截端口
systemctl status firewalld.service
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止启动防火墙
三、[Fatal Error] core-site.xml:66:3:
意思是 hbase-site.xml的第66行第3列出错。
解决办法:
打开文件,仔细查找,我的错误是因为配置文件的时候不小心增加了一个空行。
注意:不要轻易改变hadoop(或其他)配置文件的一个空行,甚至一个空格。
四、启动HBase时 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m ,MaxPermSize=128m;
解决办法:
vim hbase-env.sh
注释掉47、48(You can safely remove it for JDK8+)
JDK8之后移除了永久代(PermGen),替换为元空间(Metaspace),故使用JDK8+可不必设置此参数
五、Hbase 启动报错 cannot initialize Java class org.apache.hadoop.hbase.HColumnDescriptor
在集群中Zookeeper中会通过投票方式选举出一个Zookeeper为主,其余类似于主的热备,而主Zookeeper会指定Hmaster,并由指定的Hmaster来进行Hbase的操作。
启动的zookeeper的时候,尽量安装master、slave1、slave2顺序启动,这样master为leader,子节点为follower。然后用master启动HBASE。