vlambda博客
学习文章列表

HDFS存储优化-纠错码

纠错码的原理

HDFS 默认情况下,一个文件有 3 个副本,这样提高了数据的可靠性,但也带来了 2 倍的冗余开销。Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约 50%左右的存储空间。

相关命令

  • 纠错码相关命令

hdfs ecUsage: bin/hdfs ec [COMMAND][-listPolicies][-addPolicies -policyFile <file>][-getPolicy -path <path>][-removePolicy -policy <policy>][-setPolicy -path <path> [-policy <policy>] [-replicate]][-unsetPolicy -path <path>][-listCodecs][-enablePolicy -policy <policy>][-disablePolicy -policy <policy>][-help <command-name>].
  • 当前版本支持的纠错码策略

dfs ec -listPoliciesErasure Coding Policies:ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs,numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5],State=DISABLEDErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs,numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2],State=DISABLEDErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs,numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1],State=ENABLEDErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k,Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]],CellSize=1048576, Id=3], State=DISABLEDErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor,numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4],State=DISABLED
  • 纠错码策略一览

RS-3-2-1024k:使用 RS 编码,每 3 个数据单元,生成 2 个校验单元,共 5 个单元,也就是说:这 5 个单元中,只要有任意的 3 个单元存在(不管是数据单元还是校验单元,只要总数=3),就可以得到原始数据。每个单元的大小是 1024k=1024*1024=1048576。


RS-10-4-1024k:使用 RS 编码,每 10 个数据单元(cell),生成 4 个校验单元,共 14个单元,也就是说:这 14 个单元中,只要有任意的 10 个单元存在(不管是数据单元还是校验单元,只要总数=10),就可以得到原始数据。每个单元的大小是 1024k=1024*1024=1048576。


RS-6-3-1024k:使用 RS 编码,每 6 个数据单元,生成 3 个校验单元,共 9 个单元,也就是说:这 9 个单元中,只要有任意的 6 个单元存在(不管是数据单元还是校验单元,只要总数=6),就可以得到原始数据。每个单元的大小是 1024k=1024*1024=1048576。


RS-LEGACY-6-3-1024k:策略和上面的 RS-6-3-1024k 一样,只是编码的算法用的是 rs-legacy。


XOR-2-1-1024k:使用 XOR 编码(速度比 RS 编码快),每 2 个数据单元,生成 1 个校验单元,共 3 个单元,也就是说:这 3 个单元中,只要有任意的 2 个单元存在(不管是数据单元还是校验单元,只要总数= 2),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。


  • 纠错码应用

hdfs ec -enablePolicy -policy RS-3-2-1024k