MapReduceで巨大データ同士をJOINする

立春をすぎて、暖かく感じる日も増えてきた今日この頃です。さて春といえばミツバチ、ミツバチといえばHiveですが、今日はHiveを使わないで純粋なMapReduceで、巨大データ同士をJOINするための一つの方法を書き留めたいと思います。

よくある問題

具体的に考えるために、状況を想定してみます。例えば以下の2つのテーブル、アクセスログ(日時,ユーザID,アクセスURL)とユーザマスタ(ユーザID,年齢,性別,住所)があるとします。これらのテーブルをユーザIDで結合したいとしましょう。

join tables

SQLで言えば次のような処理ということになります。

SELECT *
  FROM access_log
  LEFT OUTER JOIN user
  USING (user_id);

つまり何ということはない普通のJOINなのですが、この2つのデータがとても大きなものであるとき、私たちは問題に直面します。 続きを読む MapReduceで巨大データ同士をJOINする

30分で実行するAmazon Elastic MapReduce(Amazon EMR)

今年のテーマの一つはビッグデータということで、そろそろ本格的にMapReduceに手を出そうと思います。

手軽にMapReduceを試してみるのであれば、やはりAWSでしょう。今回はAmazon Elastic MapReduce(Amazon EMR)を動かす方法を簡単にまとめておきます。

実行する処理の例としては、Hadoopのチュートリアルにある処理をそのまま使わせてもらいましょう。与えられたテキスト(英文)に出現する単語を数えるというものです。

実行する処理
与えられたテキストに出現する単語を数える

実行の手順

Amazon EMRにはApache Hadoopが使われています。本来Hadoopを使うためには、Hadoopの環境そのものをセットアップする必要があるのですが、そこをAWSが既にやってくれているわけです。

そのため、手順としては

  1. Hadoopのジョブとなるjarファイルを作る
  2. そのjarファイルと入力ファイルをAmazon S3へアップロードする
  3. Amazon EMRのコンソールから処理を実行する

となります。 続きを読む 30分で実行するAmazon Elastic MapReduce(Amazon EMR)