我在一个有 10 多台机器的集群上运行 Hadoop 1.1.2。对于 HDFS 和 MapReduce,我想很好地向上和向下扩展。“很好”,我的意思是我要求数据不会丢失(允许 HDFS 节点退役),并且运行任务的节点在关闭之前完成。
我注意到一旦退役完成,datanode进程就会死亡,这很好。这就是我删除节点的方法:
- 将节点添加到 mapred.exclude
- 将节点添加到 hdfs.exclude
$ hadoop mradmin -refreshNodes
$ hadoop dfsadmin -refreshNodes
$ hadoop-daemon.sh stop tasktracker
要重新添加节点(假设它像上面那样被删除),这就是我正在做的事情。
- 从 mapred.exclude 中删除
- 从 hdfs.exclude 中删除
$ hadoop mradmin -refreshNodes
$ hadoop dfsadmin -refreshNodes
$ hadoop-daemon.sh start tasktracker
$ hadoop-daemon.sh start datanode
这是“很好”地扩大和缩小规模的正确方法吗?当缩小规模时,我注意到某些不走运的工作的工作持续时间急剧上升(因为他们在删除的节点上运行的任务需要重新安排)。