S-JIS[2014-08-16/2014-09-19] 変更履歴

Sparkシェル

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
-h
ヘルプを表示する。
ただしこのヘルプはSpark一般のヘルプらしいので、Sparkシェルでは使えないものもある。[2014-09-19]
--help
--verbose
-v
デバッグ情報を表示する。 --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-memory 1G
--driver-java-options オプション driverのJavaオプションを指定する。  
--driver-library-path パス driverのライブラリーパスを指定する。  
--driver-class-path クラスパス driverのクラスパスを指定する。
(--jarsによって追加されたjarファイルは自動的にクラスパスに追加される)
 
--executor-memory メモリーサイズ executorのメモリーサイズを指定する。デフォルトは1G。 --executor-memory 1024M
--executor-memory 1G

その他に、Spark standaloneやMesos・YARN固有のオプションが存在する。


SparkUI

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にもアクセスできなくなる。


Spark目次へ戻る / Scalaへ戻る / 技術メモへ戻る
メールの送信先:ひしだま