Hive――RDB使いのためのHadoopガイド
SQLライクにHadoop Hiveを使い倒す!
InterDB
2009/3/9
パーティションを利用する
今回は少し凝ったテーブルを定義をしてみましょう。
郵便番号データは毎月更新されるので、テーブル指定時にバージョンも指定できるようにします。このような場合、Hiveではパーティションを使います。
以下に郵便番号を保存するテーブル「zip」を定義しますが、日付型DATEのパーティションverを設定するようにします。
●テーブル「zip」の定義と作成hive> CREATE TABLE zip (zip STRING, pref INT, city STRING, town STRING)
> PARTITIONED BY (ver DATE)
> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
> LINES TERMINATED BY '\n';
OK
Time taken: 0.128 secondsここで、テーブルzipに2008年11月28日版の郵便番号データzip20081128.csvと2008年12月26日版のzip20091226.csvを読み込みます。
●2つのcsvデータの読み込みhive> LOAD DATA LOCAL INPATH '/home/hiveuser/localfiles/zip20081128.csv'
> OVERWRITE INTO TABLE zip PARTITION (ver = '2008-11-28');
Copying data from file:/home/hiveuser/localfiles/zip20081128.csv
Loading data to table zip partition {ver=2008-11-28}
OK
Time taken: 1.582 seconds
hive> LOAD DATA LOCAL INPATH '/home/hiveuser/localfiles/zip20081226.csv'
> OVERWRITE INTO TABLE zip PARTITION (ver = '2008-12-26');
Copying data from file:/home/hiveuser/localfiles/zip20081226.csv
Loading data to table zip partition {ver=2008-12-26}
OK
Time taken: 1.788 secondsデータが本当に読み込まれたかどうか確認しましょう。次に説明するSELECT文でもいいですが、ここでは直接HadoopのHDFSシステムのうえで、どのようにデータが保存されているか確認します。
HadoopのコマンドでHDFSシステムのディレクトリ「/user/hive/warehouse」以下を表示させます。Hiveのデータはこのディレクトリに保存されます。
●/user/hive/warehouse以下の内容を出力hiveuser> $HADOOP_HOME/bin/hadoop dfs -lsr /user/hive/warehouse drwxr-xr-x - hiveuser supergroup 0 2009-01-01 12:22 /user/hive/warehouse/pref -rw-r--r-- 3 hiveuser supergroup 611 2009-01-01 12:21 /user/hive/warehouse/pref/pref.csv drwxr-xr-x - hiveuser supergroup 0 2009-01-01 12:24 /user/hive/warehouse/zip drwxr-xr-x - hiveuser supergroup 0 2009-01-01 12:24 /user/hive/warehouse/zip/ver=2008-11-28 -rw-r--r-- 3 hiveuser supergroup 4541673 2009-01-01 12:24 /user/hive/warehouse/zip/ver=2008-11-28/zip20081128.csv drwxr-xr-x - hiveuser supergroup 0 2009-01-01 12:24 /user/hive/warehouse/zip/ver=2008-12-26 -rw-r--r-- 3 hiveuser supergroup 4541979 2009-01-01 12:24 /user/hive/warehouse/zip/ver=2008-12-26/zip20081226.csv
テーブル名と同じ名前のディレクトリが作成され、それ以下に読み込まれたファイルが存在していることが分かります。パーティションが設定されたテーブルには、サブディレクトリが作成されていることも分かります。
ここでは省略しますが、WebブラウザでHDFSの状態を表示させることもできます。
Webブラウザで「localhost:50070」にアクセスし、「Live Datanodes」の「Node = localhost」をクリックすると、HDFSのルートディレクトリが表示されます。
コラム◆MapReduce操作について
HiveはHadoopの機能であるMapReduce操作もできます。そもそもHive自体がMapReduceで実行されるわけですが、ここではHiveからMapReduceスクリプトを実行する方法を説明します。MapReduceの構文は、下記URLで紹介されています。
ここではテーブルprefについて、prefカラムの「青森県」や「岩手県」から「県」という文字を削除して、新しいテーブルpref_newに挿入するMap操作を行います。
はじめにテーブルpref_newを定義します。
●テーブルpref_newの定義hive> CREATE TABLE pref_new (id int, pref STRING)
> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
> LINES TERMINATED BY '\n';
次にMap操作を行います。まずは簡略版で実行してみましょう。
●sedを利用したMap操作hive> FROM (
> FROM pref
> SELECT TRANSFORM(pref.id, pref.pref) AS (oid, opref)
> USING '/bin/sed s/県//'
> CLUSTER BY oid
> ) tmap
> INSERT OVERWRITE TABLE pref_new SELECT tmap.oid, tmap.opref;
Mapスクリプトを書き込むUSING句には、UNIXのコマンドであるsedが書き込まれているだけです。この操作を行うと、テーブルが1行ずつsedコマンドに渡され、「県」という文字列を削除してINSERT文に渡されます。
sedコマンドは1行ごとにすべてのカラムに対して変換を行うので、目的とするカラム以外のデータも変換してしまい、汎用的ではありません。そこで、きちんと目的のカラムだけに変換を施すperlスクリプトを使って同様の作用を起こしてみましょう。
●/home/hiveuser/test.pl#!/usr/bin/perl
while (<>) {
chop;
my(@w) = split('\t', $_);
$w[1] =~ s/県$//;
printf("%d\t%s\n", $w[0], $w[1]);
}
hiveuser> chmod +x /home/hiveuser/test.pl
区切り文字が「\t」であることに注意してください。HDFSの通常の区切り文字は「^A」ですが、Hiveが生成したテーブルにデータを書き込む場合は、ファイルの区切りが「\t」となるようです。
あとは、同様に実行するだけです。
●perlスクリプトによるMap操作hive> FROM (
> FROM pref
> SELECT TRANSFORM(pref.id, pref.pref) AS (oid, opref)
> USING '/home/hiveuser/test.pl'
> CLUSTER BY oid
> ) tmap
> INSERT OVERWRITE TABLE pref_new SELECT tmap.oid, tmap.opref;
本稿はあくまでも前提とするバージョン(hadoop-0.19.1)での検証結果です。ほかのバージョンで検証する際は別途ドキュメントを確認してください。
| 4/6 |
| Index | |
| Hive――RDB使いのためのHadoopガイド | |
| 前編 Hadoop+Hive検証環境を構築してみる | |
| Page 1 ・Hiveとは コラム◆Hiveの基本情報 |
|
| Page 2 ・Hadoop+Hiveのインストール ユーザ登録/Java SE 6(JDK 1.6)のインストール/環境変数の設定 hadoop-0.19.0のインストール/データファイルのダウンロード |
|
| Page 3 ・Hiveの基本的な使い方 ・テーブルの作成とデータの読み込み:CREATE TABLEとLOAD DATA |
|
| 後編 SQLライクにHadoop Hiveを使い倒す! | |
| Page 4 パーティションを利用する/コラム◆MapReduce操作について |
|
| Page 5 ・テーブルの検索:SELECT シンプルなSELECT文/パターンマッチング/テーブルの結合 |
|
| Page 6 ・データの保存:INSERT データを直接挿入する/HDFSのファイルとして保存する ユーザーが直接扱う(普通の)ファイルとして保存 ・まとめ:Hadoopを直接操作するよりも簡単! |
|
TechTargetジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
