HDFS ローリングアップグレード では、個々の HDFS デーモンをアップグレードできます。たとえば、データノードはネームノードとは独立してアップグレードできます。ネームノードは、他のネームノードとは独立してアップグレードできます。ネームノードは、データノードやジャーナルノードとは独立してアップグレードできます。
Hadoop v2 では、HDFS は高可用性 (HA) ネームノードサービスとワイヤ互換性をサポートしています。これらの 2 つの機能により、HDFS のダウンタイムを発生させることなく HDFS をアップグレードすることが可能になります。ダウンタイムなしで HDFS クラスターをアップグレードするには、クラスターを HA でセットアップする必要があります。
新しいソフトウェアリリースで有効になっている新しい機能が、アップグレード後に古いソフトウェアリリースでは機能しない場合があります。このような場合は、次の手順に従ってアップグレードする必要があります。
ローリングアップグレードは、Hadoop-2.4.0 以降でのみサポートされていることに注意してください。
HA クラスターには、2 つ以上の NameNodes (NN)、多数の DataNodes (DN)、いくつかの JournalNodes (JN)、およびいくつかの ZooKeeperNodes (ZKN) があります。JN は比較的安定しており、ほとんどの場合、HDFS をアップグレードするときにアップグレードする必要はありません。ここで説明するローリングアップグレード手順では、NN と DN のみが考慮されますが、JN と ZKN は考慮されません。JN と ZKN をアップグレードすると、クラスターのダウンタイムが発生する可能性があります。
ネームノード NN1 と NN2 があり、NN1 と NN2 がそれぞれアクティブ状態とスタンバイ状態であるとします。HA クラスターをアップグレードする手順は次のとおりです。
hdfs dfsadmin -rollingUpgrade prepare
」を実行して、ロールバック用の fsimage を作成します。hdfs dfsadmin -rollingUpgrade query
」を実行して、ロールバックイメージの状態を確認します。「ローリングアップグレードを続行
」というメッセージが表示されるまで、待機してコマンドを再実行します。-rollingUpgrade started
」オプションを指定して、NN2 をスタンバイとして起動します。-rollingUpgrade started
」オプションを指定して、NN1 をスタンバイとして起動します。hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
」を実行して、選択したデータノードの 1 つをシャットダウンします。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
」を実行して、データノードがシャットダウンするまで確認して待ちます。hdfs dfsadmin -rollingUpgrade finalize
」を実行して、ローリングアップグレードを確定します。フェデレーションクラスターでは、複数の名前空間があり、各名前空間にアクティブおよびスタンバイの NN ペアがあります。フェデレーションクラスターをアップグレードする手順は、ステップ 1 とステップ 4 が各名前空間で実行され、ステップ 2 がアクティブおよびスタンバイの NN ペアごとに実行されることを除いて、非フェデレーションクラスターのアップグレードに似ています。つまり、
非 HA クラスターの場合、ネームノードを再起動する必要があるため、ダウンタイムなしで HDFS をアップグレードすることは不可能です。ただし、データノードはローリング方式でアップグレードできます。
非 HA クラスターには、NameNode (NN)、SecondaryNameNode (SNN)、および多くの DataNodes (DN) があります。非 HA クラスターをアップグレードする手順は、ステップ 2 の「アクティブおよびスタンバイ NN のアップグレード」が以下に変更されることを除いて、HA クラスターのアップグレードに似ています。
-rollingUpgrade started
」オプションを指定して、NN を起動します。アップグレードされたリリースが望ましくない場合、または、ありそうもないケースとして、アップグレードが失敗した場合(新しいリリースのバグが原因)、管理者は HDFS をアップグレード前のリリースに戻すか、HDFS をアップグレード前のリリースとアップグレード前の状態にロールバックすることを選択できます。
ダウングレードはローリング方式で実行できますが、ロールバックはできません。ロールバックにはクラスターのダウンタイムが必要です。
また、ダウングレードとロールバックは、ローリングアップグレードが開始されてから、アップグレードが終了するまでの間にのみ可能です。アップグレードは、確定、ダウングレード、またはロールバックのいずれかによって終了できます。したがって、確定またはダウングレード後にロールバックを実行したり、確定後にダウングレードを実行したりすることはできない場合があります。
ダウングレード は、ソフトウェアをアップグレード前のリリースに戻し、ユーザーデータを保持します。時刻 T がローリングアップグレードの開始時刻であり、アップグレードがダウングレードによって終了するとします。この場合、T の前後に作成されたファイルは、HDFS で引き続き使用できます。T の前後に削除されたファイルは、HDFS で削除されたままになります。
ネームノードレイアウトバージョンとデータノードレイアウトバージョンの両方が、これら 2 つのリリース間で変更されていない場合にのみ、新しいリリースをアップグレード前のリリースにダウングレードできます。
HA クラスターでは、古いソフトウェアリリースから新しいソフトウェアリリースへのローリングアップグレードが進行中の場合、アップグレードされたマシンをローリング方式で古いソフトウェアリリースにダウングレードできます。以前と同様に、NN1 と NN2 がそれぞれアクティブ状態とスタンバイ状態であるとします。以下は、ダウンタイムなしでローリングダウングレードを行う手順です。
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
」を実行して、選択したデータノードの 1 つをシャットダウンします。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
」を実行して、データノードがシャットダウンするまで確認して待ちます。hdfs dfsadmin -rollingUpgrade finalize
」を実行して、ローリングダウングレードを確定します。データノードは、プロトコルが後方互換性のある方法で変更される可能性があり、前方互換性はないため、ネームノードをダウングレードする前にダウングレードする必要があります。つまり、古いデータノードは新しいネームノードと通信できますが、その逆はできません。
ロールバック は、ソフトウェアをアップグレード前のリリースに戻しますが、ユーザーデータもアップグレード前の状態に戻します。時刻 T がローリングアップグレードの開始時刻であり、アップグレードがロールバックによって終了するとします。T の前に作成されたファイルは HDFS で引き続き使用できますが、T の後に作成されたファイルは使用できなくなります。T の前に削除されたファイルは HDFS で削除されたままになりますが、T の後に削除されたファイルは復元されます。
新しいリリースからアップグレード前のリリースへのロールバックは常にサポートされています。ただし、ローリング方式で実行することはできません。クラスタのダウンタイムが必要です。NN1とNN2がそれぞれアクティブ状態とスタンバイ状態であるとします。以下はロールバックの手順です。
-rollingUpgrade rollback
」オプションを指定して、NN1をアクティブとして起動します。-rollback
」オプションを指定して、DNを起動します。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 -rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>
ローリングアップグレードが進行中の場合、-rollingUpgrade
namenode 起動オプションを使用して、さまざまなローリングアップグレードオプションを指定します。
rollback |
namenode をアップグレード前のリリースに戻すだけでなく、ユーザーデータもアップグレード前の状態に戻します。 |
started |
既に開始されているローリングアップグレードを指定します。これにより、namenode は起動時に異なるレイアウトバージョンのイメージディレクトリを許可する必要があります。 |
警告: ダウングレードオプションは廃止されました。 namenode をダウングレードオプションを明示的に指定して起動する必要はありません。