Dataproc オプション コンポーネントが新たに Apache Flink と Docker をサポート
Google Cloud Japan Team
※この投稿は米国時間 2020 年 10 月 16 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud の Dataproc では、ネイティブの Apache Spark や Hadoop クラスタを Google Cloud 上でこれまで以上にシンプルかつ費用効率よく実行できるようになります。このブログでは、Dataproc のコンポーネント交換で利用可能な最新のオプション コンポーネントである Docker と Apache Flink について説明します。
Dataproc での Docker コンテナ
Docker は、広く使用されているコンテナ テクノロジーです。今回 Dataproc のオプション コンポーネントに追加されたことで、Docker デーモンは Dataproc クラスタのすべてのノードでインストールできるようになりました。これにより、コンテナ化されたアプリケーションをインストールして、クラスタ上で Hadoop クラスタと簡単にやり取りできるようになります。
Docker はまた、以下の機能をサポートするうえでも欠かせません。
YARN を使ったコンテナの実行
ポータブルな Apache Beam ジョブ
YARN でコンテナを実行すると、YARN のアプリケーションの依存関係を個別に管理できるだけでなく、YARN 上でコンテナ化サービスを作成することも可能です。こちらで詳細をご確認いただけます。ポータブルな Apache Beam を使ってジョブを Docker コンテナにパッケージ化し、Flink クラスタに送信します。これについては Beam のポータビリティの詳細をご覧ください。
Docker オプション コンポーネントは、デフォルトの Docker レジストリに加えて、Google Container Registry も使えるように構成されていることから、組織が管理するコンテナ イメージを使用できます。
Docker オプション コンポーネントを備えた Dataproc クラスタを作成する方法は次のとおりです。
Docker アプリケーションを実行すると、gcplogs ドライバを使用してログが Cloud Logging にストリーミングされます。
アプリケーションが Hadoop のどのサービスにも依存していない場合は、Kubernetes と Google Kubernetes Engine を確認して、コンテナをネイティブに実行してください。Dataproc の利用について詳しくは、こちらのドキュメントをご覧ください。
Dataproc での Apache Flink
Apache Beam と Apache Flink はストリーミング分析テクノロジーの中でも人気があります。Apache Flink は、ステートフルなコンピューティングを活用する分散処理エンジンです。また、Apache Beam は、バッチとストリーミングの処理パイプラインを定義する統合モデルです。Apache Flink を実行エンジンとして使用すれば、Google の Cloud Dataflow サービスに加え、Dataproc でも Apache Beam ジョブを実行できます。
Flink と Flink で実行する Beam は大規模で継続的なジョブに適しており、以下の機能を提供します。
バッチ処理とデータ ストリーミングのプログラムをサポートするストリーミング優先ランタイム
非常に高いスループットと低いイベント レイテンシを同時にサポートするランタイム
1 回限りの処理保証によるフォールト トレランス
ストリーミング プログラムでの自然なバック プレッシャー
メモリ内とコア外のデータ処理アルゴリズムを効率的かつ安全に切り替えるためのカスタムメモリ管理
YARN と Apache Hadoop エコシステムの他のコンポーネントの統合
Google Cloud の Dataproc チームが最近発表したように、Kubernetes 上で Flink オペレータをご利用いただけるようになりました。これにより、Kubernetes で Apache Flink ジョブを実行できるようになったことで、プラットフォーム依存が減り、ハードウェアの効率が向上するというメリットが得られます。
Flink の基本コンセプト
Flink クラスタは Flink JobManager と一連の Flink TaskManager で構成されます。YARN をはじめとする他の分散システムでの類似する役割と同様に、JobManager はジョブの受け入れ、リソースの管理、ジョブの監視などを担当します。TaskManager は実際のタスクの実行を担当します。
Dataproc で Flink を実行する場合、Flink のリソース マネージャーとして YARN を使用します。Flink ジョブはジョブクラスタとセッション クラスタの 2 つの方法で実行できます。ジョブクラスタの場合、YARN はジョブの JobManager と TaskManager を作成し、ジョブが終了するとクラスタを破棄します。セッション クラスタの場合、YARN は JobManager と少量の TaskManager を作成します。クラスタはユーザーにシャットダウンされるまで、複数のジョブを提供できます。
Flink を備えたクラスタを作成する方法
次のコマンドで作成を開始します。
Flink ジョブの実行方法
Flink を備えた Dataproc クラスタを開始した後、Flink ジョブクラスタを使って Flink ジョブを直接 YARN に送信できます。ジョブを受け入れると、Flink は YARN でこのジョブの JobManager とスロットの作成を開始します。完了するまで Flink ジョブは YARN クラスタで実行されます。その後、作成した JobManager がシャットダウンされます。ジョブのログは通常の YARN ログでご利用できます。次のコマンドで例として単語カウントを実行してみます。
Dataproc クラスタでは、デフォルトで Flink セッション クラスタを開始することはありません。代わりに Dataproc は Flink セッションを開始するスクリプト、「/usr/bin/flink-yarn-daemon」を作成します。
Dataproc の作成時に Flink セッションを開始する場合は、メタデータキーを使って許可します。
Dataproc 作成後に Flink セッションを開始する場合は、マスターノードで次のコマンドを実行します。
そのセッション クラスタにジョブを送信します。Flink JobManager の URL が必要です。
Java Beam ジョブの実行方法
Java で記述された Apache Beam ジョブは極めて簡単に実行できます。追加の構成は必要ありません。Beam ジョブを JAR ファイルにパッケージ化するのであれば、Flink 上で Beam を実行するために構成するべきことは何もありません。次のコマンドを使用できます。
Python で記述された Beam ジョブの実行方法
Python で記述された Beam ジョブの場合は、異なる実行モデルを使います。Dataproc の Flink で実行する場合は、Docker オプション コンポーネントも有効にする必要があります。クラスタの作成方法は次のとおりです。
また、apache_beam や apache_beam[gcp] など、Beam で必要になる Python ライブラリをインストールする必要があります。Flink のマスター URL を渡すとセッション クラスタで実行できます。URL を省略した場合、このジョブはジョブのクラスタモードを使用して実行する必要があります。
Python ジョブを記述したら、そのまま実行して送信します。
- 戦略的クラウド エンジニア Roderick Yao