タブ区切り形式(TSV)ファイルのデータをHBaseに投入する方法について紹介する。
HBase にはTSVファイルのデータをロードするための ImportTsv というツールがあり、これを使うことで簡単に HBase のテーブルにデータをロードすることができる。
環境
- CDH 5.4.2 HBase (1.0 ベース)
- CDH 5.4.2 MapReduce (2.6 ベース)
- Cloudera Manager を使ってクラスタを準備するか、クイックスタートVMを準備すること。VMの準備方法については こちらを参考。
データセット
最近発生した地震のデータ・セット。
http://earthquake.usgs.gov/
データの準備
CSVファイルの取得
http://earthquake.usgs.gov/fdsnws/event/1/query?format=csv
にアクセスすれば、CSV形式で取得できる。
詳細なAPIのドキュメントは こちら。この記事の手順を進めるにあたって特に読む必要はない。
TSVファイルに変換
ImportTsvそのものは任意の区切り文字を指定できるのでCSVファイルも一応ロード可能だが、ダブルクォートでくくられた文字列の中にカンマが入っている場合などに適切に処理することができない。
そこで、CSVファイルをTSVの形式に変換する。
簡単な方法はいくつかあるが、ここではGoogle Driveを使う方法を紹介する。
- https://drive.google.com にアクセスする。(要ログイン)
- 先ほどダウンロードした
query.csv
をドラッグアンドドロップする。 - Google Sheets で開き、 File → Download as → Tab-separated files を選択する。
これでTSV形式に変換することができる。
HDFS にロードする
HDFS クライアントとして実行できる環境で以下のコマンドを入力し、 HDFS にデータをロードする。
$ hdfs dfs -mkdir earthquake
$ hdfs dfs -put query.tsv earthquake
HBase テーブルの準備
HBase コマンドを実行できるノードから以下のコマンドを実行し、HBase のインタラクティブシェルモードを起動する。
$ hbase shell
HBase Shell 内で以下のコマンドを入力し、 earthquake
テーブルを作成する。
hbase(main):005:0> create 'earthquake' 'cf'
cf
というのは列ファミリ名であり、テーブル作成時に指定しなければいけない。列全体としては任意の数だけ作成可能なので、データの各列をこの場で指定する必要はない。
ちなみに hbase shell
を起動しなくても、echo
でコマンドをリダイレクトすることでテーブルを作成することもできる。
$ echo "create 'earthquake' 'cf'" | base shell
Importtsv の実行
HBase と MapReduce が実行できる環境で、以下のコマンドを実行する。
$ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,cf:latitude,cf:longitude,cf:depth,cf:mag,cf:magType,cf:nst,cf:gap,cf:dmin,cf:rms,cf:net,cf:id,cf:updated,cf:place,cf:type earthquake /user/<自分のユーザ名>/earthquake
importtsv.columns は、データファイルとHBaseの列との対応関係を示すパラメータ。必須。 HBASE_ROW_KEY で指定された列は行キーとなる。この列名も必須。面倒だが地道に入力するしかない。
投入したデータの確認
hbase shell からの確認
データがきちんと投入されていることを確認するため、 hbase shell
を起動する。
以下のコマンドを実行し、データが投入されていることを確認する。
hbase(main):004:0> scan 'earthquake', {LIMIT => 1}
ROW COLUMN+CELL
2015-05-01T00:07:07.530Z column=cf:depth, timestamp=1435196936220, value=19.67
2015-05-01T00:07:07.530Z column=cf:dmin, timestamp=1435196936220, value=0.07029
2015-05-01T00:07:07.530Z column=cf:gap, timestamp=1435196936220, value=242
2015-05-01T00:07:07.530Z column=cf:id, timestamp=1435196936220, value=uw60994542
2015-05-01T00:07:07.530Z column=cf:latitude, timestamp=1435196936220, value=47.602
2015-05-01T00:07:07.530Z column=cf:latlng, timestamp=1435196936220, value=47.602,-122.7216667
2015-05-01T00:07:07.530Z column=cf:longtitude, timestamp=1435196936220, value=-122.7216667
2015-05-01T00:07:07.530Z column=cf:mag, timestamp=1435196936220, value=0.43
2015-05-01T00:07:07.530Z column=cf:magType, timestamp=1435196936220, value=md
2015-05-01T00:07:07.530Z column=cf:net, timestamp=1435196936220, value=uw
2015-05-01T00:07:07.530Z column=cf:nst, timestamp=1435196936220, value=7
2015-05-01T00:07:07.530Z column=cf:place, timestamp=1435196936220, value=1km WNW of Erlands Point-Kitsap Lake, Washington
2015-05-01T00:07:07.530Z column=cf:rms, timestamp=1435196936220, value=0.13
2015-05-01T00:07:07.530Z column=cf:type, timestamp=1435196936220, value=earthquake
2015-05-01T00:07:07.530Z column=cf:updated, timestamp=1435196936220, value=2015-05-04T20:42:21.380Z
件数のチェックには count
を使う。
hbase(main):005:0> count 'earthquake'
Current count: 1000, row: 2015-05-03T07:57:29.390Z
Current count: 2000, row: 2015-05-05T10:55:18.000Z
Current count: 3000, row: 2015-05-07T19:53:57.490Z
Current count: 4000, row: 2015-05-10T19:02:04.180Z
Current count: 5000, row: 2015-05-13T20:26:01.590Z
Current count: 6000, row: 2015-05-16T12:44:49.000Z
Current count: 7000, row: 2015-05-19T16:05:53.950Z
Current count: 8000, row: 2015-05-22T12:39:25.540Z
Current count: 9000, row: 2015-05-25T12:00:17.280Z
Current count: 10000, row: 2015-05-28T19:08:01.720Z
Current count: 11000, row: 2015-06-01T00:56:05.000Z
Current count: 12000, row: 2015-06-04T07:01:22.330Z
Current count: 13000, row: 2015-06-08T03:04:05.100Z
Current count: 14000, row: 2015-06-11T20:23:45.120Z
Current count: 15000, row: 2015-06-15T16:50:16.700Z
Current count: 16000, row: 2015-06-20T00:37:42.280Z
16767 row(s) in 4.3890 seconds
=> 16767
Hue による確認
Hue HBase App を使えば、Web UI から確認可能。
http://<hueサーバのノード>:8888/hbase
にアクセスすれば、以下のようなUIでHBaseのデータを表示することができる。