« VM Import/Exportによる仮想マシンインポートのベストプラクティス(Windows編) | メイン | AWS Black Belt Tech Webinar のご紹介 »

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コマンドがパスを通っていること、そしてホームディレクトリが存在することを条件としています。

ログイン後の画面はこのようになります。

Rstudio-server-console


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を押すと分析結果や右下にエラーコードの割合グラフが生成されます。

Rstudio-server-console2

まとめ

簡単な例でしたが、RedshiftとRを使ったビッグデータ解析をあげてみました。ユーザーの行動分析、キャンペーンで獲得したユーザーと通常のユーザーの月間課金率の比較など、Redshiftに保存されている膨大なデータからRを使って更に高度な分析が可能になります。

ぜひ、Rから直接Redshiftのデータにアクセスし、インタラクティブに行うビッグデータ解析を試してみてください!

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2018年4 月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30