CentOS6.6にApache Zeppelinを入れてチュートリアルをやる
明けましておめでとうございます。山田哲人が野球盤でチェンジアップを上手く拾ってヒットにしていたので今年も良い一年になりそうです。
今回はApache Zeppelinを試してみようと思います。
http://zeppelin-project.org/
Apache Zeppelinについて
- Apache Sparkのインタラクティブ環境でiPython Notebook的なアレ
- 組み込みで最初からSparkが入っているのが嬉しい
- 外部のSparkとも接続できるし、Amazon EMRに乗せる事もできる
依存関係のインストール
基本的には公式の設定そのままですが、Mavenでビルドを行う際にJavaがSSL接続でクラッシュしたのでNSSを最新に更新してあります。
参考:Troubleshooting story - Java HTTP client crashes on connections | BackSlasher
yum install fontconfig-devel.x86_64 yum install java-1.7.0-openjdk-devel yum install npm yum install wget yum install nss #mavenのインストール cd /opt wget http://www.eu.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz sudo tar -zxf apache-maven-3.3.3-bin.tar.gz -C /usr/local/ sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/local/bin/mvn
インストールできたか確認
java -version node --version mvn -version
ビルド
ここではSpark1.5系、Hadoop2.4系の基本構成でビルドを行います。CDHやMapReduceを使いたい場合などはhttps://github.com/apache/incubator-zeppelinを参考にしてください。
git clone https://github.com/apache/incubator-zeppelin cd incubator-zeppelin/ mvn clean package -Pspark-1.5 -Phadoop-2.4 -Pyarn -Ppyspark #結構時間かかる
起動
./bin/zeppelin-daemon.sh start
localhost:8080にアクセスしてトップページが見れる事を確認
チュートリアル
公式のTutorialをやってみます。
ここからはほぼ
Zeppelin Notebook Tutorial Walkthrough - Make Data Useful
と同じ内容です。ただ後述しますが1つだけ注意点があります。
データの準備
import sys.process._ "wget http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip" ! "mkdir data" ! "unzip bank.zip -d data" ! "rm bank.zip" !
実行してエラーが出ない事を確認
データ読み込み
import sys.process._ val zeppelinHome = ("pwd" !!).replace("\n","") val bankText = sc.textFile(s"$zeppelinHome/data/bank-full.csv") case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer) val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map( s=>Bank(s(0).toInt, s(1).replaceAll("\"", ""), s(2).replaceAll("\"", ""), s(3).replaceAll("\"", ""), s(5).replaceAll("\"", "").toInt ) ).toDF() bank.registerTempTable("bank")
注意!!
http://www.makedatauseful.com/zeppelin-notebook-tutorial-walkthrough/
の通りに
val sqlCon = new org.apache.spark.sql.SQLContext(sc)
を含んだコードを実行すると、登録したテーブルが別のパラグラフから読み込めなくなるバグが発生するようです。バグが発生した場合は対象行を削除して
./bin/zeppelin-daemon.sh restart
で再起動してからコードを再実行してください。
参考:apache spark - Zeppelin and SqlContext - Stack Overflow
データの可視化
%sql select age, count(1) value from bank where age < 30 group by age order by age
棒グラフや円グラフなど様々な可視化ができます。
終わり
以上です。簡単に終わると思ったらJavaのSSL接続クラッシュとかSQLContextとかで結構はまりました。インタラクティブ環境があるとモチベーションが上がるので、これでSparkの勉強が進む事を願っています。