S3+Apache Zeppelinでお手軽データ分析①
コラビットの川原です。
今回はApache Zeppelinを使ってS3からデータを読み取り、分析を行う方法について紹介したいと思います。
少し長くなりますので①準備編と②分析編にわけて投稿します。
Zeppelinとは?
Zeppelinとはツェッペリンと呼びます
Pythonで分析を行う場合での、対話型実行環境とい言えばJupyter Notebookが有名ですが、Apache Sparkで分析を行う場合はこのApache Zeppelinが便利です。
今回はローカル環境で実行しますが、EMR(Amazon Elastic MapReduce)でクラスタを作って簡単に分散環境での分析を行うこともできます。
そもそも、sparkではspark-shellという対話型実行環境が利用できます。
しかし、Zeppelinを使うと下記のようなメリットがあります。
- 実行結果をノートとして保存できるので、過去の分析の振り返りがし易い
- spark-sqlのクエリを書くと、それを簡単にグラフ描写(散布図や折れ線チャートなど)できるので便利
- インタプリタを編集することで、必要なライブラリを事前に読み込んで置くことができる
いいことづくしです。
弊社の分析実務の流れは下記のように行なっています。
- とりあえず、ノートブックでロジックを書いて検証。
- その後、アプリケーション実装。
- jar化してEMR上で定期実行。
モデルを作る上では、処理を部分的に切り出して、その部分だけ実行して検証したいことがよくあります。
「このロジックだけ、実行したいんだけどなぁ。。」みたいに思う時です。
そのような時にZeppeinは活躍し、時間の節約につながります。
Zeppelinのインストール
macOSの場合homebrewでインストールするのが簡単です。
[bash gutter=”false”]
brew install apache-zeppelin
[/bash]
インストールできたら、Zeppelinのホームディレクトリに移動して起動コマンドを実行します
[bash gutter=”false”]
# versionの部分のディレクトリ名は必要に応じて変更してください
cd /usr/local/Cellar/apache-zeppelin/0.7.3/
./bin/zeppelin-daemon.sh restart
[/bash]
これで http://localhost:8080 にアクセスすればZeppelinのダッシュボードを目にすることができます。
ノートを作成
グローバルナビの「Notebookのメニュー」=> 「Create new Note」で新しいノートを作成することができます。
ノートには名前をつけることができます。test/foo/bar のように/をつけた場合ディレクトリのようにノートを管理することもできます。
作成すると、空のテキストエリアがあると思います。Zeppelinではこれをパラグラフと読んでいます。
ここに処理内容を書いていきます。
S3の設定
今回、S3から読み込んだ分析を行うので先にその設定を行います。
グローバルナビの右上の「anonymous」 => 「interpreter」と移動し、sparkのinterpreterをeditします。
ここではsparkの実行環境についての設定を変更することができます。
下部の「Dependencies」のartifactにhadoop-aws(org.apache.hadoop:hadoop-aws:2.9.0)を指定してください。(excludeは空で大丈夫です)
そして、Saveして元のノートに戻ります。
一番最初のparagraphに下記を入力してください。
(awsAccessKeyIdとawsSecretAccessKeyは自分のもので設定してください)
[scala]
%spark
// S3設定
spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "***************")
spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "**********")
spark.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
[/scala]
これでS3からファイルを読み込む準備が整いました。
ちなみに、%sparkというのはインタプリタを表しており、scalaを使って書くsparkの処理を表しています。この他にもsqlでspark-sqlの内容を記述できたり、独自のインタプリタを定義することも可能です。
次回は読み込んだファイルを分析する部分を紹介したいと思います。