1. 问题
HDFS 2.X默认使用3副本, 造成200%的磁盘消耗, 以及带宽消耗
纠删码(Erasure Coding)技术, 在保障数据容灾性的同时, 减少数据的的膨胀
Replication is expensive – the default 3x replication scheme in HDFS has 200% overhead in storage space and other resources (e.g., network bandwidth). However, for warm and cold datasets with relatively low I/O activities, additional block replicas are rarely accessed during normal operations, but still consume the same amount of resources as the first replica.
2. 架构
- NameNode扩展, 条带化会将数据切分成多个小文件, 为了减少NameNode的内存消耗, 引入block组概念, 由原来块的管理转换成块组的管理
- 客户端扩展, 读/写流并行, 因为数据切分后分发到不同的DataNode, 所以客户端可以并行写入/读取, 可以充分利用多块磁盘
- DataNode扩展, 新增ECWorker服务用于恢复失效的块文件
3. 配置
默认情况下, 纠删码策略是关闭的, 通过hdfs ec -enablePolicy -policy <policyName>
指令启用
ES默认策略参数dfs.namenode.ec.system.default.policy
, 未指定策略名称时使用
- 策略命名规范: 编码器-数据块个数-奇偶校验块个数-块大小(codec-num data blocks-num parity blocks-cell size)
- 内置6种策略:
RS-3-2-1024k
,RS-6-3-1024k
,RS-10-4-1024k
,RS-LEGACY-6-3-1024k
,XOR-2-1-1024k
以及REPLICATION
4. 管理命令
hdfs ec [generic options]
[-setPolicy -path <path> [-policy <policyName>] [-replicate]]
[-getPolicy -path <path>]
[-unsetPolicy -path <path>]
[-listPolicies]
[-addPolicies -policyFile <file>]
[-listCodecs]
[-enablePolicy -policy <policyName>]
[-disablePolicy -policy <policyName>]
[-help [cmd ...]]