AWS
hadoop
EC2
hive
EMR

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

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

はじめに

最近業務でAWS上に構築したHiveを利用するのですが、より理解を深めたいと思い、今回はAWSのチュートリアルを利用して、Hadoop + Hive環境を1から構築してみました。

チュートリアルの内容

Step1: Set Up Prerequisites for Your Sample Cluster

Sign Up for AWS

以前登録していたため、今回はスキップ

Create an Amazon S3 Bucket

S3とは、データを保存するサービス、詳しい内容はここ
以前に利用したことがあったのでここもスキップ

Create an Amazon EC2 Key Pair

EC2とは、Amazonが提供してくれているWEBサーバ、詳しくはここ
sshでログインするために、key pairを発行する必要がある。
今回はここのサイトを参考に、以前作成したkey-pairを利用。

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

Step2: Launch Your Sample Amazon EMR Cluster

Launch the Sample Cluster

EMRのクラスタを作成する。EMRとは、AWS上でHadoopを使用するためのサービス。
詳しくはここを参照

  • EMRのコンソールページに移動
  • クラスターの作成をクリック
  • 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にある。
記録されているコードは以下の通り

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 ...は、s3上のpathにselect以下の結果を出力するコード。

Step4: Process Your Sample Data By Running a Hive Script

ここからは作成したEMR上でhiveのコードを実行していく。

Submit the Hive Script as a Step

  • EMRのコンソール画面を開く
  • クラスターリストの中から、先ほど起動したクラスターを指定する。
  • ステップの追加をクリックする。
  • ステップタイプを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の勉強を続けていきたいと思います。