2013年2月22日金曜日

EMRってなんじゃ?(HiveScriptの場合)

前回の記事ではSSHでEMRの中でhiveコンソールをつかって手動でクエリを打ちましたが、通常のプログラムなどからではHiveScriptで起動と同時に実行することが多いと思うので、細かいことですが前回との違いを紹介します。

HiveScriptの場合はスクリプトファイルの場所と、オプションで入力ファイルのS3ロケーションと出力ファイルのS3ロケーションなどを設定します。
前回やったとおり、入出力のロケーションについてはHiveScript中にもEXTERNAL TABLEとして記載できるのでここではHiveScriptのみの設定でOKです。

ただしHiveScriptの場合、スクリプトのS3ロケーションの部分を前回と内容を少しかえる必要があります。
前回は入力のバケットファイルをファイルパスまで指定しましたが、今回はバケットフォルダで指定し、その下の全てのファイルが入力となります。



hive.q
CREATE EXTERNAL TABLE IF NOT EXISTS csv_origin (yyyy string, mm string, dd string, title string, body string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' LOCATION 's3://csv-origin/input/';

CREATE EXTERNAL TABLE IF NOT EXISTS csv_archive (dd string, title string, body string) PARTITIONED BY (yyyy string, mm string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION 's3://csv-archive/rslt/';                                                              

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
FROM csv_origin co INSERT OVERWRITE TABLE csv_archive PARTITION (yyyy, mm)
SELECT
 co.dd,
 co.title,
 co.body,
 co.yyyy,
 co.mm
DISTRIBUTE BY co.yyyy, co.mm;



スクリプト用のバケットにスクリプトファイルを配置します。



EMRでJob Flowを作成し、Hive Programを選択します。
いまアップしたスクリプトファイルの場所を設定します。

Script Location: s3://hivescript-test/hive.q



あとはそのまま実行します。
しばらくするとジョブが終了し、出力を確認できます。




03,title32,body32
16,title33,body33



以上です。