ApacheSpark-デプロイメント
Spark-submitを使用するSparkアプリケーションは、Sparkアプリケーションをクラスターにデプロイするために使用されるシェルコマンドです。統一されたインターフェイスを介して、それぞれのクラスターマネージャーをすべて使用します。したがって、それぞれにアプリケーションを構成する必要はありません。
例
シェルコマンドを使用して、以前に使用したのと同じ単語数の例を見てみましょう。ここでは、sparkアプリケーションと同じ例を検討します。
サンプル入力
次のテキストは入力データであり、という名前のファイルは in.txt。
people are not as beautiful as they look,
as they walk or as they talk.
they are only as beautiful as they love,
as they care as they share.
次のプログラムを見てください-
SparkWordCount.scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark._
object SparkWordCount {
def main(args: Array[String]) {
val sc = new SparkContext( "local", "Word Count", "/usr/local/spark", Nil, Map(), Map())
/* local = master URL; Word Count = application name; */
/* /usr/local/spark = Spark Home; Nil = jars; Map = environment */
/* Map = variables to work nodes */
/*creating an inputRDD to read text file (in.txt) through Spark context*/
val input = sc.textFile("in.txt")
/* Transform the inputRDD into countRDD */
val count = input.flatMap(line ⇒ line.split(" "))
.map(word ⇒ (word, 1))
.reduceByKey(_ + _)
/* saveAsTextFile method is an action that effects on the RDD */
count.saveAsTextFile("outfile")
System.out.println("OK");
}
}
上記のプログラムをという名前のファイルに保存します SparkWordCount.scala そしてそれをという名前のユーザー定義ディレクトリに置きます spark-application。
Note − inputRDDをcountRDDに変換する際、(テキストファイルからの)行を単語にトークン化するためのflatMap()、単語の頻度をカウントするためのmap()メソッド、および各単語の繰り返しをカウントするためのreduceByKey()メソッドを使用しています。
この申請書を提出するには、次の手順を使用してください。のすべてのステップを実行しますspark-application ターミナルを介してディレクトリ。
ステップ1:SparkJaをダウンロードする
コンパイルにはSparkコアjarが必要です。したがって、次のリンクからspark-core_2.10-1.3.0.jarをダウンロードします。Sparkコアjarをダウンロードディレクトリから次の場所に移動します。spark-application ディレクトリ。
ステップ2:プログラムをコンパイルする
以下のコマンドを使用して、上記のプログラムをコンパイルします。このコマンドは、spark-applicationディレクトリから実行する必要があります。ここに、/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar Sparkライブラリから取得したHadoopサポートjarです。
$ scalac -classpath "spark-core_2.10-1.3.0.jar:/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar" SparkPi.scala
ステップ3:JARを作成する
次のコマンドを使用して、sparkアプリケーションのjarファイルを作成します。ここに、wordcount jarファイルのファイル名です。
jar -cvf wordcount.jar SparkWordCount*.class spark-core_2.10-1.3.0.jar/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar
ステップ4:Sparkアプリケーションを送信する
次のコマンドを使用してsparkアプリケーションを送信します-
spark-submit --class SparkWordCount --master local wordcount.jar
正常に実行されると、以下の出力が表示されます。ザ・OK次の出力を入力するのはユーザー識別用であり、それがプログラムの最後の行です。次の出力を注意深く読むと、次のようなさまざまなことがわかります。
- ポート42954でサービス「sparkDriver」を正常に開始しました
- MemoryStoreは容量267.3MBで開始しました
- http://192.168.1.217:4040でSparkUIを開始しました
- 追加されたJARファイル:/home/hadoop/piapplication/count.jar
- ResultStage 1(SparkPi.scala:11のsaveAsTextFile)は0.566秒で終了しました
- http://192.168.1.217:4040でSparkWebUIを停止しました
- MemoryStoreがクリアされました
15/07/08 13:56:04 INFO Slf4jLogger: Slf4jLogger started
15/07/08 13:56:04 INFO Utils: Successfully started service 'sparkDriver' on port 42954.
15/07/08 13:56:04 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:42954]
15/07/08 13:56:04 INFO MemoryStore: MemoryStore started with capacity 267.3 MB
15/07/08 13:56:05 INFO HttpServer: Starting HTTP Server
15/07/08 13:56:05 INFO Utils: Successfully started service 'HTTP file server' on port 56707.
15/07/08 13:56:06 INFO SparkUI: Started SparkUI at http://192.168.1.217:4040
15/07/08 13:56:07 INFO SparkContext: Added JAR file:/home/hadoop/piapplication/count.jar at http://192.168.1.217:56707/jars/count.jar with timestamp 1436343967029
15/07/08 13:56:11 INFO Executor: Adding file:/tmp/spark-45a07b83-42ed-42b3b2c2-823d8d99c5af/userFiles-df4f4c20-a368-4cdd-a2a7-39ed45eb30cf/count.jar to class loader
15/07/08 13:56:11 INFO HadoopRDD: Input split: file:/home/hadoop/piapplication/in.txt:0+54
15/07/08 13:56:12 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 2001 bytes result sent to driver
(MapPartitionsRDD[5] at saveAsTextFile at SparkPi.scala:11), which is now runnable
15/07/08 13:56:12 INFO DAGScheduler: Submitting 1 missing tasks from ResultStage 1 (MapPartitionsRDD[5] at saveAsTextFile at SparkPi.scala:11)
15/07/08 13:56:13 INFO DAGScheduler: ResultStage 1 (saveAsTextFile at SparkPi.scala:11) finished in 0.566 s
15/07/08 13:56:13 INFO DAGScheduler: Job 0 finished: saveAsTextFile at SparkPi.scala:11, took 2.892996 s
OK
15/07/08 13:56:13 INFO SparkContext: Invoking stop() from shutdown hook
15/07/08 13:56:13 INFO SparkUI: Stopped Spark web UI at http://192.168.1.217:4040
15/07/08 13:56:13 INFO DAGScheduler: Stopping DAGScheduler
15/07/08 13:56:14 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
15/07/08 13:56:14 INFO Utils: path = /tmp/spark-45a07b83-42ed-42b3-b2c2823d8d99c5af/blockmgr-ccdda9e3-24f6-491b-b509-3d15a9e05818, already present as root for deletion.
15/07/08 13:56:14 INFO MemoryStore: MemoryStore cleared
15/07/08 13:56:14 INFO BlockManager: BlockManager stopped
15/07/08 13:56:14 INFO BlockManagerMaster: BlockManagerMaster stopped
15/07/08 13:56:14 INFO SparkContext: Successfully stopped SparkContext
15/07/08 13:56:14 INFO Utils: Shutdown hook called
15/07/08 13:56:14 INFO Utils: Deleting directory /tmp/spark-45a07b83-42ed-42b3b2c2-823d8d99c5af
15/07/08 13:56:14 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
ステップ5:出力を確認する
プログラムが正常に実行されると、次の名前のディレクトリが見つかります。 outfile spark-applicationディレクトリにあります。
次のコマンドは、outfileディレクトリ内のファイルのリストを開いて確認するために使用されます。
$ cd outfile
$ ls
Part-00000 part-00001 _SUCCESS
出力をチェックするためのコマンド part-00000 ファイルは−
$ cat part-00000
(people,1)
(are,2)
(not,1)
(as,8)
(beautiful,2)
(they, 7)
(look,1)
part-00001ファイルの出力を確認するためのコマンドは次のとおりです。
$ cat part-00001
(walk, 1)
(or, 1)
(talk, 1)
(only, 1)
(love, 1)
(care, 1)
(share, 1)
'spark-submit'コマンドの詳細については、次のセクションを参照してください。
Spark-submit構文
spark-submit [options] <app jar | python file> [app arguments]
オプション
S.No | オプション | 説明 |
---|---|---|
1 | - 主人 | spark:// host:port、mesos:// host:port、yarn、またはlocal。 |
2 | --deploy-mode | ドライバープログラムをローカルで起動するか(「クライアント」)、クラスター内のワーカーマシンの1つで起動するか(「クラスター」)(デフォルト:クライアント)。 |
3 | - クラス | アプリケーションのメインクラス(Java / Scalaアプリの場合)。 |
4 | - 名前 | アプリケーションの名前。 |
5 | --jars | ドライバとエグゼキュータのクラスパスに含めるローカルjarのコンマ区切りのリスト。 |
6 | -パッケージ | ドライバーとエグゼキューターのクラスパスに含めるjarのMaven座標のコンマ区切りリスト。 |
7 | -リポジトリ | --packagesで指定されたMaven座標を検索するための追加のリモートリポジトリのコンマ区切りリスト。 |
8 | --py-files | PythonアプリのPYTHONPATHに配置する.zip、.egg、または.pyファイルのコンマ区切りのリスト。 |
9 | -ファイル | 各エグゼキュータの作業ディレクトリに配置されるファイルのコンマ区切りのリスト。 |
10 | --conf(prop = val) | 任意のSpark構成プロパティ。 |
11 | --properties-file | 追加のプロパティをロードするファイルへのパス。指定されていない場合、これはconf / spark-defaultsを検索します。 |
12 | --driver-memory | ドライバ用のメモリ(例:1000M、2G)(デフォルト:512M)。 |
13 | --driver-java-options | ドライバーに渡す追加のJavaオプション。 |
14 | --driver-library-path | ドライバに渡す追加のライブラリパスエントリ。 |
15 | --driver-class-path | ドライバーに渡す追加のクラスパスエントリ。 --jarsで追加されたjarは、クラスパスに自動的に含まれることに注意してください。 |
16 | --executor-memory | エグゼキュータあたりのメモリ(例:1000M、2G)(デフォルト:1G)。 |
17 | --proxy-user | アプリケーションを送信するときに偽装するユーザー。 |
18 | -ヘルプ、-h | このヘルプメッセージを表示して終了します。 |
19 | --verbose、-v | 追加のデバッグ出力を出力します。 |
20 | - バージョン | 現在のSparkのバージョンを印刷します。 |
21 | --driver-cores NUM | ドライバーのコア(デフォルト:1)。 |
22 | -監督する | 指定されている場合、失敗時にドライバーを再起動します。 |
23 | - 殺します | 指定された場合、指定されたドライバーを強制終了します。 |
24 | - 状態 | 指定されている場合、指定されたドライバーのステータスを要求します。 |
25 | --total-executor-cores | すべてのエグゼキュータの合計コア。 |
26 | --executor-cores | エグゼキュータあたりのコア数。(デフォルト:YARNモードでは1、またはスタンドアロンモードではワーカーで使用可能なすべてのコア)。 |