今天在搭建hadoop环境时,出现了个奇葩的现象:4个节点的hadoop集群,我将 ssb 1T的数据集使用 -put
命令上传到hdfs,结果,一共4个节点,所有数据全往1个节点薅!每个节点1T的存储,上传过程中,3个节点存储量一点没办,另外1个节点存储占用,蹭蹭蹭往上涨!
通过网上的信息,尝试过使用均衡器(balancer),然而并没有什么用。最后回归debug最朴素的方法:查日志
由于是数据存储的问题,我直接去找datanode的日志,发现上传数据的过程中,日志里一直刷了一个错误,详细内容如下:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException): Datanode denied communication with namenode because hostname cannot be resolve
呀!域名解析错误?这是我想到我的 /etc/hosts
里 确实没有设置各个节点的 IP 主机名映射
,难道是这个原因?
- 停止hadoop 服务
- 清空 data 和 logs 目录
- 设置
/etc/hosts
- 上传数据
OK,问题解决了:
- 可以看到4个节点的存储量基本均衡了(1.3T 的那个节点存储量之所以比另外几个节点要大,是包含了原始数据)