Hive――RDB使いのためのHadoopガイド
SQLライクにHadoop Hiveを使い倒す!
InterDB
2009/3/9
データの保存:INSERT
検索結果を画面に表示するだけでは先に進まないので、次にデータを保存する方法を説明します。
Hiveではデータを保存するためにINSERT文を使います。これはSQLのINSERT文と大きく異なる部分で、テーブルのデータを更新するのではなく、次々と新しいテーブルやファイルを作って処理を進めていきます。
具体的には、次の3つの方法があります。
- Hiveのテーブルにデータを直接インサート
- HDFS注のファイルとして保存
- ユーザーが直接扱う(普通の)ファイルとして保存
以降でそれぞれを見ていきましょう。
1:Hiveのテーブルにデータを直接インサート
HiveのINSERT文の構文は以下のとおりです。
●INSERT文の構文insert_clause: FROM from_statement INSERT OVERWRITE destination select_statement destination: TABLE table_name [PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)] | DIRECTORY '/hdfs/path' | [LOCAL] DIRECTORY '/local/path'
INSERT文の使い方の例として、テーブルginza_zipを定義し、このテーブルにデータを保存する方法を示します。
●テーブル「ginza_zip」を定義してデータを保存するhive> CREATE TABLE ginza_zip (zip STRING, pref INT, city STRING, town STRING) > ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' > LINES TERMINATED BY '\n'; OK Time taken: 2.767 seconds hive> FROM zip z > INSERT OVERWRITE TABLE ginza_zip > SELECT z.zip, z.pref, z.city, z.town > WHERE z.ver = '2008-12-26' AND z.town REGEXP '銀座';
テーブルginza_zipを検索してみましょう。データがインサートされていることが確認できます。
●データ内容を確認するhive> SELECT g.* FROM ginza_zip g; OK 4240817 22 静岡市清水区 銀座 4480845 23 刈谷市 銀座 7450032 35 周南市 銀座 7700916 36 徳島市 銀座 8040076 40 北九州市戸畑区 銀座 0691331 1 夕張郡長沼町 銀座 3220052 9 鹿沼市 銀座 3600032 11 熊谷市 銀座 3670052 11 本庄市 銀座 1040061 13 中央区 銀座 3940022 20 岡谷市 銀座 3950031 20 飯田市 銀座 Time taken: 0.211 seconds
2:HDFSのファイルとして保存
次に、HDFS上のファイルとして保存する方法を示します。ここでは、HDFSのディレクトリ「/user/hive/ginza」以下にファイルを保存することにします。
●HDFSの「ファイル」として保存hive> FROM zip z > INSERT OVERWRITE DIRECTORY '/user/hive/ginza' > SELECT z.zip, z.pref, z.city, z.town > WHERE z.ver = '2008-12-26' AND z.town REGEXP '銀座';
実際にファイルが保存されたかどうか、Hadoopのコマンドを使って調べてみましょう。
●ファイルがあるか確認するhiveuser> $HADOOP_HOME/bin/hadoop dfs -lsr /user/hive/ginza -rw-r--r-- 3 hiveuser supergroup 161 2009-01-01 14:34 /user/hive/ginza/attempt_200901011221_0008_m_000000_0 -rw-r--r-- 3 hiveuser supergroup 203 2009-01-01 14:34 /user/hive/ginza/attempt_200901011221_0008_m_000001_0
指定したHDFSのディレクトリ以下に、2つのファイルが生成されているのが分かります。結果はこの2つのファイルに分散されて保存されています。
データの保存のためにファイル名でなくディレクトリを指定するのは不便ですが、Hadoopが大量のデータを分散処理する仕組みであることを思い出すと、数Gバイトを超える大規模データを扱うには必要な処置なのかもしれません。
さらに、現時点ではファイル内のデータ項目の区切り文字は「^A」(Ctrl-A)と決め打ちになっており、こちらの方が不便です。Hiveのソースコードには「いずれ改良する」とのコメントがあるので、将来的には解消されると思われますが。
3:ユーザーが直接扱う(普通の)ファイルとして保存
最後に、HadoopのHDFSの世界から、UNIXの普通のファイルシステムの世界にデータを書き込んでもらいましょう。
INSERT文に「LOCAL DIRECTORY」と指定するだけです。これで、私たちが普通に利用できるディレクトリ以下にファイルが作成されます。
●HDFSからローカルディレクトリに書き込みを行うhive> FROM zip z > INSERT OVERWRITE LOCAL DIRECTORY '/home/hiveuser/localfiles/ginza' > SELECT z.zip, z.pref, z.city, z.town > WHERE z.ver = '2008-12-26' AND z.town REGEXP '銀座';
hiveuser> ls -la /home/hiveuser/localfiles/ginza/ 合計 24 drwxrwxr-x 2 hiveuser hiveuser 4096 1月 1 14:38 . drwxrwxr-x 3 hiveuser hiveuser 4096 1月 1 14:38 .. -rw-rw-r-- 1 hiveuser hiveuser 12 1月 1 14:38 .attempt_200901011221_0009_m_000000_0.crc -rw-rw-r-- 1 hiveuser hiveuser 12 1月 1 14:39 .attempt_200901011221_0009_m_000001_0.crc -rwxrwxrwx 1 hiveuser hiveuser 161 1月 1 14:38 attempt_200901011221_0009_m_000000_0 -rwxrwxrwx 1 hiveuser hiveuser 203 1月 1 14:39 attempt_200901011221_0009_m_000001_0
まとめ:Hadoopを直接操作するよりも簡単!
以上、駆け足でHiveについて説明しました。
Hadoopは米国Yahoo! をはじめ多くの企業での利用が本格化しつつあり、今後のIT業界で必須技術となる勢いがあります。
このような状況下でのHiveの位置付けですが、実際に使ってみると、Hadoopから直接データを扱うよりもテーブルを使った方が直感的かつ簡単に扱える場合が多いことに気付きました。そもそも私たちが得るデータの多くはRDBMSに保存されているわけですから、それをそのまま保存できる利点は大きいはずです。
例えば、日々の運用でデータベースに刻々とためられるデータをHadoopに転送して永久保存する、もちろんため込んだデータは日夜分析する、という使い方が普及していくのならば、データをテーブルという概念で扱えるHiveに多くのユーザーが目を向けるようになると思われます。
| 6/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ジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
