hive连不上,报错9000拒绝连接
参考:豆包、百度
一、排查错误
客户端(你执行 hdfs dfsadmin -safemode …)去连接 NameNode 的 9000 端口,但连接被拒绝。
这说明 NameNode 根本没在监听 9000 端口(或者进程没启动,或者启动失败)。
jps查看进程,发现没有namenode
查看日志:
tail -n 100 hadoop-$(whoami)-namenode-$(hostname).log
发现
Storage directory /tmp/hadoop-root/dfs/name does not exist
...
InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state
这说明 NameNode 的元数据目录不存在,所以 NameNode 启动失败,也就导致 9000 端口没有监听,出现 “拒绝连接” 错误。
二、解决方法
修改配置,将数据目录放到非 /tmp 位置(推荐)
mkdir -p /hadoop_data/hadoop/data/namenode
mkdir -p /hadoop_data/hadoop/data/datanode
chown -R hadoop:hadoop /hadoop_data/hadoop
编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<property><name>dfs.namenode.name.dir</name><value>/hadoop_data/hadoop/data/namenode</value>
</property>
<property><name>dfs.datanode.data.dir</name><value>/hadoop_data/hadoop/data/datanode</value>
</property>
格式化并启动
stop-all.sh
hdfs namenode -format
start-all.sh
jps
这样即使重启机器,数据也不会丢失。
9000 端口也有数据了。
[root@localhost ~]# jps
1107 Elasticsearch
28483 NameNode
29236 NodeManager
29111 ResourceManager
28618 DataNode
30108 RunJar
31468 Jps
28830 SecondaryNameNode
29950 RunJar[root@localhost ~]# netstat -nlpt|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 28483/java
三、HiveServer2/Beeline方式连接hive(推荐)
启动HiveServer2服务 在服务器上运行以下命令:
nohup hiveserver2 > /dev/null 2>&1 &
使用Beeline客户端连接 在客户端运行以下命令:
beeline -u jdbc:hive2://<hostname>:10000 -n <username>
成功连接后,可以执行Hive查询操作,例如:
show databases;