LoginSignup
4
2

More than 5 years have passed since last update.

S3にある大量のログデータをEMRを使って、簡単に集計したときのメモ

Posted at

やりたいこと

S3にアップロードしてある大量のログデータを手軽に解析してみたい。
どこかにデータを移行することなく、簡単に集計したいので、今回はEMRを使って集計してみることにする。

手順

1. 前提

  • S3に以下のようなファイルがあるとして、集計作業を行なう

s3://aws-emr-sample-test/sample.csv

user_id,count
1,1
1,1
1,1
1,1
2,1
2,1
2,1
3,1
3,1
4,1

2. EMRの立ち上げ

  • サービスから、EMRを選択
  • クラスターの作成 を選択
  • 一般設定

クラスター名:お好きな名前を入力
起動モード:クラスター

  • ソフトウェア設定

ベンダー:Amazon
リリース:EMRの最新版を選択
アプリケーション:Core Hadoop: Hadoop 2.7.3 with Ganglia 3.7.2, Hive 2.1.1, Hue 3.11.0, Mahout 0.12.2, Pig 0.16.0, and Tez 0.8.4

  • ハードウェア構成(集計したいデータ量によって変えること)

インスタンスタイプ:m3.xlarge
インスタンス数:3個

  • クラスターの作成を選択し、ステータスが稼働中になることを確認する

余談

  • クラスターの起動時に、スポットインスタンスを使うと、通常の半額以下で買えることがあります。金額は、常に変動しておりますので、以下から確認してください。

https://aws.amazon.com/jp/ec2/spot/bid-advisor/

3. 集計

マスターサーバにSSHで接続する

接続すると、EMR環境下で立ち上がっているので、以下のような出力になります


       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
19 package(s) needed for security, out of 42 available
Run "sudo yum update" to apply all updates.

EEEEEEEEEEEEEEEEEEEE MMMMMMMM           MMMMMMMM RRRRRRRRRRRRRRR
E::::::::::::::::::E M:::::::M         M:::::::M R::::::::::::::R
EE:::::EEEEEEEEE:::E M::::::::M       M::::::::M R:::::RRRRRR:::::R
  E::::E       EEEEE M:::::::::M     M:::::::::M RR::::R      R::::R
  E::::E             M::::::M:::M   M:::M::::::M   R:::R      R::::R
  E:::::EEEEEEEEEE   M:::::M M:::M M:::M M:::::M   R:::RRRRRR:::::R
  E::::::::::::::E   M:::::M  M:::M:::M  M:::::M   R:::::::::::RR
  E:::::EEEEEEEEEE   M:::::M   M:::::M   M:::::M   R:::RRRRRR::::R
  E::::E             M:::::M    M:::M    M:::::M   R:::R      R::::R
  E::::E       EEEEE M:::::M     MMM     M:::::M   R:::R      R::::R
EE:::::EEEEEEEE::::E M:::::M             M:::::M   R:::R      R::::R
E::::::::::::::::::E M:::::M             M:::::M RR::::R      R::::R
EEEEEEEEEEEEEEEEEEEE MMMMMMM             MMMMMMM RRRRRRR      RRRRRR

hiveを用いて集計をする

  • 集計については、hiveQLがインストールされているため、hiveを用いる

hiveは、hadoop上で動くDWH向けのソフトウェアで、主にhadoopが得意とするMapReduceの処理をSQLライクで実行することが可能です。

  • 集計を行なう

hiveを立ち上げる

$ hive

Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: false
hive>

集計DBの作成

--集計用のデータベースの作成
hive> CREATE DATABASE log;
OK
Time taken: 1.123 seconds

--対象データベースの選択
hive> use log;
OK
Time taken: 0.045 seconds
hive>

S3にあるログファイルをインポートする(以下の指定で、ディレクトリ以下のファイルをすべてインポートできる)

--S3からデータを読み込む
hive> DROP TABLE IF EXISTS log.test_table;
OK
Time taken: 2.545 seconds
hive> CREATE EXTERNAL TABLE IF NOT EXISTS log.test_table (
    >   user_id INT,
    >   count INT
    > )
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
    > LOCATION 's3://aws-emr-sample-test/';
OK
Time taken: 0.258 seconds
hive>

データが入ってるか、念のため、確認

--データがインポートされていることを確認
hive> SELECT user_id, count FROM log.test_table LIMIT 3;
OK
1       1
1       1
1       1
Time taken: 1.112 seconds, Fetched: 3 row(s)
hive>

集計する

--集計
hive> SELECT user_id, SUM(count) FROM log.test_table GROUP BY user_id;
Query ID = hadoop_20170331123614_c8493578-e1b9-48a9-8765-202649a8c9b1
Total jobs = 1
Launching Job 1 out of 1
Tez session was closed. Reopening...
Session re-established.


Status: Running (Executing on YARN cluster with App id application_1490962451243_0002)

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0
Reducer 2 ...... container     SUCCEEDED      1          1        0        0       0       0
----------------------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 11.28 s
----------------------------------------------------------------------------------------------
OK
1       4
2       3
3       2
4       1
Time taken: 19.344 seconds, Fetched: 5 row(s)
hive>

S3にあるログデータをどこかに移すことなく、簡単に集計できた!

まとめ

S3にアップロードしてあるログデータを簡単に速く集計かけたいときに、便利!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2