web-dev-qa-db-ja.com

Spark Job?

私はすでにsparkインストールを完了し、マスターノードとワーカーノードを設定するいくつかのテストケースを実行しました。つまり、Sparkコンテキスト(SparkContextではありません)以下の質問があります

  • ジョブとドライバープログラムの違いは何ですか。
  • アプリケーション自体はドライバープログラムの一部ですか?
  • ある意味でSpark送信は仕事ですか?

Spark documention を読みましたが、それでもこのことは私には明らかではありません。

とは言っても、私の実装は、スパーク送信を行うspark jobs {programmatically}と書くことです。

可能であれば、いくつかの例を参考にしてください。とても助かります。

:親切にsparkリンクを投稿しないでください。理解をより明確にする必要があります。

30
chaosguru

まあ、用語は文脈に依存するため、常に難しい場合があります。多くの場合、「ジョブをクラスターに送信する」ために使用できます。これは、sparkに対してドライバープログラムを送信することになります。

とは言っても、Sparkには用語集から直接「job」の定義があります。

ジョブSpark=アクション(保存、収集など)に応答して生成される複数のタスクで構成される並列計算。この用語は、ドライバーのログで使用されます。

このコンテキストでは、次のことを行う必要があるとしましょう。

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

そう、

  1. driver programはこの8つのステップすべてを実行するコード全体です。
  2. 手順5で設定されたHTMLカード全体を生成するには、jobsaveアクション、変換ではありません)。手順8のcollectと同じ
  3. 他のステップはstagesに編成され、各ジョブは一連のステージの結果です。単純な場合、ジョブは単一のステージを持つことができますが、データの再パーティション化(ステップ3での結合など)またはデータの局所性を損なう何かが通常より多くのステージを表示します。ステージは、中間結果を生成する計算と考えることができ、実際には永続化できます。たとえば、RDD1を複数回使用するため、再計算を回避してRDD1を永続化できます。
  4. 上記の3つはすべて、基本的に、特定のアルゴリズムのlogicがどのように破損するかについて説明しています。対照的に、taskは特定のデータの一部です特定のエグゼキューターで、特定のステージを通過します。

物事がより明確になることを願っています;-)

40
Daniel Langdon

ちょっとここで私が前にやったことがあります、それがあなたのために働くことを願っています:

#!/bin/bash
# Hadoop and Server Variables
HADOOP="hadoop fs"
HDFS_HOME="hdfs://ha-Edge-group/user/max"
LOCAL_HOME="/home/max"

# Cluster Variables
DRIVER_MEM="10G"
EXECUTOR_MEM="10G"
CORES="5"
EXECUTORS="15"

# Script Arguments
SCRIPT="availability_report.py" # Arg[0]
APPNAME="Availability Report" # arg[1]

DAY=`date -d yesterday +%Y%m%d`

for HOUR in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
do
        #local directory to getmerge to
        LOCAL_OUTFILE="$LOCAL_HOME/availability_report/data/$DAY/$HOUR.txt"

        # Script arguments
        HDFS_SOURCE="webhdfs://1.2.3.4:0000/data/lbs_ndc/raw_$DAY'_'$HOUR" # arg[2]
        HDFS_CELLS="webhdfs://1.2.3.4:0000/data/cells/CELLID_$DAY.txt" # arg[3]
        HDFS_OUT_DIR="$HDFS_HOME/availability/$DAY/$HOUR" # arg[4]

        spark-submit \
        --master yarn-cluster \
        --driver-memory $DRIVER_MEM \
        --executor-memory $EXECUTOR_MEM \
        --executor-cores $CORES \
        --num-executors $EXECUTORS \
        --conf spark.scheduler.mode=FAIR \
        $SCRIPT $APPNAME $HDFS_SOURCE $HDFS_CELLS $HDFS_OUT_DIR

        $HADOOP -getmerge $HDFS_OUT_DIR $LOCAL_OUTFILE
done
0
Max