読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

Hiveの導入

前回Hadoopを導入したので、今回はSQLライクなクエリの使用出来るHiveを導入します。 Hadoopで大規模なデータを扱う場合、Javaを使ってMapReduceプログラムを実装することが本来必要ですが、Hiveを使うとそのコストがなくなりSQLさえ知っていれば利用できるというメリットがあります。 前回のHadoopの導入ができていればリポジトリが登録されているので、aptでインストールできます。 ◆インストール $ sudo aptitude install hadoop-hive ◆使用方法 HiveではCSV/TSVから直接インポートが可能です。流れは ・データベースの作成 ・CSV/TSVに合わせたテーブルを作成 ・CSV/TSVをインポート となります。 まずサンプルデータを入手しましょう。こちらのサポートページより入手出来ます。 はじめてのHadoop ~分散データ処理の基本から実践まで sample/data/sales_sample の下に itemlist.tsv sales.tsv sales_detail.tsv shoplist.tsv と4つファイルがあります。今回は shoplist.tsv を使用してみましょう。 ◆データベースの作成~テーブル作成 $ hive > CREATE DATABASE shopdb; > SHOW DATABASES; OK default shoplist Time taken: 0.064 seconds データベースの作成が確認できました。次にテーブルを作成します。shoplist.tsvを見ると、ID、住所があるのでそれに基づいてテーブルを作成します。 > USE shopdb; > CREATE TABLE shoplist( shop_id STRING, address STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; 最後の2文はTSVの書式に合わせた形です。TSVは「タブ(\t)」でデータが区切られ、「改行(\n)」で行が終わり次のデータになります。 これがCSVなら ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' となります。 > SHOW TABLES; OK shoplist Time taken: 0.095 seconds > DESC shoplist; OK shop_id string address string Time taken: 0.662 seconds と表示されればOKです。 ◆データのインポート DBのができたのでTSVファイルをインポートします。 > LOAD DATA LOCAL INPATH '/home/testuser/sample/data/sales_sample/shoplist.tsv' INTO TABLE shoplist; Copying data from file:/home/testuser/sample/data/sales_sample/shoplist.tsv Copying file: file:/home/testuser/sample/data/sales_sample/shoplist.tsv Loading data to table shoplist.shoplist OK Time taken: 0.28 seconds ちなみにデータは $ hadoop dfs -ls -R /user/hive/warehouse に格納されます。注意としては実際のファイルシステムではなく、HadoopファイルシステムであるHDFSで管理されています。なので普通に $ cd /user/hive としても見つかりません。またパスが/usrでなく/userあることも注意です。 ◆動作確認 > SELECT * FROM shoplist;> SELECT address FROM shoplist WHERE address LIKE '%東京%'; と入力して表示されることが確認できます。 ソース: Hadoop – Hive演習をさらす