S-JIS[2014-08-16/2014-09-19] 変更履歴
Apache Sparkのシェル(REPL)のメモ。
|
Sparkシェルは、Sparkの命令をコマンドラインから入力して、その場で実行できるもの。
ScalaのREPLにSparkのライブラリーを入れて使えるようになっている。
Sparkをインストールした場所が「D:\scala\spark-1.0.2-bin-hadoop1」だったとすると、以下のコマンドでSparkシェルを起動できる。
> cd /d D:\scala\spark-1.0.2-bin-hadoop1 > bin\spark-shell
起動すると、(ログもいっぱい出るのだが、それを除くと)以下のような画面が表示され、コマンドを入力できるようになる。
Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.0.2 /_/ Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0) Type in expressions to have them evaluated. Type :help for more information. Spark context available as sc. scala>
Sparkシェルでは「import org.apache.spark.SparkContext._
」が実行されて、Sparkのクラスや暗黙変換の関数が使えるようになっている。
また、scという変数でSparkContextクラスのインスタンスが使えるようになっている。
Sparkシェルを終了するときは「:quit
」コマンド(ScalaのREPLを終了させるコマンド)を使用する。
scala> :q
SparkシェルでSparkの命令を実行してみる例。
scala> val file = sc.textFile("D:/tmp/log.txt") file: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12 scala> val filter = file.filter(_.contains("ERROR")) filter: org.apache.spark.rdd.RDD[String] = FilteredRDD[2] at filter at <console>:14 scala> println(filter.count) 〜ここで実際に処理が実行されてログがいろいろ出る〜 2
scala> case class Data(s: String, n: Int) defined class Data scala> val seq = sc.makeRDD(Seq(Data("a", 1), Data("b", 2), Data("c", 3))) seq: org.apache.spark.rdd.RDD[Data] = ParallelCollectionRDD[5] at makeRDD at <console>:14 scala> val sum = seq.map(data => data.n).reduce(_ + _) 〜ここで実際に処理が実行されてログがいろいろ出る〜 sum: Int = 6
Sparkシェルの起動オプション。[2014-09-03]
オプション | 説明 | 例 |
---|---|---|
--help |
ヘルプを表示する。 ただしこのヘルプはSpark一般のヘルプらしいので、Sparkシェルでは使えないものもある。[2014-09-19] |
--help |
--verbose |
デバッグ情報を表示する。 | --verbose |
--master マスターURL |
マスターURLを指定する。デフォルトは「local[*] 」。→SparkContext.master →マスターURLとして指定できる値 |
--master local[2] |
--deploy-mode デプロイモード |
driverをローカルで起動する(client)かワーカーマシン上で起動する(cluster)かを指定する。 デフォルトはclient。 |
--deploy-mode client |
--class クラス名 |
アプリケーションのmainクラスを指定するオプションだが、Sparkシェルでは使えない。 | |
--name 名前 |
アプリケーション名を指定するオプション(SparkConfのspark.app.name 相当
)だが、「Spark shell」という文字列で上書きされてしまう(苦笑) |
|
--jars ファイル群 |
jarファイルを指定する。 カンマ区切りで複数指定可。 →SparkContext.jars |
--jars hoge.jar |
--py-files ファイル群 |
Pythonのファイルを指定するらしい。 | |
--files ファイル群 |
各executorのワークディレクトリーに配布されるファイルを指定する。 カンマ区切りで複数指定可。 →SparkContext.files |
--files /tmp/text/a.txt |
--properties-file ファイル |
プロパティーファイルを指定する。 省略するとSPARK_HOME/conf/spark-defaults.confが読み込まれる。 (初期状態ではそのファイルは存在しないので何も読み込まれない) この中にSparkConfの spark.master 等を指定できる。(書き方はSPARK_HOME/conf/spark-defaults.conf.templateを参照) |
--properties-file /tmp/spark.conf |
--driver-memory メモリーサイズ |
driverのメモリーサイズを指定する。デフォルトは512M。 | --driver-memory 1024M |
--driver-java-options オプション |
driverのJavaオプションを指定する。 | |
--driver-library-path パス |
driverのライブラリーパスを指定する。 | |
--driver-class-path クラスパス |
driverのクラスパスを指定する。 (--jarsによって追加されたjarファイルは自動的にクラスパスに追加される) |
|
--executor-memory メモリーサイズ |
各executorのメモリーサイズを指定する。デフォルトは1G。 | --executor-memory 1024M |
その他に、Spark standaloneやMesos・YARN固有のオプションが存在する。
Sparkシェルを起動するとSparkUIというウェブサービスが実行されるので、ブラウザーでSparkシェル上の実行状況を見ることが出来る。[2014-08-17]
Sparkシェルを起動すると、起動ログに以下のようなログが出ている。
14/08/17 12:27:16 INFO SparkUI: Started SparkUI at http://hishidama-pc:4040
このログの「hishidama-pc」というのは、実行しているマシンに付けている名前。
Windows上のブラウザーだとこの名前は解決できないので、localhostに置き換える必要がある。
つまりブラウザーで「http://localhost:4040
」を指定すれば、SparkUIにアクセスできる。
Sparkシェルを終了させるとSparkUIにもアクセスできなくなる。