最近在公司实习,使用CDH搭环境,添加HDFS服务发现没有挂载全部的硬盘,查看节点硬盘挂载情况发现:

硬盘被挂载到了所以目录下,而CDH使用了root用户,所以挂载到/home目录下的硬盘就没有被hdfs检查到,无法挂载到HDFS上。
HDFS可以挂载多目录,所以在hdfs目录下创建dfs目录:
mkdir -p /home/dfs
并将/home/dfs配置到dfs.datanode.data.dir中:

注意,这里我是将之前的HDFS服务删除了,然后添加目录重新添加HDFS服务,启动服务的时候会格式化HDFS,后来才知道支持热加载:Hadoop集群hdfs添加磁盘操作,是我太狭隘了,人家毕竟这么大一个平台,怎么会不支持热加载,热扩容?
第一次启动失败:
日志也没有明显的错误,查询半天后发现,启动HDFS服务的用户是hdfs,可以在HDFS服务启动时的临时目录里看到配置文件的用户都是hdfs:
cd /var/run/cloudera-scm-agent/process/611-hdfs-DATANODE
ll

所以,改一下每个节点/home/dfs目录的用户和组试试:
chown 777 -R /home
chown hdfs:hdfs -R /home/dfs
再启动一次,还是失败,再查,看看datanode启动日志吧:

尼玛,找到问题了,上一次启动时由于NameNode启动了,会分配Cluster ID,但是DataNode没有启动成功,就不会分配ID。这一次启动时,系统发现NameNode有Cluster ID就不再分配,而DataNode没有ID就分配一个,两个ID不一样,就不行了。
所以将/dfs/nn和/dfs/dn以及/home/dfs/dn目录都要清空!
再一次启动,搞定!

本文详细记录了解决CDH环境下HDFS服务未能正确挂载所有硬盘的问题过程,包括调整目录权限、清理目录及热加载配置,最终实现HDFS服务稳定运行。

被折叠的 条评论
为什么被折叠?



