如果想在你的hdfs 上开启EC,并使用HDP,或是CDH版本的时候,请仔细阅读,并认真想清楚你的场景。
我们是由于一些原因,先用HDP 3.1.5 腾讯云的虚拟机在搭建了一套hadoop。然后在这个期间,想利用HDFS EC来节省使用容量。
但是后续我们会利用腾讯云混合云,把一些物理服务器加入到这个集群,然后将这些cvm datanode节点下线。来控制成本。
这个时候问题来了。
在HDP 3.1.5 版本里,hadoop hdfs 版本是3.1.1 在这个版本里EC功能又很多的bug ,其中对大的一个问题就是,在cvm节点下线中产生的bug。
我一次性下线了10台节点,但是由于之前datanode jvm 配置8G ,导致datanode jvm 频繁Full GC 。有很多出现卡住,假死的情况。所以触发了 HDFS-14946 bug。
HDFS-14946 (https://issues.apache.org/jira/browse/HDFS-14946)
就是多个节点同时下线,产生的EC数据无法重建问题。直接影响线上数据损坏,不可用。
另外还有一个HDFS 管理页面,首页里的Number of Under-Replicated Blocks 与 Datanode 页面里的 节点的 Number of Under-Replicated Blocks 总和不一致。
首页里是0, 节点页面,各个退役的节点里还有 几个,几十个block 。一直不动。很难判断是否真全部退役完毕。不知道该不该关闭、删除这些退役的机器。
另外如果EC block group中数据miss block 情况,在hdfs 管理页面不会显示(如果是传统3副本情况,如果有3个机器down了,管理页面会红字显示,那些文件miss)
很多的问题、bug都在HDFS 3.3 版本中修复。
另外开启EC 写入性能会比三副本下降65% 。
https://www.slideshare.net/HadoopSummit/hdfs-erasure-coding-in-action(yahoo japan PPT分享的测试数据。) 具体大家可以测试下。
总结,HDP 3.1.5 想用EC 那么就不要退役下线节点。或是下线节点的时候,一次2台退役。