コンテンツに移動
データ分析

Dataproc オプション コンポーネントが新たに Apache Flink と Docker をサポート

2020年10月19日
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 はまた、以下の機能をサポートするうえでも欠かせません。

  1. YARN を使ったコンテナの実行

  2. ポータブルな Apache Beam ジョブ

YARN でコンテナを実行すると、YARN のアプリケーションの依存関係を個別に管理できるだけでなく、YARN 上でコンテナ化サービスを作成することも可能です。こちらで詳細をご確認いただけます。ポータブルな Apache Beam を使ってジョブを Docker コンテナにパッケージ化し、Flink クラスタに送信します。これについては Beam のポータビリティの詳細をご覧ください。

Docker オプション コンポーネントは、デフォルトの Docker レジストリに加えて、Google Container Registry も使えるように構成されていることから、組織が管理するコンテナ イメージを使用できます。

Docker オプション コンポーネントを備えた Dataproc クラスタを作成する方法は次のとおりです。

読み込んでいます...

Docker アプリケーションを実行すると、gcplogs ドライバを使用してログが Cloud Logging にストリーミングされます。

アプリケーションが Hadoop のどのサービスにも依存していない場合は、KubernetesGoogle 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 ジョブを記述したら、そのまま実行して送信します。

読み込んでいます...

Dataproc の詳細については、こちらをご覧ください。

- 戦略的クラウド エンジニア Roderick Yao

投稿先