排错过程
安装Impala后,删除掉Impala依赖的Hadoop、Hive等框架后,还是启动自己之前部署的Hadoop、Hive,没有报错,但是通过WEb界面查看,发现集群处于安全模式,然后所有的DataNode节点都没有挂载上(这时候没有注意到DataNode节点没有挂载上)。。。
Security is off.
Safe mode is ON. The reported blocks 0 needs additional 539 blocks to reach the threshold 0.9990 of total blocks 540. The number of live datanodes 0 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached.
794 files and directories, 540 blocks = 1,334 total filesystem object(s).
Heap Memory used 121.02 MB of 200 MB Heap Memory. Max Heap Memory is 889 MB.
Non Heap Memory used 51.64 MB of 52.5 MB Commited Non Heap Memory. Max Non Heap Memory is <unbounded>.
手动关闭集群安全模式,发现所有的数据都丢失了(还没有意识到是DataNode节点没有启动的问题),按照数据块损坏在搜索引擎搜索相关资料,大部分都是列出受损的块,数据不重要的话直接删掉,按照这种思路,所有的数据都要被删掉。。。。
这时候,想到是不是操作系统的问题,然后把集群关闭(stop-dfs.sh;stop-yarn.sh;这时候要是注意一下stop-dfs.sh执行输出日志, no datanode to stop
就可以少走一下弯路,不用重启操作系统了。。。),集群上的每一台CentOS都重启了一下,然后启动集群,执行了一下JPS,发现有的进程显示不全,
631 Jps
3135 -- process information unavailable
2978 -- process information unavailable
然后去/tmp目录下,执行了一下rm -rf hsperfdata_*
,
再次启动集群,执行jps发现,没有发现DataNode进程(终于回到正轨了),然后单独启动DataNode进程(hadoop-daemon.sh start datanode)执行jps也是没有DataNode进程,这时候想到了看一下DataNode的日志文件$HADOOP_HOME/logs/hadoop-root-datanode-节点ip.log
,是.log文件,不要看.out文件,看到日志文件,还是不太清楚是什么原因,然后把这一坨报错放到搜索引擎上面,突然明白怎么回事了。。。是之前配置Impala短路读取的锅,没有创建对应的目录。。。
2021-11-19 10:09:56,767 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: java.io.IOException: failed to stat a path component: '/var/lib/hadoop-hdfs' in '/var/lib/hadoop-hdfs/dn_socket'. error code 2 (No such file or directory). Ensure that the path is configured correctly.
2021-11-19 10:09:56,772 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at linux121/192.168.80.121
************************************************************/
解决方案
在节点上都创建一下/var/lib/hadoop-hdfs/这个路径,但是不要创建dn_socket路径(该路径是集群启动时自动创建,手动创建会报错)
然后手动在所有节点启动一下DataNode进程(hadoop-daemon.sh start datanode),之后执行jps,发现DataNode启动,Nice。
在Web界面查看DataNode已经成功挂载