RedshiftとRでビッグデータ解析
AWSソリューションアーキテクトの蒋(@uprush)です。
初期コストがなく、導入しやすいペタバイト級のデータウェアハウスAmazon Redshiftは、非常に多くの皆様に利用頂いています。そのなかでも特に多いのは、Redshiftに保存されているビッグデータをBIや可視化ツールを使った解析です。
データ解析ツールとしてRが有名です。Rは統計分析や可視化するためのオープンソースソフトウェアで、データマイニングや分析などの分野で広く使われています。
RはJDBCを利用してデータベースにアクセスすることができます。また、Redshiftは標準的なSQLが利用可能で、PostgresSQLのJDBC・ODBCドライバをそのまま使用することができるため、この2つを組み合わせるとRからRedshiftにもアクセスできます。
RedshiftとRを利用して、インタラクティブ、かつ高度なビッグデータ分析を低いコストで分析することが可能になります。
今回は、EC2にRの総合開発環境(IDE)のR Studio Serverをセットアップし、R Studio Serverから、Redshiftに保存されているApacheアクセスログをRを使って、エラーリクエストのステータスコードの割合グラフを生成する、この一連のプロセスをご紹介したいと思います。
Rセットアップ
RはUbuntuやCentOSのパッケージがあるのでセットアップは簡単です。ここではEC2のUbuntuインスタンスにてRをインストールします。
echo 'deb http://cran.cnr.Berkeley.edu/bin/linux/ubuntu precise/' | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9
sudo apt-get install -y r-base
Rのインストールが終わったら、次はグラフ生成用のRパッケージをインストールします。
sudo R
> install.packages("ggplot2", dep=TRUE)
Redshift for R
Redshiftのアクセスをしやすくするため、RJDBCをラッパしたRedshift for RというRパッケージがあります。こちらもインストールします。
- RJDBCをインストール。
sudo apt-get install openjdk-7-jdk
sudo R CMD javareconf
sudo R
> install.packages("RJDBC",dep=TRUE)
- Redshift for Rをインストール。
git clone https://github.com/pingles/redshift-r.git
sudo R
> install.packages("/home/ubuntu/redshift-r", dependencies=T, repos=NULL, type="source")
RStudio Server
RStudioはRの総合開発環境です。RStudioはデスクトップ版とサーバー版があります。そのなか、ブラウザベースのRStudio Serverは、EC2にもデプロイでき、Redshiftにアクセスしやすいので今回はRStudio Serverを採用します。
- RStudio Serverインストール
$ sudo apt-get install gdebi-core
$ sudo apt-get install libapparmor1 # Required only for Ubuntu, not Debian
$ wget http://download2.rstudio.org/rstudio-server-0.98.501-amd64.deb
$ sudo gdebi rstudio-server-0.98.501-amd64.deb
RStudio Serverがデフォルトで8787番ポートでクライアントのリクエストを受けます。また、こちらを参考に前段にNginxかApacheをproxyとして置いて、外からは80番ポートでRStudio Serverをアクセスさせることもできます。今回は以下のようにNginxを利用してproxy設定をしました。
$ cat /etc/nginx/sites-enabled/rstudio
server {
location /rstudio/ {
rewrite ^/rstudio/(.*)$ /$1 break;
proxy_pass http://localhost:8787;
proxy_redirect http://localhost:8787/ $scheme://$host/rstudio/;
}
}
最後に、EC2のSecurity Groupに、8787番ポート、またはproxyを利用する場合は80番ポートを開けるが必要ありますので忘れないようにしましょう。ここで設定が完了です。RStudio Serverのコントロール画面にアクセスしてみよう。
http://ec2-xxxx.compute.amazonaws.com/rstudio/
ログイン画面が表示されますので、該当EC2のLinuxユーザーアカウントでログインします。ユーザーが存在しない場合、EC2にSSHで入ってユーザー作成が必要です。RStudio ServerにログインするユーザーはRコマンドがパスを通っていること、そしてホームディレクトリが存在することを条件としています。
ログイン後の画面はこのようになります。
RedshiftとRでビッグデータ解析
試しに、Redshiftのapache_logsテーブルのデータから、エラーリクエストのステータスコードの割合グラフを生成してみましょう。RStudio Serverコントロールの左側パーネルに、下記サンプルコードを入力します。
# Connect to Redshift
require(redshift)
conn <- redshift.connect("jdbc:postgresql://xxxx.redshift.amazonaws.com:5439/your_db?tcpKeepAlive=true", "<redshift_user>", "<redshift_password>")
# Counts requests by error code
requests_by_code <- redshift.query(conn, "SELECT code, COUNT(1) as request_count",
"FROM apache_logs",
"WHERE code != 200",
"GROUP BY code",
"ORDER BY code")
# Pie Chart with Percentages
slices <- requests_by_code$request_count
lbls <- requests_by_code$code
pct <- round(slices/sum(slices)*100)
lbls <- paste(lbls, pct) # add percents to labels
lbls <- paste(lbls, "%", sep="") # ad % to labels
pie(slices, labels = lbls, col=rainbow(length(lbls)), main="Error Codes")
Enterを押すと分析結果や右下にエラーコードの割合グラフが生成されます。
まとめ
簡単な例でしたが、RedshiftとRを使ったビッグデータ解析をあげてみました。ユーザーの行動分析、キャンペーンで獲得したユーザーと通常のユーザーの月間課金率の比較など、Redshiftに保存されている膨大なデータからRを使って更に高度な分析が可能になります。
ぜひ、Rから直接Redshiftのデータにアクセスし、インタラクティブに行うビッグデータ解析を試してみてください!
コメント