タイトル長い。。。
ちゃんと整理できてないですがとりあえずメモっときます。
環境は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
いじょ。