オンプレミスから Cloud Dataproc への Hadoop ジョブの移行

このガイドでは、Cloud Dataproc を使用して Apache Hadoop ジョブを Google Cloud Platform(GCP)に移行する方法について説明します。

これは、オンプレミス Hadoop からの移行方法を説明する 3 つのガイドのうちの 3 番目です。

GCP での Hadoop ジョブの実行

Cloud Dataproc を使用すると、GCP でほとんどの Hadoop ジョブを実行できます。次のリストは、基本的な手順をまとめたものです。

  1. Cloud Storage に保存された永続的なデータを指すようにジョブを更新します。

  2. ジョブを実行する Cloud Dataproc クラスタを作成します。この種の一時的な 1 回限りのクラスタは、エフェメラル クラスタと呼ばれます。

  3. エフェメラル クラスタにジョブを送信します。

  4. 必要に応じて、ジョブのログのモニタリングを Stackdriver Logging または Cloud Storage を使用して行います。デフォルトでは、クラスタの作成時に指定したステージング バケットを使用して、ログが Cloud Storage にキャプチャされます。

  5. Cloud Storage でジョブの出力を確認します。

  6. ジョブが完了したら、クラスタを削除します。

サポートされているジョブ

Cloud Dataproc は Hadoop を実行するため、多くの種類のジョブが自動的にサポートされます。Cloud Dataproc を使用してクラスタを作成する場合、デフォルトでは次のテクノロジーが構成されます。

  • Hadoop
  • Spark
  • Hive
  • Pig

Cloud Dataproc には、さまざまなマシンイメージのバージョンが用意されており、さまざまなバージョンのオープン ソース ソフトウェアがプリインストールされています。イメージにあらかじめ設定されたソフトウェアだけで、多くのジョブを実行できます。一部のジョブでは、他のパッケージをインストールする必要があります。Cloud Dataproc には、初期化アクションと呼ばれるメカニズムが用意されています。このメカニズムを使用すると、クラスタのノードで実行されているソフトウェアをカスタマイズできます。初期化アクションを使用して、作成されたすべてのノードで実行されるスクリプトを作成できます。

データ ロケーション(URI)の更新

Cloud Dataproc クラスタノードにあらかじめインストールされている Cloud Storage コネクタを使用すると、ジョブの中で Cloud Storage を Hadoop 互換ファイル システム(HCFS)として使用できます。データを Cloud Storage に格納すると、このコネクタを利用できます。その場合に、ジョブに対する必要な変更は URI の更新、つまり hdfs://gs:// に置き換えることだけです。

移行の一環としてデータを再編成する場合は、新しいデータ編成で作業するためにジョブを簡単に更新できるように、すべての移行元と移行先のパスをメモします。

HDFS のデータをクラウドの永続クラスタに格納することは可能ですが、これはおすすめしません。データの移行については、データ移行ガイドをご覧ください。

ジョブを実行するクラスタの構成

GCP でジョブを実行するための推奨アプローチでは、必要なときにエフェメラル クラスタを作成し、ジョブの終了時にそれらを削除します。このアプローチでは、クラスタの構成方法が非常に柔軟です。ジョブごとに異なる構成を使用することも、ジョブのグループに対応する複数の標準的なクラスタ構成を作成することもできます。

クラウドを作成するための基本的な手順については、Cloud Dataproc のドキュメントをご覧ください。このセクションの残りの部分では、進め方を決めるのに役立つ、重要なクラスタ構成の考慮事項のいくつかについて説明します。

クラスタのサイズ変更

新しいクラスタを定義するために最初に行う必要があるのは、使用する仮想ハードウェアを決定することです。各ジョブには特定のニーズと特異性があるため、完全なクラスタ構成を計算するのが難しい場合があります。さまざまな構成を試して、ジョブに適した構成を見つけてください。

クラスタを設定するときには、少なくとも次のことを判断する必要があります。

  • 使用するノード数。
  • マスターノードに使用する仮想マシンのタイプ。
  • ワーカーノードに使用する仮想マシンのタイプ。

ノードタイプは、仮想 CPU の数と使用可能なメモリの量によって定義されます。この定義は、Compute Engine のマシンタイプに対応しています。通常は、移行元のオンプレミス ノードの構成に対応するノードタイプを見つけることができます。この同等性を開始場所として使用して、オンプレミス クラスタに類似したクラスタを設定することができます。この場合の最善の方法は、構成を調整し、ジョブの実行に対する影響を監視することです。ジョブ構成の最適化を開始すると、システム内で追加のジョブにアプローチする方法がわかり始めます。

必要に応じてクラスタを拡張できるので、最初から完全な仕様を定義する必要はありません。

プライマリ ディスク オプションの選択

ワーカーノードで使用するプライマリ ディスクのサイズを指定できます。クラスタに対する適切なオプションは、実行するジョブの種類によって異なります。ジョブでプライマリ ディスクの使用に対する要求が異常な場合を除き、デフォルト値を使用して結果を評価します。

ジョブでディスク領域を大量に使用し、個々のノードでの実行速度が遅い場合は、プライマリ ディスク領域を追加できます。特にディスク領域を大量に使用するジョブや、個々の読み書き操作が大量であるジョブの場合、ローカル SSD を追加することで操作性を向上させることができます。ローカル実行に必要な領域のすべてを確保するのに十分な SSD を追加します。ローカル実行ディレクトリは、追加した多数の SSD にまたがっています。

プリエンプティブ ワーカー ノードの使用

プリエンプティブ ワーカー ノードをクラスタに追加することで、低コストでジョブの処理能力を向上させることができます。これらのノードでは、プリエンプティブ仮想マシンを使用します。

プリエンプティブ ノードの使用を選択する前に、プリエンプティブ ノードの本質的な信頼性を考慮してください。Cloud Dataproc はプリエンプトをスムーズに処理しようとしますが、ノードが多すぎるとジョブが失敗する可能性があります。フォールト トレラントであるか、まれに失敗してもビジネスに支障をきたさないような優先度の低いジョブに対しては、プリエンプティブ ノードのみを使用してください。

プリエンプティブ ワーカー ノードを使用する場合は、通常ノードとプリエンプティブ ノードの比率を考慮してください。最良の結果を得るための普遍公式はありませんが、一般的に、標準ノードよりも優先ノードを多く使用すればするほど、ジョブで作業を完了するためのノードが不足する可能性が高くなります。さまざまな比率で試し、結果を分析することで、ジョブの通常ノードに対するプリエンプティブ ノードの最適な比率を判断できます。

SSD はプリエンプティブ ワーカー ノードでは使用できません。専用ノードで SSD を使用する場合、使用するプリエンプティブ ワーカー ノードは専用ノードの他のすべての側面と一致しますが、使用可能な SSD はありません。

実行中のジョブ

Cloud Dataproc では、ジョブを起動するために使用できるインターフェースが複数提供されています。これらのインターフェースはすべてプロダクト ドキュメントに記載されています。このセクションでは、GCP で Hadoop ジョブを実行する際に考慮すべきオプションと操作について説明します。

ジョブの出力の取得

Cloud Dataproc で実行するジョブには、通常、いくつかのタイプの出力があります。たとえば、Cloud Storage バケット内のファイルや、BigQuery などの Cloud プロダクトに、さまざまな出力を直接書き込むことができます。Cloud Dataproc ではログとコンソールの出力を収集し、ジョブを実行するクラスタに関連付けられた Cloud Storage ステージング バケットに格納します。

再実行可能なジョブの使用

ジョブを送信するときに、問題が発生した場合に自動的に再起動するように設定できます。このオプションは、変動が大きいリソースや状況に依存するジョブに役立ちます。たとえば、信頼できない可能性のあるチャネル(公共のインターネットなど)を介してデータをストリーミングするジョブは、タイムアウト エラーや同様のネットワークに関するのために、偶発的な障害が非常に起こりやすくなります。ジョブが失敗しても、少し時間が経過した後で正常に実行される状況が容易に想像できる場合は、ジョブを再実行可能として実行します。

クラスタのスケーリング

Cloud Dataproc を使用すると、ジョブの実行中も含め、いつでもクラスタのノードを簡単に追加または削除できます。Cloud Dataproc のドキュメントには、クラスタを拡張するための詳しい手順が記載されています。スケーリングには、ノードを正常に離脱させるオプションが含まれます。このオプションを使用すると、削除されるノードに対して進行中の処理を完了するための時間が与えられます。

時系列でジョブを管理

個々のジョブを処理することは、通常は複雑ではありませんが、1 つの Hadoop システムに含まれるジョブが数十あるいは数百に達することもあります。時間の経過とともに、ログ、出力ファイル、および各ジョブに関連するその他の情報の数が増加し、個々の情報を見つけることが困難になります。将来的にジョブを管理しやすくするためにできることはいくつかあります。

  • カスタムラベルを使用して、ジョブ、クラスタ、その他のリソースを識別します。ラベルを使用すると、後でフィルタを使用してリソースを見つけることが容易になります。Cloud Dataproc では、標準の GCP ラベルシステムを使用してカスタムラベルをサポートしているため、リソースにラベルを付けると、そのリソースを他の GCP サービスで管理するのに役立ちます。
  • Cloud Storage バケットを整理して、さまざまなタイプのジョブを区別します。ビジネスの構造や部門に対応するバケットにデータをグループ化すると、権限の管理が容易になります。
  • 個々のジョブまたは密接に関連するジョブグループのクラスタを定義します。適切なスコープのジョブに対してのみ各構成を使用すると、エフェメラル クラスタの設定を更新する方がはるかに簡単です。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Hadoop から GCP への移行