ZeppelinのSample

backupの意味もかねて

%spark

val dbDriver = "com.mysql.jdbc.Driver"
val dbUrl = "jdbc:mysql://<server name>:3306/<database name>?useUnicode=true&characterEncoding=UTF-8"
val dbUsername = "********"
val dbPassword = "********"

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.format("jdbc").options(Map("url" -> dbUrl, "dbtable" -> "<table name>", "driver" -> dbDriver, "user" -> dbUsername, "password" -> dbPassword)).load()

df.cache


%spark
//df.select("birthday").orderBy(desc("birthday")).show()
//val b = df.select(abs((substring($"birthday",1,3) * 10).cast("Int") - 2016) as "a").cube("a").agg( count("*") as "total" )
val b = df.select(abs((substring($"birthday",1,3) * 10).cast("Int") - 2016) as "a").cube("a").agg( count("*") as "total" )
//b.printSchema()
b.show()
//z.show(b)

%spark
val b = df.select(
    (datediff(current_date(), $"birthday")/365.25).cast("Int") as "a")
    .groupBy( ($"a"/10).cast("Int")*10 as "年代" )
    .agg( count("*") as "total" )
    .orderBy("年代")
//b.printSchema()
//b.show()
z.show(b)

えええ、、Link Paragraphはログインしている状態じゃないとみれないの。。。
うーん、、、

CentOS7.2へZeppelin0.7.0のインストール

Zeppelinになれてきたのでちゃんとした環境を作ろうと
サーバをちゃんと借りて再度、過去の手順を実施。

全然動かんし、Manualも0.6.0はほぼLink切れになり始めてるし。

というわけで、ダイジェストで振り返り。

過去記事
CentOS7にZeppelinインストール
Apache ZeppelinでMysql接続
ZeppelinでRを使う
ZeppelinでLogin機能をつける

で、実はMysqlの接続方法など思ったのと違ってたから変えたんだけど記事を忘れてた。
これが正式版だ!

一応、公式
これもバージョンアップしたらリンク切れになるんだろう。
ここのInstallを手順のベースにするのは変わらない。

事前準備

yum update
yum install git
yum install java-1.8.0-openjdk-devel
yum install npm
yum install fontconfig-devel

wget http://www.eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
sudo tar -zxf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
sudo ln -s /usr/local/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvn

wgetが利用しているCloudが腐っていたのか一時的に使えず。
IP-V6の問題かと思ったけど、再度OSから入れなおしたら動いたのでそんなことなさそう。

Zeppelinインストール

git clone https://github.com/apache/zeppelin.git
cd zeppelin/

mvn clean package -Pspark-1.6 -Phadoop-2.6 -Pyarn -Ppyspark -Psparkr -Pvendor-repo -Pmapr51 -DskipTests

# -Prオプション指定すると失敗する。RへのPathが通っていないことが原因だと思うが
# 解決方法が不明なのでsparkrが使えればいいやと諦め。

-Prを指定した時のエラー

[INFO] --- exec-maven-plugin:1.2.1:exec (default) @ zeppelin-zrinterpreter ---
+++ dirname R/install-dev.sh
++ cd R
++ pwd
+ FWDIR=/root/zeppelin/r/R
+ LIB_DIR=/root/zeppelin/r/R/../../R/lib
+ mkdir -p /root/zeppelin/r/R/../../R/lib
+ pushd /root/zeppelin/r/R
+ R CMD INSTALL --library=/root/zeppelin/r/R/../../R/lib /root/zeppelin/r/R/rzeppelin/
R/install-dev.sh: line 38: R: command not found

簡単に動作確認

./bin/zeppelin-daemon.sh start
systemctl status firewalld
firewall-cmd --list-all
firewall-cmd --add-port=8080/tcp --zone=public --permanent
firewall-cmd --reload

設定変更するファイルのバックアップなど

cp -p ./conf/zeppelin-site.xml.template ./conf/zeppelin-site.xml
cp -p ./conf/zeppelin-env.sh.template ./conf/zeppelin-env.sh
cp -p ./conf/shiro.ini ./conf/shiro.ini.org

Login機能の有効化

shiro.ini

[users]
#admin = password1, admin
#user1 = password2, role1, role2
#user2 = password3, role3
#user3 = password4, role2

[urls]
#/** = anon
/** = authc

[users]領域
デフォルトのユーザをコメントアウト。
その後独自のユーザパスワード、Roleを設定。

[urls]領域
anonをコメントアウト。authcのコメント解除。

zeppelin-site.xml

<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>false</value>
  <description>Anonymous user allowed by default</description>
</property>

annonymousの許可を無効化(valueをtrue→false)

jdbcドライバの有効化

事前にWebSiteのInterpreterからJdbcを選択し、artifactに「mysql:mysql-connector-java:5.1.39」追加する。
0.6.0で設定失敗したなーと思ってたところが、できないように修正されてる!
zeppelin-env.sh

export SPARK_HOME="/home/*UserName*/zeppelin/spark-dependencies/target/spark-bin-dist/spark-1.6.1-bin-without-hadoop"
export SPARK_SUBMIT_OPTIONS="--jars /home/*UserName*/zeppelin/local-repo/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar"

これでほぼ理想的な動きになった。
SSL接続もできるようにする必要もありそう。

追記。
結局SPARKは別途入れました。
また、sparkのinterpreterにmysql:mysql-connector-java:5.1.39を追加しました。
逆に、SPARK_HOMEは設定したものの、SPARK_SUBMIT_OPTIONSは未設定です。

wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-1.6.2/spark-1.6.2-bin-cdh4.tgz

さらに追記。
Rも結局入れました。
公式サイトを見よう。

yum install R R-devel libcurl-devel openssl-devel

+ devtools with `R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"`
+ knitr with `R -e "install.packages('knitr', repos = 'http://cran.us.r-project.org')"`
+ ggplot2 with `R -e "install.packages('ggplot2', repos = 'http://cran.us.r-project.org')"`
+ Other vizualisation librairies: `R -e "install.packages(c('devtools','mplot', 'googleVis'), repos = 'http://cran.us.r-project.org'); require(devtools); install_github('ramnathv/rCharts')"`

ZeppelinでLogin機能をつける

公式情報

./conf/shiro.ini

[urls]
/api/version = anon
#/** = anon
/** = authc

公式情報にある通り進める。
anonをコメントアウト
authcのコメントアウトを解除

./conf/zeppelin-site.xml

<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>false</value>
  <description>Anonymous user allowed by default</description>
</property>

zeppelin.anonymous.allowedの値をtrueからfalseに変更。

この後、zeppelinを再起動。

結果、shiro.iniの[users]領域にある値でログイン可能となる。
[main]や[roles]領域で細かな設定もできる様子。
とりあえず、defaultのユーザやadminをコメントアウト。

ZeppelinでRを使う

前回の記事

■インストールコマンド

mvn clean package -Pspark-1.6 -Phadoop-2.6 -Pyarn -Ppyspark -Pr -Psparkr -Pvendor-repo -Pmapr51 -DskipTests

Installで-Psparkオプションを指定したので、
SPARK_HOMEの設定は探し出して設定すればいいと思ってました。
なんで勝手に設定してくれないんだろうとも思ってました。

公式サイト

こちらを見るとどうやらSparkは対応していないようなので、このサーバにも入れる。
# InterpreterのSparkが有効なのはなんでだろうと思いつつ。。。

Spark Install

あれ、思ったよりすんなり動いた。
とくに記事にすることがない。。。

Apache ZeppelinでMysql接続

前回の記事

Apache Zeppelin Version 0.6.0をほぼ標準インストール。
DB接続して情報を抜きたかったが、psqlはもちろん、jdbc接続もPostgreSQLが標準設定。

なので、こちらの記事を参考にMysql接続設定を行う。

いきなり、Interpreterなんて選択肢ないけど。ということで探してみる。
どうやらAnonymousを選択すると出てくる。
zeppelin2

Interpreterに遷移後、右上にあるCreateボタンを押して作成。
zeppelinMysql

作成後、Mysqlを有効にする。
notebookからギアアイコンをクリック。
zeppelinInterpreter

色々間違えてることに気づきながらも進めてたけど、やっぱり動かない。
おかげでInterpreterの意味が分かってきたので良しとしよう。

公式サイトを参考に再度やり直し。

というわけで、Interpreter作り直し。
zeppelinMysqlJDBC
赤い部分はhostname。黒く塗りつぶしているところは、Database名を指定する。
Database名を設定しない場合は、Notepad側でUSE <database name>か、select * from <database name>.<tablename>でやれば問題なし。

2つめの注目点として、JDBCのグループで作成している。
MySqlの横に薄い文字で「%jdbc (default)」と書いている。
Notepadはこちらの値を指定すればよい。
公式情報によると、(default)の部分を変更すると自由に接続を変更できそう。
groupの設定は「%xxxx」を決めるためだと理解した。

次に、当たり前だけどPostgreSQLはDefaultで設定されているので
Mysql用のドライバが必要。
2016年7月2日で最新の5.1.39をartifactに設定。

で、最後にInterpreterの設定
interpreter
通常は追加したMysqlは一番下に来るが、%jdbcが重複しているので優先したいほうを上に持っていく。
または、不要なほうを無効にしてSave。
これで普通にselect文が実行できるようになる。