我有一个namenode,必须将其关闭以备不时之需,并且在9个月内未拍摄FSImage,并且有大约5TB的编辑文件需要在下次重启时处理。从大约9个月前(即9个月大的FSImage)以来,辅助namenode一直未运行(或未执行任何检查点操作)。
HDFS集群中大约有780万个索引节点。该计算机的总内存约为260GB。
我们已经尝试了Java堆大小,GC算法等的几种不同组合,但是找不到能够使重启完成而又不会由于FGC而最终减慢爬网速度的组合。< / p>
我有2个问题: 1.是否有人找到一个namenode配置,该配置可以使大量编辑文件积压成功完成?
答案 0 :(得分:0)
如果您的hadoop启用了HA,那么StandBy NN应该已经做好了准备,如果您的辅助NN没有HA,则应该予以解决。
检查这些名称节点进程的日志,以了解其为何无法合并/失败。
以下这些参数可驱动您的编辑文件保存,并且它不应该创建这么多文件。
dfs.namenode.checkpoint.period
dfs.namenode.checkpoint.txns
另一种手动执行合并的方法,但这将是临时。
hdfs dfsadmin -safemode enter
hdfs dfsadmin -rollEdits
hdfs dfsadmin -saveNamespace
hdfs dfsadmin -safemode leave
运行上述命令应合并并保存名称空间。
答案 1 :(得分:0)
我们能够使用我在原始帖子的问题(2)中建议的版本来浏览5TB的编辑文件积压。这是我们经历的过程:
dfs.namenode.name.dir
文件的hdfs-site.xml
属性的配置位置之外的位置。dfs.namenode.name.dir
位置。如果您不熟悉FSImage的命名约定并编辑文件,请看以下示例。希望它将阐明 next 编辑文件子集的含义。seen_txid
以包含由您在步骤(3)中复制的子集中的最后编辑文件表示的最后事务的值。因此,如果最后一个编辑文件是edits_0000000000000000011-0000000000000000020
,则需要将seen_txid
的值更新为20
。这从根本上愚弄了名称节点,以为这个子集是整个编辑文件集。Startup Progress
标签,您会看到namenode将以最新的FSImage开始,处理当前的编辑文件,创建一个新的FSImage文件,然后进入等待数据节点联机时的安全模式。edits_inprogress_########
文件作为占位符。除非这是要处理的最终组编辑文件,否则请删除该文件。假设我们有FSImage fsimage_0000000000000000010
和一堆编辑文件:edits_0000000000000000011-0000000000000000020
edits_0000000000000000021-0000000000000000030
edits_0000000000000000031-0000000000000000040
edits_0000000000000000041-0000000000000000050
edits_0000000000000000051-0000000000000000060
...
edits_0000000000000000091-0000000000000000100
遵循上述步骤:
dfs.namenode.name.dir
复制到另一个位置,例如:/tmp/backup
edits_0000000000000000011-0000000000000000020
和edits_0000000000000000021-0000000000000000030
复制到dfs.namenode.name.dir
位置。seen_txid
更新为包含值30
,因为这是我们在此运行期间要处理的最后一笔交易。Startup Progress
选项卡确认其正确使用了fsimage_0000000000000000010
作为起点,然后处理了edits_0000000000000000011-0000000000000000020
和edits_0000000000000000021-0000000000000000030
。然后,它创建了一个新的FSImage文件fsimage_0000000000000000030`并进入安全模式,等待数据节点出现。edits_inprogress_########
,因为这不是要处理的最终编辑文件集。