バルクロードでHBaseにインポートしたデータをHiveの外部テーブルでselectするときに遭遇した現象に関するメモ

タイトル長い。。。

ちゃんと整理できてないですがとりあえずメモっときます。

環境はHBase 0.94.4, Hive 0.10.0です。

LoadIncrementalHFilesを使ってHBaseにデータをインポートしようとしたら下記のようなエラーが出ました。

Caused by: java.lang.IllegalStateException: The value of the hbase.metrics.showTableName conf option has not been specified in SchemaMetrics
        at org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics.getEffectiveTableName(SchemaMetrics.java:607)
        at org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics.getInstance(SchemaMetrics.java:333)
        at org.apache.hadoop.hbase.regionserver.metrics.SchemaConfigured.getSchemaMetrics(SchemaConfigured.java:185)
        at org.apache.hadoop.hbase.io.hfile.HFileReaderV2.close(HFileReaderV2.java:441)
        at org.apache.hadoop.hbase.io.hfile.HFileReaderV2.close(HFileReaderV2.java:419)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.groupOrSplit(LoadIncrementalHFiles.java:410)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$2.call(LoadIncrementalHFiles.java:323)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$2.call(LoadIncrementalHFiles.java:321)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

https://issues.apache.org/jira/browse/HBASE-4802
を踏んだっぽいですが、とりあえず下記を呼んでおけばエラーは無くなりました。

SchemaMetrics.configureGlobally(conf);

そんなこんなでインポートしたデータをHiveから下記のように参照します。

CREATE EXTERNAL TABLE testtable(key string, a string, b int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:a,cf1:b")
TBLPROPERTIES ("hbase.table.name" = "testtable");

データの型がstringの場合は良いのですがintなどstring型以外の場合はselectしてもNULLが返ってきます。

https://issues.apache.org/jira/browse/HIVE-1634
が該当のJIRAのようですが、

string型以外のものは以下のように#bをつけるようです。

cf1:b#b

いじょ。