LoginSignup
2
1

More than 5 years have passed since last update.

HBaseにTSVデータを投入する(ImportTsv)

Last updated at Posted at 2017-06-13

タブ区切り形式(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 で開き、 FileDownload asTab-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のデータを表示することができる。

c54-hue-hbase-app-sample.png

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1