Apache Sparkは最近yarn-client
モードが利用可能な0.8.1にバージョンを更新しました。私の質問は、yarn-clientモードとはどういう意味ですか? :
Yarn-clientモードでは、アプリケーションはローカルで起動されます。ローカル/ Mesos /スタンドアロンモードでアプリケーションまたはスパークシェルを実行するのと同じです。起動方法も同様です。マスターURLを指定する必要がある場合は、代わりに「yarn-client」を使用してください
「ローカルで起動」とはどういう意味ですか?ローカルにどこ? Spark=クラスター?
糸単独モードとの具体的な違いは何ですか?
Sparkアプリケーションは、ドライバーと1つ以上のエグゼキューターで構成されます。ドライバープログラムは、Sparkアプリケーションを実行するためにエグゼキューターを調整するメインプログラム(SparkContext
をインスタンス化する場所)です。エグゼキューターは、ドライバーによって割り当てられたタスクを実行します。
YARNアプリケーションには、糸クライアント、糸アプリケーションマスター、およびノードマネージャーで実行されているコンテナーのリストという役割があります。
SparkアプリケーションがYARNで実行されると、糸クライアントと糸アプリケーションマスターの独自の実装があります。
こうした背景から、主な違いはドライバープログラムの実行場所です。
リファレンス: http://spark.incubator.Apache.org/docs/latest/cluster-overview.html
したがって、sparkには2つの異なるコンポーネントがあります。ドライバーとワーカーがあります。糸クラスターモードでは、ドライバーはデータノードでリモートで実行され、ワーカーは別のデータノードで実行されます。糸クライアントモードでは、ドライバーはジョブを開始したマシン上にあり、ワーカーはデータノード上にあり、ローカルモードでは、ドライバーとワーカーはジョブを開始したマシン上にあります。
.collect()を実行すると、ワーカーノードからのデータがドライバーに取り込まれます。基本的に最後の処理が行われる場所です。
私自身は、vpnで自宅にいるときはyarn-clusterモードが優れていることがわかりましたが、データセンター内からコードを実行しているときはyarn-clientモードが優れています。
ヤーンクライアントモードでは、ドライバーのワーカーノードが1つ少なくなります。
A Sparkで実行中のアプリケーション
ドライバプログラムは、アプリケーションが起動されたクライアントマシンまたはローカルマシンで実行されます。
リソースの割り当てはYARNリソースマネージャーによってデータノードのデータの局所性に基づいて行われ、ローカルマシンのドライバープログラムはspark cluster(ノードマネージャー)のエグゼキューターを制御します。
詳細については、このcloudera article を参照してください。
スタンドアロンモードと糸配置モードの違いは、
sparkとyarnは分散フレームワークですが、役割は異なります:
糸はリソース管理フレームワークであり、各アプリケーションに対して、次の役割があります。
ApplicationMaster:単一のアプリケーションのリソース管理。Yarnにアプリケーションとモニターのリソースを要求/解放します。
試行:試行は、アプリケーションの全ジョブの一部を実行する通常のプロセスです。たとえば、複数のマッパーとリデューサーで構成されるmapreduceジョブは、各マッパーとリデューサーが試行です。
アプリケーションを糸にまとめる一般的なプロセスは次のとおりです。
クライアントはアプリケーション要求をyarnに送信します。要求では、YarnはApplicationMasterクラスを知っている必要があります。 SparkApplicationの場合、org.Apache.spark.deploy.yarn.ApplicationMaster
、MapReduceジョブの場合、org.Apache.hadoop.mapreduce.v2.app.MRAppMaster
。
ヤーンはApplicationMasterプロセスにリソースを割り当て、クラスターノードの1つでApplicationMasterプロセスを開始します。
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にアプリケーションを送信するプロセスです。たとえば、クライアントを残す
プロセスが終了し、ドライバーがダウンし、コンピューティングが終了しました。
Yarn-clientモードでは、spark=アプリケーションはローカルマシンで実行されます。yarn-standaloneモードでは、sparkアプリケーションは次のようにYARNのResourceManagerに送信されます。 yarn ApplicationMaster、およびApplicationMasterが実行されているyarnノードでアプリケーションが実行されています(どちらの場合も、yarnはsparkのクラスターマネージャーとして機能します。アプリケーション(SparkContext)はタスクをyarnに送信します)。
まず、実行中のSpark=スタンドアロンモードと実行中のSparkクラスターマネージャー(MesosまたはYARN)の違いを明確にしましょう。
スタンドアロンモードでSpark=を実行すると、次のようになります。
そう:
クラスタマネージャを使用する場合(最も一般的なケースであるYARNについて説明します):
その場合、2つのモードがあることに注意してください:cluster-mode
およびclient-mode
。あなたが言及したクライアントモードで:
それでは、質問に戻ってください。
「ローカルで起動」とはどういう意味ですか?ローカルにどこ? Spark= cluster?
ローカルでは、コマンドを実行しているサーバーで(spark-submit
またはspark-Shell
)。つまり、クラスターのマスターノードで実行したり、適切な構成が整っている限りクラスター外のサーバー(ラップトップなど)で実行したりできるため、このサーバーがクラスターと通信できるようになります。逆に。
糸単独モードとの具体的な違いは何ですか?
上記のように、違いは、スタンドアロンモードではクラスターマネージャーがまったくないことです。各モードの具体的なすべての違いのより詳細な分析と分類は、この 記事 で利用できます。