web-dev-qa-db-ja.com

Sparkの糸クライアントモードとは何ですか?

Apache Sparkは最近yarn-clientモードが利用可能な0.8.1にバージョンを更新しました。私の質問は、yarn-clientモードとはどういう意味ですか? :

Yarn-clientモードでは、アプリケーションはローカルで起動されます。ローカル/ Mesos /スタンドアロンモードでアプリケーションまたはスパークシェルを実行するのと同じです。起動方法も同様です。マスターURLを指定する必要がある場合は、代わりに「yarn-client」を使用してください

「ローカルで起動」とはどういう意味ですか?ローカルにどこ? Spark=クラスター?
糸単独モードとの具体的な違いは何ですか?

44
zxz

Sparkアプリケーションは、ドライバーと1つ以上のエグゼキューターで構成されます。ドライバープログラムは、Sparkアプリケーションを実行するためにエグゼキューターを調整するメインプログラム(SparkContextをインスタンス化する場所)です。エグゼキューターは、ドライバーによって割り当てられたタスクを実行します。

YARNアプリケーションには、糸クライアント、糸アプリケーションマスター、およびノー​​ドマネージャーで実行されているコンテナーのリストという役割があります。

SparkアプリケーションがYARNで実行されると、糸クライアントと糸アプリケーションマスターの独自の実装があります。

こうした背景から、主な違いはドライバープログラムの実行場所です。

  1. 糸スタンドアロンモード:ドライバープログラムは、糸アプリケーションマスターのスレッドとして実行されます。糸アプリケーションマスター自体は、クラスター内のノードマネージャーのいずれかで実行されます。 Yarnクライアントは、アプリケーションマスターからステータスを取得するだけです。このモードは、MRアプリケーションマスターがコンテナを調整してmap/reduceタスクを実行するmapreduceジョブと同じです。
  2. ヤーンクライアントモード:sparkアプリケーションを送信するコマンドを入力するヤーンクライアントでドライバープログラムが実行されています(ヤーンクラスター内のマシンではない場合があります)。このモードでは、ドライブプログラムはクライアントマシンで実行されますが、タスクはYARNクラスターのノードマネージャーのエグゼキューターで実行されます。

リファレンス: http://spark.incubator.Apache.org/docs/latest/cluster-overview.html

45
Mingjiang Shi

したがって、sparkには2つの異なるコンポーネントがあります。ドライバーとワーカーがあります。糸クラスターモードでは、ドライバーはデータノードでリモートで実行され、ワー​​カーは別のデータノードで実行されます。糸クライアントモードでは、ドライバーはジョブを開始したマシン上にあり、ワーカーはデータノード上にあり、ローカルモードでは、ドライバーとワーカーはジョブを開始したマシン上にあります。

.collect()を実行すると、ワーカーノードからのデータがドライバーに取り込まれます。基本的に最後の処理が行われる場所です。

私自身は、vpnで自宅にいるときはyarn-clusterモードが優れていることがわかりましたが、データセンター内からコードを実行しているときはyarn-clientモードが優れています。

ヤーンクライアントモードでは、ドライバーのワーカーノードが1つ少なくなります。

45
ben jarman

A Sparkで実行中のアプリケーション

糸クライアントモード:

  1. ドライバプログラムは、アプリケーションが起動されたクライアントマシンまたはローカルマシンで実行されます。

  2. リソースの割り当てはYARNリソースマネージャーによってデータノードのデータの局所性に基づいて行われ、ローカルマシンのドライバープログラムはspark cluster(ノードマネージャー)のエグゼキューターを制御します。

詳細については、このcloudera article を参照してください。

スタンドアロンモードと糸配置モードの違いは、

  1. リソースの最適化は、スタンドアロンモードでは効率的ではありません。
  2. スタンドアロンモードでは、ドライバープログラムは、データの局所性に関係なく、クラスターのすべてのノードでエグゼキューターを起動します。
  3. スタンドアロンは、sparkアプリケーションのみが実行されており、クラスターが他のジョブにリソースを効率的に割り当てる必要がないユースケースに適しています。

enter image description here

28
Krishna Reddy

sparkとyarnは分散フレームワークですが、役割は異なります:

糸はリソース管理フレームワークであり、各アプリケーションに対して、次の役割があります。

ApplicationMaster:単一のアプリケーションのリソース管理。Yarnにアプリケーションとモニターのリソースを要求/解放します。

試行:試行は、アプリケーションの全ジョブの一部を実行する通常のプロセスです。たとえば、複数のマッパーとリデューサーで構成されるmapreduceジョブは、各マッパーとリデューサーが試行です。

アプリケーションを糸にまとめる一般的なプロセスは次のとおりです。

  1. クライアントはアプリケーション要求をyarnに送信します。要求では、YarnはApplicationMasterクラスを知っている必要があります。 SparkApplicationの場合、org.Apache.spark.deploy.yarn.ApplicationMaster、MapReduceジョブの場合、org.Apache.hadoop.mapreduce.v2.app.MRAppMaster

  2. ヤーンはApplicationMasterプロセスにリソースを割り当て、クラスターノードの1つでApplicationMasterプロセスを開始します。

  3. ApplicationMasterの起動後、ApplicationMasterはこのアプリケーションのYarnにリソースを要求し、ワーカーを起動します。

分散コンピューティングフレームワークであるSparkの場合、コンピューティングジョブは多くの小さなタスクに分割され、各エグゼキューターが各タスクを担当し、ドライバーはすべてのエグゼキュータータスクの結果を収集し、グローバルな結果を取得します。 sparkアプリケーションには、複数のエグゼキューターを持つ1つのドライバーのみがあります。

そのため、Spark=がクラスター内のリソース管理ツールとしてYarnを使用している場合に問題が発生します。

  • ヤーンクラスターモードでは、Sparkクライアントはsparkアプリケーションをヤーンに送信します。両方ともSpark DriverとSparkエグゼキューターは糸の監督下にあります。糸の観点では、SparkドライバーとSparkエグゼキューターには違いはありませんが、通常のJavaプロセス、つまりアプリケーションワーカープロセス。したがって、クライアントプロセスが終了または強制終了されるなど、クライアントプロセスがなくなると、Spark yarn上のアプリケーションはまだ実行中です。

  • Yarn clientモードでは、Spark= Executorのみが
    糸の監督。 Yarn ApplicationMasterは、ただspark executorのリソースを要求します。ドライバープログラムは、yarnとは関係のないクライアントプロセスで実行されます。yarnにアプリケーションを送信するプロセスです。たとえば、クライアントを残す
    プロセスが終了し、ドライバーがダウンし、コンピューティングが終了しました。

11
wuchang

Yarn-clientモードでは、spark=アプリケーションはローカルマシンで実行されます。yarn-standaloneモードでは、sparkアプリケーションは次のようにYARNのResourceManagerに送信されます。 yarn ApplicationMaster、およびApplicationMasterが実行されているyarnノードでアプリケーションが実行されています(どちらの場合も、yarnはsparkのクラスターマネージャーとして機能します。アプリケーション(SparkContext)はタスクをyarnに送信します)。

5
Paul Wang

まず、実行中のSpark=スタンドアロンモードと実行中のSparkクラスターマネージャー(MesosまたはYARN)の違いを明確にしましょう。


スタンドアロンモードでSpark=を実行すると、次のようになります。

  • Sparkマスターノード
  • いくつかのSpark=スレーブノード、Spark master

そう:

  • マスターノードは、Sparkドライバーがエグゼキューターにタスクを送信し、リソースネゴシエーションも実行します。これは非常に基本的です。たとえば、デフォルトでは、各ジョブは既存のリソースをすべて消費します。
  • スレーブノードはSpark executorを実行し、ドライバーから送信されたタスクを実行します。

クラスタマネージャを使用する場合(最も一般的なケースであるYARNについて説明します):

  • 新しいアプリケーションと新しいリソース(YARNコンテナー)の要求を受け入れるYARNリソースマネージャー(常時実行)
  • 複数のYARN Nodeマネージャー(常時実行)。リソースマネージャーがコンテナーを割り当てるワーカーのプールで構成されます。
  • リソースマネージャーからコンテナーを要求し、割り当てられたコンテナーにコマンドを送信するアプリケーションマスター(YARNアプリケーションの実行中に実行)。

その場合、2つのモードがあることに注意してください:cluster-modeおよびclient-mode。あなたが言及したクライアントモードで:

  • Sparkドライバは、コマンドが実行されるマシンで実行されます。
  • アプリケーションマスターは、クラスター内の割り当てられたコンテナで実行されます。
  • Spark executorは割り当てられたコンテナで実行されます。
  • Sparkドライバーは、リソースをリクエストし、割り当てられたコンテナにコマンドを送信し、その結果を受け取り、結果を提供するようにアプリケーションマスターに指示する責任があります。

それでは、質問に戻ってください。

「ローカルで起動」とはどういう意味ですか?ローカルにどこ? Spark= cluster?

ローカルでは、コマンドを実行しているサーバーで(spark-submitまたはspark-Shell)。つまり、クラスターのマスターノードで実行したり、適切な構成が整っている限りクラスター外のサーバー(ラップトップなど)で実行したりできるため、このサーバーがクラスターと通信できるようになります。逆に。

糸単独モードとの具体的な違いは何ですか?

上記のように、違いは、スタンドアロンモードではクラスターマネージャーがまったくないことです。各モードの具体的なすべての違いのより詳細な分析と分類は、この 記事 で利用できます。

3
Dimos