AWSのチュートリアル 〜Analyze Big Data with Hadoop編〜

AWSのチュートリアルの日本語メモ

# はじめに

最近業務でAWS上に構築したHiveを利用するのですが、より理解を深めたいと思い、今回は[AWSのチュートリアル](https://aws.amazon.com/jp/getting-started/use-cases/big-data/)を利用して、Hadoop + Hive環境を1から構築してみました。

# チュートリアルの内容

## Step1: Set Up Prerequisites for Your Sample Cluster

### Sign Up for AWS
以前登録していたため、今回はスキップ

### Create an Amazon S3 Bucket
S3とは、データを保存するサービス、詳しい内容は[ここ](https://aws.amazon.com/jp/s3/)
以前に利用したことがあったのでここもスキップ

### Create an Amazon EC2 Key Pair
EC2とは、Amazonが提供してくれているWEBサーバ、詳しくは[ここ](https://aws.amazon.com/jp/ec2/)
sshでログインするために、key pairを発行する必要がある。
今回は[ここのサイト](http://dev.classmethod.jp/cloud/aws/amazon-ec2-keypair-security/)を参考に、以前作成したkey-pairを利用。

* EC2のコンソールページのネットワーク&セキュリティタブのキーペアをクリック
* 上のキーペアのインポートをクリック
* key-pairの名前とkey-pair.pubの中身をペーストして登録

## Step2: Launch Your Sample Amazon EMR Cluster

### Launch the Sample Cluster
EMRのクラスタを作成する。EMRとは、AWS上でHadoopを使用するためのサービス。
詳しくは[ここを参照](https://aws.amazon.com/jp/emr/)

* [EMRのコンソールページ](https://console.aws.amazon.com/elasticmapreduce/.)に移動
* クラスターの作成をクリック
* EC2キーペアの部分で、先ほど登録したkey-pairを指定する
* クラスターの作成をクリック

## Step3: Prepare Your Sample Data and Script
ここでは提供されているサンプルログデータとサンプルhiveコードの説明

### Sample Data Overview
サンプルのログデータは、s3://[region].elasticmapreduce.samplesに格納されているらしい。
ただし、[region]には自分が使用しているリージョン名が入る。

### Sample Hive Script Overview
Hiveのサンプルコードはs3://[region].elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.qにある。
記録されているコードは以下の通り

```sql:Hive_CloudFront.q
-- Summary: This sample shows you how to analyze CloudFront logs stored in S3 using Hive

-- Create table using sample data in S3.  Note: you can replace this S3 path with your own.
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  DateObject Date,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  OS String,
  Browser String,
  BrowserVersion String
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
) LOCATION '${INPUT}/cloudfront/data';

-- Total requests per operating system for a given time frame
INSERT OVERWRITE DIRECTORY '${OUTPUT}/os_requests/' SELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os;
```

```CREATE EXTERNAL TABLE table-name ... LOCAL data-path```はdata-pathにあるファイルを新しく作成したテーブルtable-nameにinsertするコード。

```INSERT DIRECTORY path SELECT ...```は、s３上のpathにselect以下の結果を出力するコード。

## Step4: Process Your Sample Data By Running a Hive Script
ここからは作成したEMR上でhiveのコードを実行していく。

### Submit the Hive Script as a Step

* [EMRのコンソール画面](https://console.aws.amazon.com/elasticmapreduce/.
)を開く
* クラスターリストの中から、先ほど起動したクラスターを指定する。
* ステップの追加をクリックする。
* ステップタイプをhive programにする
* スクリプトs3の場所に、s3://[region].elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.qを指定する。
* S3 の場所の入力に、s3://[region].elasticmapreduce.samplesを指定
* 引数に-hiveconf hive.support.sql11.reserved.keywords=falseを記述（予約語と同じ列名を許可するためのオプション）
* 追加をクリック

実行されたsqlは```SELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os```で、2014-07-05から2014-08-05期間のosの種類を集計するというもの。

出力されたファイルは

```
Android 855
Linux 813
MacOS 852
OSX 799
Windows 883
iOS 794
```

## Step5
最後はシャットダウンするための処理、これを忘れると永遠に課金され続ける・・・

### To terminate your Amazon EMR cluster
* EMRのコンソール画面を開く
* コンソールリストから起動中のコンソールを選択
* 上の削除ボタンを押す


# 最後に

今回はAWSのチュートリアルページの内容をそのまま実行しました。

自分でhqlファイルを書いて、s3上にアップロードして実行すると自分のしたい処理が出来たり、sshでemrのマスタノードに入り、hiveを実行することでインタラクティブに操作することもできます。

時間のある時に、AWSの勉強を続けていきたいと思います。