Hadoop 3.0 で導入された HDFS Erasure Coding を Cloudera Enterprise 6.0 beta の環境で試してみました。
HDFSのErasure Coding は、HDFSのブロックの複製とは異なり、大規模環境においてはストレージに必要なコストを削減できる可能性がある技術です。しかし、小さいデータを格納する際は不利になり、ラック障害やImpala、Spark/MapReduceのようなジョブから利用する場合のパフォーマンス面でも注意が必要です。
Erasure Codingについては過去の投稿やClouderaのブログ、公式ページのドキュメントをご覧ください。整理できたら近いうちに何か書くかもしれません。
C6 Beta版でのErasure Coding
Cloudera Managerで、右上の検索ボックスで Erasure Coding を検索してみると、下記のようにデフォルトでは無効になっています。(さらに未サポート)

チェックボックスにチェックをつけて更新し、ウィザードに従い関連サービスを再起動します。
Erasure Coding のポリシー
Erasure Codingでサポートしているポリシーを一覧します。
[kawasaki@worker-1 ~]$sudo -u hdfs hdfs ec -listPolicies Erasure Coding Policies: ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5], State=DISABLED ErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2], State=DISABLED ErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1], State=ENABLED ErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k, Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=3], State=DISABLED ErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor, numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4], State=DISABLED
5つのポリシーがあり、すべて無効化されていました。
- RS-10-4-1024k
- RS-3-2-1024k
- RS-6-3-1024k
- RS-LEGACY-6-3-1024k
- XOR-2-1-1024k
上記のように、このポリシーにはXORとRS(リードソロモン)があります。その後に続く数字はECグループでのデータとパリティブロックの数です。例えば、RS(6,3) の場合、データ6+パリティ3になります。次の1024kはストライピングセルのサイズです。
ECのポリシーの有効化
今回はワーカーノードが5台しかないので、RS-3-2-1024kを有効にします。(データ3、パリティ2)
[kawasaki@worker-1 ~]$ sudo -u hdfs hdfs ec -enablePolicy -policy RS-3-2-1024k Erasure coding policy RS-3-2-1024k is enabled [kawasaki_tatsuo@worker-1 ~]$ sudo -u hdfs hdfs ec -listPolicies Erasure Coding Policies: ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5], State=DISABLED ErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2], State=ENABLED ErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1], State=ENABLED ErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k, Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=3], State=DISABLED ErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor, numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4], State=DISABLED
HDFSのディレクトリをErasure Coding に設定
それでは HDFS 上の /tmp ディレクトリにテスト用のフォルダを作成し、Erasure Coding を指定します。
[kawasaki@worker-1 ~]$ hdfs dfs -mkdir /tmp/ectest [kawasaki@worker-1 ~]$ sudo -u hdfs hdfs ec -D cloudera.erasure_coding.enabled=true -setPolicy -path /tmp/ectest Set default erasure coding policy on /tmp/ectest
ファイルをアップロードして確認
適当なサイズのファイルをアップロードし、fsckで確認します。
[kawasaki@worker-1 ~]$ hdfs dfs -put /opt/cloudera/parcels/CDH/jars/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar /tmp/ectest [kawasaki_tatsuo@worker-1 ~]$ hdfs dfs -ls /tmp/ectest Found 1 items -rw-r--r-- 1 kawasaki_tatsuo supergroup 136959658 2018-06-25 08:32 /tmp/ectest/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar [kawasaki_tatsuo@worker-1 ~]$ hdfs fsck /tmp/ectest -files -blocks -locations -racks -replicaDetails Connecting to namenode via http://master-1.c.director-test.internal:9870/fsck?ugi=kawasaki_tatsuo&files=1&blocks=1&locations=1&racks=1&replicadetails=1&path=%2Ftmp%2Fectest FSCK started by kawasaki_tatsuo (auth:SIMPLE) from /10.146.0.5 for path /tmp/ectest at Mon Jun 25 08:33:50 UTC 2018 /tmp/ectest <dir> /tmp/ectest/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar 136959658 bytes, erasure-coded: policy=RS-3-2-1024k, 1 block(s): OK 0. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775792_2501 len=136959658 Live_repl=5 [blk_-9223372036854775792:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775791:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775790:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775789:/default/10.146.0.7:9866(LIVE), blk_-9223372036854775788:/default/10.146.0.9:9866(LIVE)] Status: HEALTHY Number of data-nodes: 5 Number of racks: 1 Total dirs: 1 Total symlinks: 0 Replicated Blocks: Total size: 0 B Total files: 0 Total blocks (validated): 0 Minimally replicated blocks: 0 Over-replicated blocks: 0 Under-replicated blocks: 0 Mis-replicated blocks: 0 Default replication factor: 3 Average block replication: 0.0 Missing blocks: 0 Corrupt blocks: 0 Missing replicas: 0 Erasure Coded Block Groups: Total size: 136959658 B Total files: 1 Total block groups (validated): 1 (avg. block group size 136959658 B) Minimally erasure-coded block groups: 1 (100.0 %) Over-erasure-coded block groups: 0 (0.0 %) Under-erasure-coded block groups: 0 (0.0 %) Unsatisfactory placement block groups: 0 (0.0 %) Average block group size: 5.0 Missing block groups: 0 Corrupt block groups: 0 Missing internal blocks: 0 (0.0 %) FSCK ended at Mon Jun 25 08:33:50 UTC 2018 in 6 milliseconds The filesystem under path '/tmp/ectest' is HEALTHY
1つの論理ブロックに対し、5つのストレージブロックがあることがわかりますね。
blk_-9223372036854775792:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775791:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775790:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775789:/default/10.146.0.7:9866(LIVE), blk_-9223372036854775788:/default/10.146.0.9:9866(LIVE)
さらに大きなファイルでテストします。今度は1.2GBのファイルです。
[kawasaki@worker-1 ~]$ hdfs dfs -put /opt/cloudera/parcels/CDH/jars/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar /tmp/ectest [kawasaki_tatsuo@worker-1 ~]$ hdfs dfs -ls /tmp/ectest Found 1 items -rw-r--r-- 1 kawasaki_tatsuo supergroup 136959658 2018-06-25 08:32 /tmp/ectest/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar [kawasaki_tatsuo@worker-1 ~]$ hdfs fsck /tmp/ectest -files -blocks -locations -racks -replicaDetails Connecting to namenode via http://master-1.c.director-test.internal:9870/fsck?ugi=kawasaki_tatsuo&files=1&blocks=1&locations=1&racks=1&replicadetails=1&path=%2Ftmp%2Fectest FSCK started by kawasaki_tatsuo (auth:SIMPLE) from /10.146.0.5 for path /tmp/ectest at Mon Jun 25 08:33:50 UTC 2018 /tmp/ectest <dir> /tmp/ectest/hbase-indexer-mr-1.5-cdh6.0.0-beta1-job.jar 136959658 bytes, erasure-coded: policy=RS-3-2-1024k, 1 block(s): OK 0. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775792_2501 len=136959658 Live_repl=5 [blk_-9223372036854775792:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775791:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775790:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775789:/default/10.146.0.7:9866(LIVE), blk_-9223372036854775788:/default/10.146.0.9:9866(LIVE)] Status: HEALTHY Number of data-nodes: 5 Number of racks: 1 Total dirs: 1 Total symlinks: 0 Replicated Blocks: Total size: 0 B Total files: 0 Total blocks (validated): 0 Minimally replicated blocks: 0 Over-replicated blocks: 0 Under-replicated blocks: 0 Mis-replicated blocks: 0 Default replication factor: 3 Average block replication: 0.0 Missing blocks: 0 Corrupt blocks: 0 Missing replicas: 0 Erasure Coded Block Groups: Total size: 136959658 B Total files: 1 Total block groups (validated): 1 (avg. block group size 136959658 B) Minimally erasure-coded block groups: 1 (100.0 %) Over-erasure-coded block groups: 0 (0.0 %) Under-erasure-coded block groups: 0 (0.0 %) Unsatisfactory placement block groups: 0 (0.0 %) Average block group size: 5.0 Missing block groups: 0 Corrupt block groups: 0 Missing internal blocks: 0 (0.0 %) FSCK ended at Mon Jun 25 08:33:50 UTC 2018 in 6 milliseconds The filesystem under path '/tmp/ectest' is HEALTHY
グループが4、それぞれに5つのブロックがあります。
/tmp/ectest/bigfile 1232636922 bytes, erasure-coded: policy=RS-3-2-1024k, 4 block(s): OK 0. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775760_2556 len=402653184 Live_repl=5 [blk_-9223372036854775760:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775759:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775758:/default/10.146.0.9:9866(LIVE), blk_-9223372036854775757:/default/10.146.0.7:9866(LIVE), blk_-9223372036854775756:/default/10.146.0.6:9866(LIVE)] 1. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775744_2557 len=402653184 Live_repl=5 [blk_-9223372036854775744:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775743:/default/10.146.0.9:9866(LIVE), blk_-9223372036854775742:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775741:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775740:/default/10.146.0.7:9866(LIVE)] 2. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775728_2558 len=402653184 Live_repl=5 [blk_-9223372036854775728:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775727:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775726:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775725:/default/10.146.0.9:9866(LIVE), blk_-9223372036854775724:/default/10.146.0.7:9866(LIVE)] 3. BP-1247856903-10.146.0.4-1527683334343:blk_-9223372036854775712_2559 len=24677370 Live_repl=5 [blk_-9223372036854775712:/default/10.146.0.5:9866(LIVE), blk_-9223372036854775711:/default/10.146.0.6:9866(LIVE), blk_-9223372036854775710:/default/10.146.0.7:9866(LIVE), blk_-9223372036854775709:/default/10.146.0.8:9866(LIVE), blk_-9223372036854775708:/default/10.146.0.9:9866(LIVE)]



コメント