Dataproc 2.0 での Spark 3 と Hadoop 3 について
Google Cloud Japan Team
※この投稿は米国時間 2020 年 6 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
Dataproc では、オープン ソースによるデータと分析の処理をクラウド上で高速、簡単かつ安全に実行できます。また、カスタム マシンタイプで約 90 秒以内に完全構成済みの自動スケーリング クラスタを提供することができます。このため、Dataproc はオープンソース エコシステムの最新機能のテストに最適です。
Dataproc は Hadoop や Spark のクラスタで通常使用されるコア ソフトウェアのバンドルと関連付けられたイメージ バージョンを提供します。Dataproc オプション コンポーネントを追加すると、このバンドルを拡張して Anaconda、Druid、HBase、Jupyter、Presto、Tanager、Solr、Zeppelin、Zookeeper などの他の一般的なオープンソース テクノロジーを使用することができます。初期化アクションでデプロイできる独自の構成を使用すると、クラスタをさらにカスタマイズできます。Dataproc 初期化アクション GitHub リポジトリには、Kafka などのインストールに役立つスクリプトが多数提供されていますので、ぜひご確認ください。
Dataproc 2.0 はテスト用としてご利用いただける最新のオープンソース ソフトウェア セットで、(プレビュー イメージに含まれています。プレビュー イメージは Dataproc の用語で、イメージが一般提供サービス内の新しいバージョンであることを表します)過去の OSS 機能に比べて一段と機能が増加しており、2016 年前半に Dataproc が一般提供サービスになって以来、初めての新しいバージョン トラックです。Dataproc 2.0 の重要なポイントをいくつかご紹介します。
Spark 3 をプレビューで使用可能
Apache Spark 3 は Apache Spark の待望の次期バージョンで、まだ本番環境のワークロードには推奨されていません。オープンソース コミュニティではプレビュー段階にとどまっています。ただし、Spark 3 で強化された機能の利用をお考えの方は、Dataproc 2.0 で分離クラスタを使用することによりジョブの移行作業を開始できます。
新しい Spark 3 の目玉は「パフォーマンス」です。内部処理の変更により、速度とパフォーマンスが大幅に改善されます。パフォーマンス最適化の例として以下が挙げられます。
- アダプティブ クエリ: Spark では実行中でもクエリプランを最適化できるようになりました。これはクエリ処理の前に適切な統計情報が不足しがちなデータレイク クエリにおいて、大きなメリットです。
- 動的パーティション プルーニング: 1 つのファクト テーブルと多くのディメンション テーブルを使用するデータ ウェアハウス クエリのようなクエリにおいては、不要なデータスキャンを避けることが重要です。Spark 3 では、このデータ プルーニング手法が導入されています。
- GPU アクセラレーション: NVIDIA はオープンソース コミュニティと協力して、GPU を Spark のネイティブ処理に取り入れています。これにより、Spark は必要に応じて GPU に処理を渡すことができます。
パフォーマンスに加えて、バージョン 3 では Kubernetes 上で実行される Spark が改善され、シャッフル機能が強化されたことによって動的スケーリングが可能になりました。このため、Dataproc ジョブを Google Kubernetes Engine(GKE)で実行することが、Spark 3 へジョブを移行する多くのケースで最適なオプションになります。
ソフトウェアのメジャー バージョンのオーバーホールでは、アップグレードに伴って一部の機能が非推奨となることがつきものであり、Spark 3 も例外ではありません。ただし、機能が非推奨になったことによってメリットを得られる場合もあります。
- MLLib(耐障害性分散データセット(RDD)バージョンの ML)は非推奨になりました。大半の機能は存続するものの、開発やテストは行われなくなるため、Spark 3 への移行時に MLLib から移行することをおすすめします。MLLib から移行する場合、代わりにディープ ラーニング モデルが有効かどうかを評価する機会にもなります。Spark 3 では、ML パイプラインから GPU で実行されるディープ ラーニング モデルへのブリッジが改善される予定です。
- GraphX は非推奨となり、新しいグラフ作成コンポーネントである SparkGraph に置き換えられます。SparkGraph は、GraphX で以前提供されていたものよりもはるかに機能豊富なグラフ言語である Cypher をベースにしています。
- DataSource API は DataSource V2 になり、さまざまなデータソースへの書き込み、データソースへのプッシュダウン、Spark 内のデータカタログを一元的に提供します。
- Python 2.7 はサポートが終了し、Python 3 に置き換えられます。
Hadoop 3 が利用可能に
Dataproc 2.0 バージョン トラックのもう 1 つのメジャー バージョン アップグレードは Hadoop 3 です。これは HDFS と YARN の 2 つの部分で構成されています。
オンプレミスの Hadoop デプロイメントの多くは、HDFS フェデレーション、複数のスタンバイ ネームノード、HDFS 消去エンコーディング、YARN のグローバル スケジューラといった 3.0 の機能の恩恵を受けています。Hadoop のクラウドベース デプロイメントでは、HDFS と YARN への依存度が減少する傾向があります。HDFS ストレージは、ほとんどの状況で Cloud Storage に置き換えられます。YARN は引き続きクラスタ内のリソース スケジューリングに使用されていますが、クラウドで Hadoop を使用するお客様はクラスタや VM レベルでのジョブとリソースの管理を検討し始めています。Dataproc は単一クラスタの YARN キューを複雑なワークロード管理ポリシーで構成するだけではなく、現在取り組んでいるタスクに適したサイズのジョブ限定クラスタを提供します。
ただし、Google Cloud に移行する前にアーキテクチャに変更を加えたくない場合は、オンプレミスの Hadoop 3 インフラストラクチャを Dataproc 2.0 にリフト&シフトし、現在のすべてのツールとプロセスが機能するように維持することもできます。その後、適切なワークロードに対して新しいクラウド手法を徐々に導入することができます。
クラウド テクノロジーに移行する場合、Hadoop 3 の機能の多くがその用途を特殊なユースケースに限定されてしまう可能性がありますが、それでも、既存の多くの Dataproc のお客様にとって魅力的かつ便利な Hadoop 3 の機能がいくつかあります。
- YARN スケジューラでの GPU のネイティブ サポート
このサポートにより、YARN は GPU が必要な場合、使用に適したノードを識別し、共有クラスタの GPU リソースを的確に分離して、利用可能な GPU を自動検出できます(以前は管理者が GPU を構成する必要がありました)。GPU 情報は YARN UI にも表示され、Dataproc コンポーネント ゲートウェイから簡単にアクセスできます。
- YARN コンテナ化
Spark や Flink をはじめとする最新のオープンソース コンポーネントは Kubernetes をネイティブ サポートしており、本番環境レベルのコンテナ オーケストレーションを提供します。しかし、YARN から Kubernetes にまだ移植されていない Hadoop のレガシー コンポーネントはまだまだあります。Hadoop 3 の YARN コンテナ化は、こうしたコンポーネントを Docker コンテナや最新の CI / CD パイプラインで管理するのに役立ちます。この機能は HBase などの稼働状態を維持する必要があり、ソフトウェアをさらに分離することでメリットが得られるアプリケーションに大いに有用です。
Dataproc 2.0 での他のソフトウェア アップグレード
Dataproc 2.0 では、他にも以下のようなさまざまなアップグレードが利用できるようになっいます。
ソフトウェア ライブラリ
共有ライブラリ
コンポーネントのアップグレードに伴い、ランタイムの非互換性の問題を回避し、新しい OSS サービスの機能をすべて利用できるようにするため、他の共有ライブラリもアップグレードされています。
また、Dataproc 2.0 では以前の構成設定が多数変更され、OSS ソフトウェアと設定が Google Cloud 向けに最適化されています。
開始方法
次のコマンドを実行して Dataproc 2.0 クラスタを作成するだけで、Spark 3 と Hadoop 3 を使い始めることができます。
gcloud dataproc clusters create ${CLUSTER_NAME} \
--region={REGION} \
--image-version=preview
開発環境から本番環境に移行する準備ができたら、Cloud Dataproc を本番環境で実行するためのベスト プラクティス 7 選についてこちらでご確認ください。
- By プロダクト マネージャー Christopher Crosbie、ソフトウェア エンジニア Igor Dvorzhak