Kubernetes で Apache Spark を実行する方法

Kubernetes で Apache Spark を実行する方法

[[416069]]

[51CTO.com クイック翻訳] Empathyのプラットフォームエンジニアリング技術責任者であるRamiro Alvarez Fernandez氏は、クラウドコンピューティングプロバイダーへの依存をなくし、Kubernetes上でApache Sparkを実行するためにSpark on Kubernetesを使用する方法を紹介し、このプロセスの課題、アーキテクチャ、ソリューションなどの詳細を共有しました。

課題

Empathy の場合、本番環境で実行されるすべてのコードはクラウドに依存しないものでなければなりません。 Empathy は、EMR (AWS 上)、Dataproc (GCP 上)、HDInsight (Azure 上) などの Spark ソリューションを使用することで、クラウド コンピューティング プロバイダーが提供するソリューションへの以前の依存を克服しました。

これらのクラウド コンピューティング プロバイダーのさまざまなソリューションにより、クラウド上に Spark を簡単に導入できます。ただし、企業が規模を拡大すると、いくつかの制限に直面し、次の問題に対処する必要があります。

  • 課題をどのように整理しますか?
  • Spark ジョブを配布するにはどうすればいいですか?
  • 夜勤の手配はどうすればいいですか?
  • ジョブコードはどこで設定されますか?
  • 変更はどのように伝播されますか?
  • ジョブ定義は再利用できますか?テンプレートとは何ですか?
  • コードでジョブを参照できますか?
  • ローカルホストからテストできますか?

これらは、Spark ジョブを実装する際に直面する一般的な問題です。 Kubernetes を使用してこれらの問題を解決すると、作業者の時間と労力を節約し、より良いエクスペリエンスを提供できます。

Kubernetes 上で Apache Spark を実行すると、次のような利点があります。

  • スケーラビリティ: 新しいソリューションは、あらゆる需要に対応できるように拡張可能である必要があります。
  • 信頼性: 新しいソリューションはコンピューティング ノードを監視し、障害が発生した場合にインスタンスを自動的に終了して置き換える必要があります。
  • 移植性: 新しいソリューションは、特定のクラウド コンピューティング プロバイダーへの依存を回避し、あらゆるクラウド コンピューティング ソリューションに展開できる必要があります。全体として、このアプローチにより、さまざまなクラウド コンピューティング サービス プロバイダーとの Spark ジョブの調整、配布、スケジュール設定について考える時間が節約されます。
  • コスト効率: 企業はクラウド コンピューティング プロバイダーのサービスを利用する必要がないため、コストを節約できます。
  • 監視: 新しいソリューションにはアドホック監視を含める必要があります。
  • Kubernetes エコシステム: 他のワークロードと同じ共通エコシステムを使用し、継続的なデプロイメント、RBAC、専用ノード プール、自動スケーリングなどを提供します。

メリットは、Kubernetes 上で実行される Apache Flink 向けの Empathy ソリューションと同じです。

Kubernetes 上で動作する Apache Spark

Apache Spark は、ビッグデータ処理用の統合分析エンジンであり、特に分散処理に適しています。 Spark は、現在最も大きなテクノロジートレンドの 1 つである機械学習に使用されます。

Apache Spark アーキテクチャ

Spark Submit を使用すると、Spark アプリケーションを Kubernetes クラスターに直接送信できます。プロセスは次のとおりです。

(1)Spark SubmitはクライアントからマスターノードのKubernetes APIサーバーに送信されます。

(2)Kubernetesは新しいSpark Driverポッドをスケジュールします。

(3)Spark DriverポッドはKubernetesと通信してSpark executorポッドを要求します。

(4)新しいエグゼキュータポッドはKubernetesによってスケジュールされます。

(5)新しいエグゼキュータポッドの実行が開始されると、KubernetesはSparkドライバーポッドに新しいSparkエグゼキュータポッドの準備ができたことを通知します。

(6)Sparkドライバーポッドは、新しいSparkエグゼキューターポッドでタスクをスケジュールします。

Spark 送信フローチャート

Spark アプリケーションは、SparkSubmit (通常の方法) または Spark Operator を使用してスケジュールできます。

スパーク送信

Spark Submit は、Spark アプリケーションを送信し、Spark クラスター上でアプリケーションを起動するためのスクリプトです。その優れた機能には次のようなものがあります:

  • Kubernetes バージョン: Kubernetes バージョンに依存しません。
  • ネイティブ Spark: Spark イメージに含まれています。
  • 非宣言的なセットアップ: ジョブを調整する方法の計画が必要です。
  • 必要な K8s リソースを定義します (構成マップ、ボリュームのマウント、アンチアフィニティの設定、ノード セレクタなど)。
  • CRD は不要: Kubernetes カスタム リソースは必要ありません。

スパーク演算子

Spark Operator プロジェクトは Google によって開発され、現在はオープンソース プロジェクトとなっています。 Kubernetes カスタム リソースを使用して、Spark アプリケーションのステータスを指定、実行、表示します。その優れた機能には次のようなものがあります:

  • 宣言型: カスタム リソースを介したアプリケーションの仕様とアプリケーション管理。
  • スケジュールされた再起動: 構成可能な再起動戦略。
  • Kubernetes リソースの自動定義: configmap とボリュームのマウント、ポッドの関連付けの設定などをサポートします。
  • 依存性注入: 依存性を直接注入します。
  • メトリクス: アプリケーション レベルのメトリクスとドライバー/エグゼキューターのメトリクスを収集して Prometheus にエクスポートすることをサポートします。
  • オープンソース コミュニティ: 誰でも貢献できます。

Spark Submit と Spark Operator の主なコマンド

上図は、Spark Submit と Spark Operator の主なコマンドを示しています。

Empathy のソリューションでは、ユースケースごとにカスタム Kubernetes マニフェストを作成する必要がある Spark Submit よりも高速な反復処理が可能な Spark Operator が好まれます。

ソリューションの詳細

課題セクションで提起された問題に対処するには、CNCF プロジェクトのサポートとともに、ArgoCD と Argo Workflows が役立ちます。たとえば、お気に入りの Spark アプリケーション ワークロードを Kubernetes からスケジュールして、Argo ワークフローを作成し、順次ジョブを定義できます。

フローチャートは次のとおりです。

  • Git で変更を定義します。
  • ArgoCD は、git の変更を Kubernetes クラスターに同期します (たとえば、Argo ワークフロー テンプレートを作成します)。
  • Argo Workflows テンプレートを使用すると、複数の Spark ジョブの入力をカスタマイズして構成を再利用し、Argo Workflows に基づいて夜間ジョブを作成できます。

ソリューションフローチャート

アルゴCD

ArgoCD は、Kubernetes 用の GitOps 継続的デリバリー ツールです。主な利点は次のとおりです。

  • GitOps: 望ましいアプリケーション状態を定義するための信頼できるソースとして Git リポジトリを使用します。
  • 宣言的なセットアップ: すべてを Git 上に配置します。
  • 追跡可能性と自動化: アプリケーションのデプロイメントでは、ブランチやタグなどの更新を追跡できます。アプリケーションのデプロイメントは、特定のターゲット環境に基づいて自動化されます。
  • WebUI: デプロイされたワークロードを検査するための見栄えの良いユーザー インターフェイス。
  • Kubernetes には Kustomize、Helm、ksonnet、jsonnet などが含まれており、選択することができます。

より詳細な情報は公式ドキュメントに記載されています。

アルゴワークフロー

Argo Workflows は、Kubernetes 向けのワークフロー ソリューションです。主な利点は次のとおりです。

  • ジョブ オーケストレーション: これにより、ジョブを順番にオーケストレーションしたり、カスタム DAG を作成したりできるようになります。
  • ワークフローのスケジュール設定: Cron ネイティブ。
  • Spark アプリケーション: 任意の Kubernetes クラスター上で Spark アプリケーションを簡単にオーケストレーションします。
  • ワークフロー テンプレート: さまざまなユース ケースに合わせてテンプレートを再利用します。入力はパラメータ化できます。
  • WebUI: ワークフローの進行状況を確認するための優れたビジュアル ユーザー インターフェイス。

より詳細な情報は公式ドキュメントに記載されています。

モニター

Prometheus にこれらのメトリックが取得されたら、それらを監視するための Grafana ダッシュボードが必要になります。 Apache Spark 用のカスタム Grafana ダッシュボードは、次のコミュニティ ダッシュボードに基づいています。

  • ArgoCDダッシュボード
  • Argoワークフローダッシュボード
  • Apache Spark オペレーターダッシュボード
  • Apache Spark アプリケーション ダッシュボード

結論

Empathy は、Kubernetes 上で Spark アプリケーション ワークフロー ソリューションを作成し、GitOps を使用して変更を伝播するために、Spark Operator、ArgoCD、および Argo Workflows を選択しました。この記事で紹介したセットアップは、約 1 か月間本番環境で使用されており、フィードバックは非常に良好です。すべてのユーザーがワークフローに満足しており、どのクラウド プロバイダーでも機能する単一のワークフローを使用することで、単一のクラウド コンピューティング プロバイダーへのロックインが排除されます。

自分でテストしたい場合は、これらの実践的な例に従って、このガイドで説明されているすべての設定を使用して、ローカルホストからいくつかの Spark アプリケーションをデプロイしてみてください: 実践的な Empathy リポジトリ。

まだ道のりは長いですが、さらなる利益が得られるでしょう。このイノベーションにより、企業がクラウドに依存しなくなることが期待されます。

原題: Kubernetes 上で Apache Spark を実行する、著者: Ramiro Alvarez Fernandez

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください。

<<:  Red HatとNutanixが協力してオープンハイブリッドマルチクラウドソリューションを提供

>>:  Dockerデプロイメントを試してみましょう

推薦する

anexia-it ドイツ CN2 レビュー: 最適化されたヨーロッパルートをご覧ください

ヨーロッパのCN2ラインについて聞いたことがある人もいるかもしれませんが、実際にテストした人はほとん...

3 つのグループ購入が 2 億クラブに加わる。グループ購入の再編が「3 を 1 つに」にアップグレード

共同購入戦争が始まって約半年、共同購入業界の構図が徐々に明らかになってきた。第三者共同購入ナビゲーシ...

Kubernetes RBAC 101: ヘルパーコマンドを使用してセキュリティ制御を強化する方法

今日は、クラスターのセキュリティ制御を強化するために不可欠な、重要でありながらあまり知られていない補...

コンプライアンスに関する懸念が、一部の主要産業におけるクラウドコンピューティングの成長を妨げている

金融・保険業界団体は現在、規制当局からより大きな圧力を受けています。 [[347264]]コンプライ...

知っておくべき6つのコンテナの概念

コンテナは企業に多大な価値と数多くのメリットをもたらすため、IT 環境を急速に変化させています。最新...

Sosowenwen は外部リンクを作成できますか?

Sosowenwen は外部リンクを作成できますか? 人によって答えは異なりますが、これらの人々は非...

動画著作権は過去3年間で浮き沈みを経験している。大手動画サイトは共同で価格を引き下げている。

2009年から2011年にかけて、映画やテレビドラマなどのニューメディア(動画サイト)の著作権価格は...

DevOps チームが Kubernetes のパフォーマンスを向上させる方法

著者 |サミュエル・アデバヨ徐潔成編纂現在でも、Kubernetes は開発者にとって最も需要のある...

ウェブサイトデータ分析:分析の前提 - データ品質 3

前回の 2 つの記事「分析の前提条件 - データ品質 1」と「分析の前提条件 - データ品質 2」で...

オープンソースのKubernetes監視ツールトップ10

[51CTO.com クイック翻訳] 現在、Kubernetes は GitHub 上で 5 億 8...

ニュース ウェブサイトが「様相を変える」: 編集者があなたに代わって 140 文字の Twitter メッセージを書きます。どれでも選択できます。

ウェブサイトで良い記事を見つけたら、通常どうしますか?そうです、多くの人がWeibo、WeChat ...

Kafka のクラスタ内レプリケーション機能の詳細な分析

Kafka は分散型のパブリッシュ/サブスクライブ メッセージング システムです。 LinkedIn...

マルチクラウド環境で自動化されたセキュリティ保護を実現するにはどうすればよいでしょうか?

サイバーセキュリティ企業 Valtix による最近の調査では、回答者の 51% が、マルチクラウド環...

新たなテクノロジートレンド: IoTからエッジコンピューティングまで

イノベーションは進歩を推進し、テクノロジーが急速に進化するにつれて、新しいトレンドが驚くべき方法で未...

ウェブサイトの革新の本質を理解するために基本に戻る

ウェブサイトは、ユーザーに覚えてもらうために何かユニークなものを提供する必要があります。同時に、ユー...