0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

だいたいゼロから始めるApache Zeppelin(Sparkインタープリタ編)

Posted at

シリーズのリンク

  1. 機能紹介編(一度はお読みください)
  2. インストール・起動・停止編
  3. 設定編
  4. Sparkインタープリタ編
  5. その他インタープリタ編(予定)

要約

  • SparkインタープリタではSparkとSpark SQLを実行できる。
  • 結果出力方法としてテーブル/棒グラフ/円グラフ/
    面グラフ/折れ線グラフ/散布図を選択できる。

Sparkインタープリタ設定

Sparkインタープリタ関連の設定方法には環境変数によるものと
プロパティによるものの2通りあります。
またSparkインタープリタでさせる処理が
依存するライブラリに対する独自の設定方法があります。
それぞれについて説明していきます。

環境変数による設定

Sparkをクラスタ上で実行する際には
環境変数HADOOP_CONF_DIR
SPARK_HOMEの設定が必須になります。

Apache ZeppelinにおけるSparkに関する環境変数は
下記のようにconf/zeppelin-env.sh内にある
コメントUse provided spark installation以下の
各環境変数に付けられたコメントアウトを外しつつ値を設定します。

設定できる環境変数は大体がspark-env.shに則ったものですが、
Apache Zeppelin独自のものもあります。

環境変数MASTERには以下の対応表に
則った設定値を指定することにより
対応するSparkの動作モードにできます。
また環境変数SPARK_SUBMIT_OPTIONSは文字通り
コマンドspark-submitのオプションとして渡されます。

入力値 動作モード
local[*] ローカルモード
spark://(ホストアドレス):(ポート) スタンドアローンモード
yarn Yarnモード
mesos://(ホストアドレス):(ポート) Mesosモード

yarnモードの場合にはインタープリタ設定画面で
Sparkのプロパティにspark.submit.deployModeを追加し、
以下のデプロイモードのいずれかを指定する必要があります。

プロパティspark.submit.deployModeに入力する値 デプロイモード
client クライアントモード
cluster クラスタモード
conf/zeppelin-env.sh
# 設定前
# export MASTER=                                # Spark master url. eg. spark://master_addr:7077. Leave empty if you want to use local mode.
(中略)
## Use provided spark installation ##
## defining SPARK_HOME makes Zeppelin run spark interpreter process using spark-submit
##
# export SPARK_HOME                             # (required) When it is defined, load it instead of Zeppelin embedded Spark libraries
# export SPARK_SUBMIT_OPTIONS                   # (optional) extra options to pass to spark submit. eg) "--driver-memory 512M --executor-memory 1G".
# export SPARK_APP_NAME                         # (optional) The name of spark application.
(中略)
# Options read in YARN client mode
# export HADOOP_CONF_DIR                        # yarn-site.xml is located in configuration directory in HADOOP_CONF_DIR.

# 設定後
export MASTER=(Sparkの動作モードに対応する設定値)                                # Spark master url. eg. spark://master_addr:7077. Leave empty if you want to use local mode.
(中略)
## Use provided spark installation ##
## defining SPARK_HOME makes Zeppelin run spark interpreter process using spark-submit
##
export SPARK_HOME=(Sparkがインストールされたディレクトリのパス)                             # (required) When it is defined, load it instead of Zeppelin embedded Spark libraries
export SPARK_SUBMIT_OPTIONS="--driver-memory 1g --driver-cores 1 --executor-memory 4g --num-executors 2 --executor-cores 2 --supervise --conf \"spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps\""                   # (optional) extra options to pass to spark submit. eg) "--driver-memory 512M --executor-memory 1G".
# export SPARK_APP_NAME                         # (optional) The name of spark application.
(中略)
# Options read in YARN client mode
export HADOOP_CONF_DIR=(Hadoopがインストールされたディレクトリにあるconfディレクトリへのパス)                        # yarn-site.xml is located in configuration directory in HADOOP_CONF_DIR.

プロパティによる設定

Apache Zeppelinのインタープリタ設定画面にて
Sparkインタープリタの設定一覧にスクロールして
下記画像のプロパティmasterの行のテキストボックスに
先述した対応表に則った設定値を入力することで
対応する動作モードを指定できます。

Sparkインタープリタの設定一覧

上記以外にも下記のようなプロパティを設定できます(一部抜粋)。

プロパティ名 説明 デフォルト値
master 動作モード local[*]
spark.cores.max Sparkの各種処理で使用するコア数(指定なしで使用可能な全コア数)
spark.executor.memory エグゼキュータで使用するメモリサイズ(例:512m,32g) 1g
zeppelin.pyspark.python ドライバープログラムとエグゼキュータ両方でpythonを呼び出す際のコマンド python
spark.executor.memory エグゼキュータで使用するメモリサイズ(例:512m,32g) 1g
zeppelin.spark.concurrentSQL 複数のSpark SQLを並列で実行させる場合はtrue false
zeppelin.spark.maxResult Spark SQLの最大表示行数 1000
zeppelin.spark.sql.interpolation 事前にz.put("(変数名)",(値))という処理で格納した値をSpark SQLに挿入できるようにする場合はtrue false

依存ライブラリ設定

依存ライブラリの設定をするには以前説明したインタープリタ設定
Dependenciesで設定する方法や
Sparkの設定ファイル${SPARK_HOME}/conf/spark-defaults.conf
各種設定をする以外にも、
先述した環境変数SPARK_SUBMIT_OPTIONSに対して
下記オプションを挿入することでもできます。

挿入するオプション オプション値 備考
--jars JARファイルへのパスのカンマ区切りの文字列 JARファイルは実行環境内に存在しなければならない
--packages Mavenにおけるライブラリを指定する文字列(groupId):(artifactId):(version)のカンマ区切りの文字列 ライブラリはMavenによって解決される
--files ファイル(JARファイル以外も可)へのパスのカンマ区切りの文字列 エグゼキュータのノードのみ有効

実行例の説明に移る前に

以降実行例の説明に移るのですが
それらに使われるデータはQuilt Dataというサイトで
検索した公開データを使わせていただきました。
関係者各位にお礼を申し上ます。

Spark実行

Sparkのコードを実行させるには
下記画面のようにノートブックのパラグラフの先頭行に
Sparkインタープリタを示す文字列%sparkを指定します。
あとSparkのコードを書くだけですが、
以前紹介したしたDynamic Formを挿入することもできます。
最後の行にz.show((データフレーム or データセット))という
メソッドを呼び出しています。
こうすることでApache Zeppelinの特徴であるリッチな結果出力が得られます。
Spark実行結果

結果出力方法は以下の種類があります。

  • テーブル
  • 棒グラフ
  • 円グラフ
  • 面グラフ
  • 折れ線グラフ
  • 散布図

なおこのような結果出力方法はSparkに限らず、
Spark SQL等の他データソースのインタープリタでも実現できます。
それぞれについて例示します。

テーブル

上記でも示しましたが出力方法として
テーブルを選択すると下記画像のようになります。
テーブルの各列をクリックすると
トグルで昇順/降順を選択できるソート処理が実行されます。

さらに各列の右側にある下矢印のボタンをクリックすると
下記画像のようにメニューが表示され、
そのメニューの項目Sort Ascending/
Sort Descendingを各列ごとに選択することにより
選択した複数列を組み合わせたソートが可能になります。

リンクsettingsをクリックすると下記画像のように
テーブル表示設定が選択できます。

選択できる項目は以下の通りです。
これらの項目のチェックボックスをチェックしたのち
ブラウザを再描画することで設定が初めて反映されます。

設定名 設定内容 備考
useFilter 各列上部に入力値を含んでいる行のみを表示するフィルタを追加 -
showPagination テーブル下部にページャーを追加 -
showAggregationFooter テーブル下部に集計結果を表示(するらしい) どうやっても表示されない・・・

テーブル例

棒グラフ

出力方法として棒グラフを選択すると下記画像のようになります。

リンクsettingsをクリックすると下記画像のように
上部に結果であるデータセット/データフレームを
構成するカラム名のラベルが表示され、
下部にそれらのドラッグ&ドロップ先となるテキストエリアを
入力領域とする各種設定が表示されます。

各種設定の内容は以下の通りです。

設定名 設定内容 備考
keys グラフのx軸を構成するカラム 複数カラム選択可
groups グラフ出力時の集計処理でグルーピング対象となるカラム 複数カラム選択可
values keysgroupsのカラムのもと集計された結果がグラフのy軸を構成するカラムとその集計方法 複数カラム選択可

なお注意点として
valuesに選択されたカラムは必ず集計処理にかけられる という点です。
つまり個々のレコードの値をグラフに
表示することは想定されていません。
この点はテーブル以外の他の結果出力方法でも
同様なのでご注意ください。

valuesでとりうる集計方法は以下の通りです。

  • 合計(sum)
  • カウント(count)
  • 平均(avg)
  • 最小(min)
  • 最大(max)

棒グラフ例

円グラフ

出力方法として円グラフを選択すると下記画像のようになります。

リンクsettingsをクリックすると棒グラフと同様の各種設定が表示されますが、
keysgroupsのどちらにカラム名のラベルをドラッグ&ドロップしても
同様にグルーピングされます(円グラフ右上にあるグループのラベルの表示が変わるだけです)。

下記画像のように円グラフ上にマウスオーバーすると
グループのラベル名と集計値並びにグループのカウントの全体に占める割合が表示されます。

各種設定の内容は以下の通りです。

設定名 設定内容 備考
keys グラフ出力時の集計処理でグルーピング対象となるカラム 複数カラム選択可
groups グラフ出力時の集計処理でグルーピング対象となるカラム 複数カラム選択可
values keysgroupsのカラムのもと集計された結果がグラフを構成するカラムとその集計方法 複数カラム選択可

valuesでとりうる集計方法は棒グラフと同じです。

円グラフ例

面グラフ

出力方法として面グラフを選択すると下記画像のようになります。

リンクsettingsをクリックすると棒グラフと同様の各種設定が表示され、
設定内容も同じものになります。

下記画像のように面グラフ上にマウスオーバーすると
その位置におけるx軸の値、各グループのラベル名と集計値が表示されます。

valuesでとりうる集計方法も棒グラフと同じです。

面グラフ例

折れ線グラフ

出力方法として折れ線グラフを選択すると下記画像のようになります。

リンクsettingsをクリックすると棒グラフと同様の各種設定が表示され、
設定内容も同じものになります。

下記画像のように折れ線グラフ上にマウスオーバーすると
その位置におけるx軸の値、各グループのラベル名と集計値が表示されます。

valuesでとりうる集計方法も棒グラフと同じです。

このように折れ線グラフは棒グラフ/面グラフとほぼ同様の性質を持っていますが、
ズーム機能がある点が異なります。
下記画像の左側にあるチェックボックスzoomをチェックすると、
グラフの下に押し潰されたようなグラフが表示されます。
このグラフの両側にあるタブをドラッグしながら左右に動かすと
端からタブまでの領域が実物のグラフに 表示されなく なります。
これにより上記領域以外がズームされて表示されるというわけです。

折れ線グラフ例

散布図

出力方法として散布図を選択すると下記画像のようになります。

リンクsettingsをクリックすると下記画像のように
他の結果出力方法とは異なる設定が表示されます。

各種設定の内容は以下の通りです。

設定名 設定内容 備考
xAxis グラフのx軸を構成するSpark実行時にグルーピングに用いたカラム 単一カラムのみ選択可
yAxis グラフのy軸を構成するSpark実行時にグルーピングに用いたカラム 単一カラムのみ選択可
group xAxisyAxisのカラム以外でSpark実行時にグルーピングに用いたカラム 単一カラムのみ選択可
size Spark実行時に算出した集計結果である数値 単一カラムのみ選択可

下記画像のように散布図上にマウスオーバーすると
直近の点におけるx軸/y軸の値、グループのラベル名が表示されます。
sizeで指定した集計結果の値は点の大きさとして反映されます。

注意点としては xAxis/yAxisに指定したカラムが取りうる値が
離散値でなければsizeがグレーアウトされてカラム名を指定できない
点です。
ここでいう離散値とは具体的には以下のものを指します。

  • 文字列型のカラム値
  • 他の点と重ならずに表示できる値の個数が全体の5%以上を占める数値型のカラム値

散布図例

Spark SQL実行

Spark SQLの実行例の説明の前に下記画像のように
Spark実行例のものと同じ公開データを一時ビューtrip_dataに格納します。
一時ビュー作成

あとは下記画面のようにノートブックのパラグラフの先頭行に
Spark SQLインタープリタを示す
文字列%spark.sqlを指定してSpark SQLを記述します。
このときもマークダウンやSQL向けのDynamic Formを挿入できます。
Spark SQL実行結果

つづき

次回はその他インタープリタ編(予定) です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?