Hive用データを準備する
HiveはCSV形式やTSV形式のファイルに対して処理を行ないます。処理対象とするファイルを事前に変換しておきます。
ファイルは数10MBから数百MB程度のサイズで、複数のファイルに分割しておきます。Hiveは一つのファイルを一つのMapperプロセスに割り当てます。検索対象となるファイルの数が処理を分散できるノード数の上限になるので、必ず適度なサイズに分割しておかないと、Hadoopのメリットを得られません。
Hiveでは一つのフォルダを一つのテーブルとして扱います。ここで作成した分割ファイルをひとつフォルダに保存します。
通常のHadoopではHDSFを使用しますが、Amazon EMRではS3をストレージとして使用します。EMR用にS3のBucketを作成し、フォルダを作り、そこに作成したファイルをアップロードします。ここで作成したフォルダがHive上では一つのテーブルとして扱います。
Bucketを作成するリージョンは、EMRで使用するリージョンと同じ場所にします。同一リージョン内でのネットワーク通信は課金の対象となりませんが、リージョンをまたいだ通信は課金の対象となるので注意しましょう。
同様の理由でCSV形式のファイルへの変換や、CSVファイルをS3にアップロードする作業もAmazon EC2上で行なった方が良い場合もあります。EC2上の仮想マシンからS3へのアップロードは低速のインスタンスでも200~400Mbpsで行えますが、インターネット経由ではシングルスレッド転送だと数百Kbps~数Mbps程度になってしまい、大量のデータをアップロードするには時間がかかりすぎます。
都合、インターネット経由でアップロードする場合には、S3 Browser(http://s3browser.com)のような、マルチスレッド対応した転送ツールが便利です。
ここではサンプルデータとしてインターネット上で公開されているAmazonのレビュー記事のデータを使います。http://liu.cs.uic.edu/download/data/からreviewsNew.rarをダウンロードしてきます。解凍して得られたファイルを適当な行数で分割します。私はCygwinのsplitコマンドを使用しました。これを新たにemr-sampleバケットを作成し、reviewsNewフォルダにアップロードします。