DataNode移行スキーム

29267 ワード

DataNode移行スキーム
ターゲット
外部要因の影響で、元のdnが存在するノードの機械をA機械室からB機械室に交換する必要があり、その中でホスト名とIPの変化に関わる.最終的な目標は、移行後もクラスタに大きな影響を及ぼさず、サービスは依然として利用可能であり、データの損失は発生しないことである.
関連知識
dn移行時には必ず移行ノードの心拍停止を招くため、心拍検査のタイムアウト時間を超えるとこのノードはdead nodeとしてタスクされ、コピー数をバランスさせるためにクラスタ内の大量のblockブロックがコピーする現象をもたらし、短時間でノードがdead nodeにならないようにするには、人工的に心拍タイムアウト検査時間を大きくする必要がある.namenodeタイムアウト心拍検出時間アルゴリズムは以下の通りである.
  DatanodeManager(final BlockManager blockManager, final Namesystem namesystem,
      final Configuration conf) throws IOException {
    ....

    final long heartbeatIntervalSeconds = conf.getLong(
        DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_KEY,
        DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_DEFAULT);
    final int heartbeatRecheckInterval = conf.getInt(
        DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_KEY, 
        DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_DEFAULT); // 5 minutes
    this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval
        + 10 * 1000 * heartbeatIntervalSeconds;
    ....

コア式は次のとおりです.
this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval + 10 * 1000 * heartbeatIntervalSeconds;

heartbeatRecheckInterval心拍検出時間デフォルト300 s、心拍間隔3 sのため、デフォルトタイムアウト時間2*300+10*3=630 sである.従って、前者の配置を大きくする必要がある.
<name>dfs.namenode.heartbeat.recheck-intervalname> 
<value>10800000value> 
<source>hdfs-default.xmlsource> 
property>

ここでは3時間に拡大する、使用シーンによって変化*standby namenodeのhdfs-siteを更新することができる.xmlの構成を再起動します.*standby namenodeがsafemodeを終了するのを待ってからstop active namenodeを行い、構成を更新して再起動します.
しかし、この方式は、Datanodeがホスト名やIPの変化に関わる場合に適用される.
以下は、ホスト名、IPの変更に関する移行スキームです.
手順1:Datanode移行テスト
dnが移行する前に、テストファイルのアップロードとrpcリクエストのテストを行い、後で比較してまずtestファイルを1つアップロードします
bin/hadoop fs -put test.txt /tmp

このファイルが存在するblockが必ずこのノードに存在することを保証し、-catコマンドで表示します.
bin/hadoop fs -cat /tmp/test.txt
  • のテストが完了すると、dnが停止し、jpsコマンドを使用してdnが本当に停止するかどうかを確認します.
  • namenodeを観察するウェブインタフェースには、630 sを超えるとdead nodeとみなされる移行ノードが表示される.
  • 以降のnamenodedのwebインタフェースのNumber of Under-Replicated Blocks指標は、コピー中のblockコピー数を示す、現在大量のblockのブロックがコピーコピーを行っていることを示す.

  • 手順3:Datanode再起動
  • dnを再起動し、datanode logログを表示します.dnは初回起動時にキャッシュされたdfsUsed値が600 sを超えると期限切れになるため、duコマンドスキャン上のディスクブロックを再実行してdfsUsed使用量の計算を行う必要があり、数分かかります(すぐにstopし、すぐにstart datanodeになると、非常に速くなります.)
  • 2016-01-06 16:05:08,118 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Added new volume: DS-70097061-42f8-4c33-ac27-2a6ca21e60d4
    2016-01-06 16:05:08,118 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Added volume - /home/data/data/hadoop/dfs/data/data12/current, StorageType: DISK
    2016-01-06 16:05:08,176 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Registered FSDatasetState MBean
    2016-01-06 16:05:08,177 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Adding block pool BP-1942012336-xx.xx.xx.xx-1406726500544
    2016-01-06 16:05:08,178 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data2/current...
    2016-01-06 16:05:08,179 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data3/current...
    2016-01-06 16:05:08,179 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data4/current...
    2016-01-06 16:05:08,179 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data5/current...
    2016-01-06 16:05:08,180 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data6/current...
    2016-01-06 16:05:08,180 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data7/current...
    2016-01-06 16:05:08,180 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data8/current...
    2016-01-06 16:05:08,180 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data9/current...
    2016-01-06 16:05:08,181 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data10/current...
    2016-01-06 16:05:08,181 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data11/current...
    2016-01-06 16:05:08,181 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Scanning block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on volume /home/data/data/hadoop/dfs/data/data12/current...
    2016-01-06 16:09:49,646 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data7/current: 281466ms
    2016-01-06 16:09:54,235 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data9/current: 286054ms
    2016-01-06 16:09:57,859 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data2/current: 289680ms
    2016-01-06 16:10:00,333 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data5/current: 292153ms
    2016-01-06 16:10:05,696 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data8/current: 297516ms
    2016-01-06 16:10:11,229 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data6/current: 303049ms
    2016-01-06 16:10:28,075 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data12/current: 319894ms
    2016-01-06 16:10:33,017 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data4/current: 324838ms
    2016-01-06 16:10:40,177 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data10/current: 331996ms
    2016-01-06 16:10:44,882 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data3/current: 336703ms
    2016-01-06 16:11:14,241 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time taken to scan block pool BP-1942012336-xx.xx.xx.xx-1406726500544 on /home/data/data/hadoop/dfs/data/data11/current: 366060ms
    2016-01-06 16:11:14,242 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Total time to scan all replicas for block pool BP-1942012336-xx.xx.xx.xx-1406726500544: 366065ms

    上記のTime takenのログはディスクスキャン動作の終了を表し、dn起動に成功する.
  • dnが正常に起動すると、namenodeのページ上のNumber of Under-Replicated Blocks指標は再び0になり、余分なブロックのコピーを必要としないことを表す.
  • このノードでbin/hadoop fs-cat/tmp/testを再実行する.txtコマンドは、ファイルの内容が表示できるかどうかをテストし、テスト終了後にテストファイル
  • を削除する.
    まとめ
  • は、ホスト名とIPを交換するDataNode移行操作において、制御可能な時間内にdnサービスを回復すれば、クラスタに大きな影響を与えることなく、移行ノードがdead nodeの状態になったときに短いブロックコピーが発生するのみである.
  • は、ホスト名やIP操作を変更するDataNode移行操作について、heartbeat recheck時間を長くして、短時間でdead nodeにならないようにして復旧を行う限り、クラスタに影響を与えることはない.