Cloudera Enterprise 6 beta で Erasure Coding を試してみる

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 を検索してみると、下記のようにデフォルトでは無効になっています。(さらに未サポート)

c6-hdfs-ec

チェックボックスにチェックをつけて更新し、ウィザードに従い関連サービスを再起動します。

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)]
&nbsp;

NameNodeのWebUI

c6-hdfs-nn

ひとまずここまで。

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)