web-dev-qa-db-ja.com

Sparkにはどのクラスタータイプを選択する必要がありますか?

私はApache Sparkを初めて使用し、Sparkは3種類のクラスターをサポートしていることを知りました。

  • スタンドアロン-意味Sparkは独自のクラスターを管理します
  • YARN-HadoopのYARNリソースマネージャーの使用
  • Mesos-Apacheの専用リソースマネージャープロジェクト

Sparkは初めてなので、最初にStandaloneを試してみるべきだと思います。しかし、どれが推奨されるのだろうか。たとえば、将来、大規模なクラスター(数百のインスタンス)を構築する必要がある場合、どのクラスタータイプに移動する必要がありますか?

68
David S.

Sparkに取り組んでいる人たちに答えるのが一番だと思います。したがって、 Learning Spark から

これが新しい展開の場合は、スタンドアロンクラスターから開始します。スタンドアロンモードはセットアップが最も簡単で、Sparkのみを実行している場合、他のクラスターマネージャーとほぼ同じ機能を提供します。

他のアプリケーションと一緒にSpark=)を実行したり、より豊富なリソーススケジューリング機能(キューなど)を使用したい場合、YARNとMesosの両方がこれらの機能を提供します。 Hadoopディストリビューション。

YARNモードとスタンドアロンモードの両方に対するMesosの利点の1つは、Spark Shellなどの対話型アプリケーションがコマンド間のCPU割り当てを縮小できる、きめ細かい共有オプションです。これは環境で魅力的です。複数のユーザーが対話型シェルを実行している場所。

いずれの場合も、ストレージへの高速アクセスのためにHDFSと同じノードでSparkを実行することをお勧めします。同じノードにMesosまたはスタンドアロンのクラスターマネージャーをインストールするか、ほとんどのHadoopディストリビューション既にYARNとHDFSを一緒にインストールします。

68
Justin Pihony

Spark Standalone Manager:Sparkに含まれるシンプルなクラスターマネージャー。これにより、クラスターのセットアップが簡単になります。デフォルトでは、各アプリケーションはクラスター内の使用可能なすべてのノードを使用します。

いくつかの メリット スタンドアロンおよびMesos上のYARN:

  1. [〜#〜] yarn [〜#〜]を実行するすべてのフレームワーク間でクラスターリソースの同じプールを動的に共有し、一元的に構成できます[〜#〜] yarn [〜#〜]

  2. [〜#〜] yarn [〜#〜]スケジューラーのすべての機能を利用して、ワークロードを分類、分離、および優先順位付けできます。

  3. Sparkスタンドアロンモードでは、各アプリケーションがクラスター内のすべてのノードでエグゼキューターを実行する必要があります。一方、YARNでは、使用するエグゼキューターの数を選択します

  4. [〜#〜] yarn [〜#〜]は、リクエストでラックとマシンのローカリティを直接処理します。これは便利です。

  5. リソース要求モデルは、奇妙なことに、Mesosで逆向きです。 [〜#〜] yarn [〜#〜]で、あなた(フレームワーク)は指定された仕様のコンテナをリクエストし、ローカリティプリファレンスを与えます。 Mesosでは、リソースの「オファー」を取得し、独自のスケジューリングポリシーに基づいてリソースを受け入れるか拒否するかを選択します。 Mesosモデルはほぼ間違いなく柔軟性がありますが、フレームワークを実装する人にとっては一見、より多くの作業が行われます。

  6. 大きなHadoopクラスターが既に配置されている場合は、[〜#〜] yarn [〜#〜]をお勧めします。

  7. Standalone managerでは、ユーザーが各ノードに共有シークレットを設定する必要があります。 Mesos ’デフォルトの認証モジュールであるCyrus SASLは、カスタムモジュールに置き換えることができます。 [〜#〜] yarn [〜#〜]は、認証、サービスレベルの承認、Webコンソールの認証、およびデータの機密性のセキュリティを備えています。 Hadoop認証では、Kerberosを使用して、各ユーザーとサービスがKerberosによって認証されていることを確認します。

  8. 3つのクラスターマネージャーすべてによって高可用性が提供されますが、Hadoop[〜#〜] yarn [〜#〜]は、個別のZooKeeperフェイルオーバーを実行する必要はありません。コントローラ。

便利なリンク:

spark ドキュメントページ

agildata 記事

61
Ravindra babu

スタンドアローンは、他の人が言及したように、sparkのみのワークロードがある場合にのみ使用されるべきであることが明らかです。

糸とメソの間で、考慮すべき1つのことは、mapreduceとは異なり、sparkジョブはエグゼキューターを取得し、ジョブの全ライフタイムにわたって保持するという事実です。 mapreduceでは、ジョブがライフタイムにわたってマッパーとリデューサーを取得および解放できます。

実行中のsparkジョブが長く、ジョブの存続期間中に最初に取得したすべてのリソースを完全に利用していない場合、それらのリソースを他のアプリと共有したい場合は、 MesosまたはSpark動的スケジューリング経由。 https://spark.Apache.org/docs/2.0.2/job-scheduling.html#scheduling-across-applications つまり、糸では、sparkにのみ動的に割り当てられます_は、sparkが提供する動的割り当てを使用することによります。 Mesosがそうする間、ヤーンはそれを妨げません。繰り返しますが、このポイントは、長時間実行するsparkアプリケーションがあり、それを動的にスケールアップおよびスケールダウンしたい場合にのみ重要です。

6
nir