HDFS ローリングアップグレード

はじめに

HDFS ローリングアップグレード では、個々の HDFS デーモンをアップグレードできます。たとえば、データノードはネームノードとは独立してアップグレードできます。ネームノードは、他のネームノードとは独立してアップグレードできます。ネームノードは、データノードやジャーナルノードとは独立してアップグレードできます。

アップグレード

Hadoop v2 では、HDFS は高可用性 (HA) ネームノードサービスとワイヤ互換性をサポートしています。これらの 2 つの機能により、HDFS のダウンタイムを発生させることなく HDFS をアップグレードすることが可能になります。ダウンタイムなしで HDFS クラスターをアップグレードするには、クラスターを HA でセットアップする必要があります。

新しいソフトウェアリリースで有効になっている新しい機能が、アップグレード後に古いソフトウェアリリースでは機能しない場合があります。このような場合は、次の手順に従ってアップグレードする必要があります。

  1. 新しい機能を無効にします。
  2. クラスターをアップグレードします。
  3. 新しい機能を有効にします。

ローリングアップグレードは、Hadoop-2.4.0 以降でのみサポートされていることに注意してください。

ダウンタイムなしのアップグレード

HA クラスターには、2 つ以上の NameNodes (NN)、多数の DataNodes (DN)、いくつかの JournalNodes (JN)、およびいくつかの ZooKeeperNodes (ZKN) があります。JN は比較的安定しており、ほとんどの場合、HDFS をアップグレードするときにアップグレードする必要はありません。ここで説明するローリングアップグレード手順では、NNDN のみが考慮されますが、JNZKN は考慮されません。JNZKN をアップグレードすると、クラスターのダウンタイムが発生する可能性があります。

非フェデレーションクラスターのアップグレード

ネームノード NN1NN2 があり、NN1NN2 がそれぞれアクティブ状態とスタンバイ状態であるとします。HA クラスターをアップグレードする手順は次のとおりです。

  1. ローリングアップグレードの準備
    1. hdfs dfsadmin -rollingUpgrade prepare」を実行して、ロールバック用の fsimage を作成します。
    2. hdfs dfsadmin -rollingUpgrade query」を実行して、ロールバックイメージの状態を確認します。「ローリングアップグレードを続行」というメッセージが表示されるまで、待機してコマンドを再実行します。
  2. アクティブおよびスタンバイ NN のアップグレード
    1. NN2 をシャットダウンしてアップグレードします。
    2. -rollingUpgrade started」オプションを指定して、NN2 をスタンバイとして起動します。
    3. NN1 から NN2 にフェイルオーバーして、NN2 がアクティブになり、NN1 がスタンバイになるようにします。
    4. NN1 をシャットダウンしてアップグレードします。
    5. -rollingUpgrade started」オプションを指定して、NN1 をスタンバイとして起動します。
  3. DN のアップグレード
    1. データノードの小さなサブセット(例:特定のラックの下にあるすべてのデータノード)を選択します。
      1. hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade」を実行して、選択したデータノードの 1 つをシャットダウンします。
      2. hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>」を実行して、データノードがシャットダウンするまで確認して待ちます。
      3. データノードをアップグレードして再起動します。
      4. サブセット内の選択したすべてのデータノードに対して、上記のステップを並行して実行します。
    2. クラスター内のすべてのデータノードがアップグレードされるまで、上記のステップを繰り返します。
  4. ローリングアップグレードの確定
    1. hdfs dfsadmin -rollingUpgrade finalize」を実行して、ローリングアップグレードを確定します。

フェデレーションクラスターのアップグレード

フェデレーションクラスターでは、複数の名前空間があり、各名前空間にアクティブおよびスタンバイの NN ペアがあります。フェデレーションクラスターをアップグレードする手順は、ステップ 1 とステップ 4 が各名前空間で実行され、ステップ 2 がアクティブおよびスタンバイの NN ペアごとに実行されることを除いて、非フェデレーションクラスターのアップグレードに似ています。つまり、

  1. 各名前空間のローリングアップグレードの準備
  2. 各名前空間のアクティブおよびスタンバイ NN ペアのアップグレード
  3. DN のアップグレード
  4. 各名前空間のローリングアップグレードの確定

ダウンタイムありのアップグレード

非 HA クラスターの場合、ネームノードを再起動する必要があるため、ダウンタイムなしで HDFS をアップグレードすることは不可能です。ただし、データノードはローリング方式でアップグレードできます。

非 HA クラスターのアップグレード

非 HA クラスターには、NameNode (NN)SecondaryNameNode (SNN)、および多くの DataNodes (DN) があります。非 HA クラスターをアップグレードする手順は、ステップ 2 の「アクティブおよびスタンバイ NN のアップグレード」が以下に変更されることを除いて、HA クラスターのアップグレードに似ています。

  • NNSNN のアップグレード
    1. SNN をシャットダウンします。
    2. NN をシャットダウンしてアップグレードします。
    3. -rollingUpgrade started」オプションを指定して、NN を起動します。
    4. SNN をアップグレードして再起動します。

ダウングレードとロールバック

アップグレードされたリリースが望ましくない場合、または、ありそうもないケースとして、アップグレードが失敗した場合(新しいリリースのバグが原因)、管理者は HDFS をアップグレード前のリリースに戻すか、HDFS をアップグレード前のリリースとアップグレード前の状態にロールバックすることを選択できます。

ダウングレードはローリング方式で実行できますが、ロールバックはできません。ロールバックにはクラスターのダウンタイムが必要です。

また、ダウングレードとロールバックは、ローリングアップグレードが開始されてから、アップグレードが終了するまでの間にのみ可能です。アップグレードは、確定、ダウングレード、またはロールバックのいずれかによって終了できます。したがって、確定またはダウングレード後にロールバックを実行したり、確定後にダウングレードを実行したりすることはできない場合があります。

ダウングレード

ダウングレード は、ソフトウェアをアップグレード前のリリースに戻し、ユーザーデータを保持します。時刻 T がローリングアップグレードの開始時刻であり、アップグレードがダウングレードによって終了するとします。この場合、T の前後に作成されたファイルは、HDFS で引き続き使用できます。T の前後に削除されたファイルは、HDFS で削除されたままになります。

ネームノードレイアウトバージョンとデータノードレイアウトバージョンの両方が、これら 2 つのリリース間で変更されていない場合にのみ、新しいリリースをアップグレード前のリリースにダウングレードできます。

HA クラスターでは、古いソフトウェアリリースから新しいソフトウェアリリースへのローリングアップグレードが進行中の場合、アップグレードされたマシンをローリング方式で古いソフトウェアリリースにダウングレードできます。以前と同様に、NN1NN2 がそれぞれアクティブ状態とスタンバイ状態であるとします。以下は、ダウンタイムなしでローリングダウングレードを行う手順です。

  1. DN のダウングレード
    1. データノードの小さなサブセット(例:特定のラックの下にあるすべてのデータノード)を選択します。
      1. hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade」を実行して、選択したデータノードの 1 つをシャットダウンします。
      2. hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>」を実行して、データノードがシャットダウンするまで確認して待ちます。
      3. データノードをダウングレードして再起動します。
      4. サブセット内の選択したすべてのデータノードに対して、上記のステップを並行して実行します。
    2. クラスター内のアップグレードされたすべてのデータノードがダウングレードされるまで、上記のステップを繰り返します。
  2. アクティブおよびスタンバイ NN のダウングレード
    1. NN2 をシャットダウンしてダウングレードします。
    2. NN2 を通常どおりスタンバイとして起動します。
    3. NN1 から NN2 にフェイルオーバーして、NN2 がアクティブになり、NN1 がスタンバイになるようにします。
    4. NN1 をシャットダウンしてダウングレードします。
    5. NN1 を通常どおりスタンバイとして起動します。
  3. ローリングダウングレードの確定
    1. hdfs dfsadmin -rollingUpgrade finalize」を実行して、ローリングダウングレードを確定します。

データノードは、プロトコルが後方互換性のある方法で変更される可能性があり、前方互換性はないため、ネームノードをダウングレードする前にダウングレードする必要があります。つまり、古いデータノードは新しいネームノードと通信できますが、その逆はできません。

ロールバック

ロールバック は、ソフトウェアをアップグレード前のリリースに戻しますが、ユーザーデータもアップグレード前の状態に戻します。時刻 T がローリングアップグレードの開始時刻であり、アップグレードがロールバックによって終了するとします。T の前に作成されたファイルは HDFS で引き続き使用できますが、T の後に作成されたファイルは使用できなくなります。T の前に削除されたファイルは HDFS で削除されたままになりますが、T の後に削除されたファイルは復元されます。

新しいリリースからアップグレード前のリリースへのロールバックは常にサポートされています。ただし、ローリング方式で実行することはできません。クラスタのダウンタイムが必要です。NN1NN2がそれぞれアクティブ状態とスタンバイ状態であるとします。以下はロールバックの手順です。

  • HDFS のロールバック
    1. すべてのNNDNをシャットダウンします。
    2. すべてのマシンでアップグレード前のリリースを復元します。
    3. -rollingUpgrade rollback」オプションを指定して、NN1をアクティブとして起動します。
    4. NN2で「`-bootstrapStandby’」を実行し、通常どおりスタンバイとして起動します。
    5. -rollback」オプションを指定して、DNを起動します。

ローリングアップグレードのコマンドと起動オプション

DFSAdmin コマンド

dfsadmin -rollingUpgrade

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>

ローリングアップグレードのアクションを実行します。

  • オプション
    query 現在のローリングアップグレードのステータスを照会します。
    prepare 新しいローリングアップグレードを準備します。
    finalize 現在のローリングアップグレードを完了します。

dfsadmin -getDatanodeInfo

hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>

指定されたデータノードに関する情報を取得します。このコマンドは、Unix のpingコマンドのようにデータノードが稼働しているかを確認するために使用できます。

dfsadmin -shutdownDatanode

hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]

指定されたデータノードのシャットダウンリクエストを送信します。オプションのupgrade引数が指定されている場合、データノードにアクセスするクライアントには、再起動を待機するようにアドバイスされ、高速起動モードが有効になります。再起動が間に合わない場合、クライアントはタイムアウトし、データノードを無視します。その場合、高速起動モードも無効になります。

このコマンドは、データノードのシャットダウンが完了するのを待機しないことに注意してください。「dfsadmin -getDatanodeInfo」コマンドを使用して、データノードのシャットダウンが完了したかどうかを確認できます。

NameNode の起動オプション

namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <rollback|started>

ローリングアップグレードが進行中の場合、-rollingUpgrade namenode 起動オプションを使用して、さまざまなローリングアップグレードオプションを指定します。

  • オプション
    rollback namenode をアップグレード前のリリースに戻すだけでなく、ユーザーデータもアップグレード前の状態に戻します。
    started 既に開始されているローリングアップグレードを指定します。これにより、namenode は起動時に異なるレイアウトバージョンのイメージディレクトリを許可する必要があります。

警告: ダウングレードオプションは廃止されました。 namenode をダウングレードオプションを明示的に指定して起動する必要はありません。