1. ホーム
  2. apache-spark

[解決済み] スパークジョブとは?

2022-03-02 01:12:17

質問

すでにsparkのインストールを終え、マスターノードとワーカーノードを設定していくつかのテストケースを実行しました。とはいえ、Sparkのコンテキスト(SparkContextではない)でジョブとは一体何を意味するのか、非常に太い混乱があります。私は以下の質問を持っています。

  • ジョブとドライバプログラムはどう違うのですか?
  • アプリケーション自体もドライバプログラムの一部ですか?
  • Sparkのサブミットはある意味仕事?

を読みました。 Sparkのドキュメント しかし、このことはまだ私にとって明確ではありません。

とはいえ、私の実装では、spark job{programmatically}を書いて、それをspark-submitにすることにしています。

可能であれば、いくつかの例で親切に助けてください。それは非常に役立つだろう。

備考 : 私はすでにそれを試しているので、スパークリンクを投稿しないように注意してください。たとえ質問が素朴に聞こえるとしても、私は理解する上でより明確さが必要です。

どのように解決するのですか?

用語は文脈に依存するため、常に難しいものです。多くの場合、quot;submit a job to a cluster"で、sparkではdriver programをsubmitすることになるでしょう。

とはいえ、Sparkは用語集から直接、"job"の独自の定義を持っています。

<ブロッククオート

ジョブ 複数のタスクで構成される並列計算。 Sparkのアクション(例:save、collect)に反応して起動します。 この用語はドライバのログで使用される。

そこで、この文脈で、次のようなことをする必要があるとします。

  1. 人名と住所のファイルをRDD1に読み込む
  2. 人名と電話番号のファイルをRDD2にロードします。
  3. RDD1とRDD2を名前で結合し、RDD3を得る
  4. RDD3にマップして、各人のHTMLプレゼンテーションカードをRDD4として取得する
  5. RDD4をファイルに保存する。
  6. RDD1をマップして、住所から郵便番号を抽出し、RDD5を得る
  7. RDD5 を集計し、各郵便番号に何人住んでいるかを RDD6 として取得する。
  8. RDD6を収集し、これらの統計情報を標準出力に表示します。

だから

  1. ドライバプログラム は、このコード全体であり、8つのステップをすべて実行する。
  2. ステップ5でHTMLカードセット全体を生成するのは 仕事 (を使用しているため明確です)。 セーブ アクションで、変換ではありません)。同じく 集める ステップ8で
  3. その他のステップは、以下のように整理されます。 ステージ 各ジョブは、一連のステージの結果である。単純なものであればジョブは1つのステージで済みますが、データを再分割する必要があったり(例えばステップ3の結合)、データの局所性を壊すようなことがあると、通常はより多くのステージが出現します。ステージは中間結果を生成する計算と考えることができ、実際に永続化することができます。例えば、RDD1は複数回使用することになるので、再計算を避けるために永続化することができます。
  4. 上記3つは、基本的に ロジック のアルゴリズムが壊れてしまう。これに対して タスク は、特定の データの一部 は、特定のステージ、特定のエグゼキュータを通過することになります。

これで分かりやすくなったでしょうか;-)