※筆者のような初心者レベルの記事です

SparkをJupyterで使いたい。
が、なんか環境構築がうまくいかない。最近の記事もない。
というかインストールはできたけどロクに動いてない。
環境変数も多分合ってる気がするんだけど、、、、これわっかんねー
となってしまった人向け。

スタート地点

    • Jupyter、Python3、Spark(2.2.0)、Scala(2.11.8)、Sbt、JDK8、Dockerをインストール済み

 

    • 非Anaconda

 

    • JupyterでPython3が調子よく動いている

 

    • spark-shellが調子よく動いている

 

    筆者は怠け者の上、エンジニアリング力が低く、環境構築でよくギブアップしそうになる(する)<重要>

Notebookの選択肢

    • Jupyter + Pyspark

 

    • Zeppelin

 

    Jupyter + Toree

他にもありますがこの3つをやりました。

Jupyter + Pyspark

pip install pysparkで終わったはず。
MacとかPythonのきっちり動くパッケージマネージャは自分のようなザコにとって神に等しい存在です。

実務的にはこれで全然いいのですが、pysparkは、

    • 今教科書にしたいと思っている本がscalaで書かれている

 

    scala使えるとなんかかっこいい気がする

といういかにもザコっぽい動機から一旦保留しました。
最終的はpyspark使う予定なんですが、scala触りたいので回り道をします。

Zeppelin

ここからだんだん本題です。
↓公式の記事まんまでよかったのですが、しょうもないところで時間を食いました。

つまずいたところ

localhost:8080をChromeで開いたとき、ERR_CONNECTION_REFUSEDになってZeppelinが表示されない。
(画面をきちんと見ていなかったため、CONNECTION_REFUSEDの文字に気づかず、「あ゛あ゛!?」ってなって、あれこれいじくり回していた)

InstallがSuccessで終わって、startとstopのときに、

Zeppelin start [ OK ]
Zeppelin stop [ OK ]

ってだけ出るようになったら知る限りちゃんと動いてます。
逆に環境変数とか下手にいじって怪我したときは、変なログがちょろっと出た。

解決策

Safariで開いたら動きました(ニッコリ
ザコなのでCONNECTION_REFUSEDに対応するという発想にはなりません。

ただ、Jupyterに比べてUIが使いづらいのと、foreach{println()}がなぜか出力されないので、Jupyter+Toreeに鞍替えしてみることにしました。

Jupyter + Toree

記事を書くことにした理由。
これですごく時間がかかってしまった。

つまずいたところ

記事を探すと、pip install toreeして、sudo jupyter toree install –replace –spark_home=”xxx”しろってのがちょこちょこ見つかる。

その通りインストールするととりあえずJupyter上にscalaカーネルが登録されて、ノートブックが作れるようになる。
ノートブックを起動すると、kernel呼び出してます→Trustedってとりあえず出るんだけど、そのまま応答しないで以下のエラー。

    • Java NoSuchMethodError(Hashset的なやつが見つからないらしい)

 

    からのワーニング: waiting timeout

で、オプション変えてみたり、環境変数変えてみたり、あれこれやって全然うまくいかず。

解決策

↓これが答えでした。自分でビルドしろとのこと。

記事内で紹介されているバグ報告
https://issues.apache.org/jira/browse/TOREE-336

pipで配布されるファイルが最新のspark/scalaに対応してないらしく、それを使う場合は今でも自分でmakeしないとダメだそうで。
というわけで、記事の通りにgitでクローンを持ってきて、Makefileを編集して自分でmakeします。

git clone git@github.com:apache/incubator-toree.git

ただ、Makefileはすでにspark/scalaの最新版に合わせて編集されていたので、やることなし。
(使用中のバージョンは、spark: 2.2.0、scala: 2.11.8)

APACHE_SPARK_VERSION?=2.2.0
SCALA_VERSION?=2.11
make release

makeの途中で「Jitpack.ioがないよエラー」が出ますが、これは無視してもうまいこと処理してくれました。

次に「Dockerのデーモンがいないよエラー」が出たので、これは出ないようにあらかじめDockerを起動してネットに繋いでから実行してください。

最後に「jovyanの権限がねーと必要なディレクトリにアクセスできんぞエラー」と「お前んとこのpipのバージョン古いんじゃねーのエラー」が出ます(多分Docker側の話だと思う)。
最後の最後でエラーかいという気持ちと、ジョブヤン誰という気持ちをひとまず抑えて、インストール用ファイル dist/toree-pip/toree-x.x.x.dev1.tar.gz が生成されていることを確認すると、問題なく生成されていると思うので、これをインストールして終わりです。

pip install dist/toree-pip/toree-x.x.x.dev1.tar.gz

Jupyterを起動するとscalaカーネルが登録されています。
適当にval作ってprintlnしたり、テキストデータをRDDにしたり、DataFrameにしたり、filterしたりmapしたりという操作ができることを確認しました。
(クラスタ云々については確認していません。)

微妙なところ

こうしてひとまず使える状態になったのですが、やっぱりZeppelinと同じで、foreach{println()}がなぜか出力されませんでした。
(対処法をご存知の方がいたら、コメントをいただけるとうれしいです )

後日追記
printはコンソール側に出力されることがわかりました。

↓あと、ここらへんが微妙にうまくいってませんでした。起動直後に「sc」を実行したときの出力とか。

こっちは困るまでは放置かなー。

おわりに

というわけで自分はJupyter+Toreeを動かすのにやたらと苦戦したので、(内容的には恥ずかしいレベルだと思いますが)同じような面倒に合う人が減ればいいなと思いメモを残しました。
それではみなさま快適な Spark/Jupyter 生活をお送りください。

广告
将在 10 秒后关闭
bannerAds