如何使用 Pig 和 HBaseStorage 存储到 HBase

Posted

技术标签:

【中文标题】如何使用 Pig 和 HBaseStorage 存储到 HBase【英文标题】:How to Store into HBase using Pig and HBaseStorage 【发布时间】:2014-01-30 23:32:43 【问题描述】:

在 HBase shell 中,我通过以下方式创建了我的表:

create 'pig_table','cf'

在 Pig 中,这是我希望存储到 pig_table 中的别名的结果:

DUMP B;

生成具有 6 个字段的元组:

(D1|30|2014-01-01 13:00,D1,30,7.0,2014-01-01 13:00,DEF)
(D1|30|2014-01-01 22:00,D1,30,1.0,2014-01-01 22:00,JKL)
(D10|20|2014-01-01 11:00,D10,20,4.0,2014-01-01 11:00,PQR)
...

第一个字段是第二个、第三个和第五个字段的串联,将用作 HBase 行键。

但是

STORE B INTO 'hbase://pig_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ( 'cf:device_id,cf:cost,cf:hours,cf:start_time,cf:code')

结果:

`Failed to produce result in "hbase:pig_table"

日志给了我:

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.pig.data.DataByteArray
at org.apache.pig.backend.hadoop.hbase.HBaseStorage.objToBytes(HBaseStorage.java:924)
at org.apache.pig.backend.hadoop.hbase.HBaseStorage.putNext(HBaseStorage.java:875)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:139)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:98)
at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.write(ReduceTask.java:551)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:85)
at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.write(WrappedReducer.java:99)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.runPipeline(PigGenericMapReduce.java:468)
... 11 more

我的语法有什么问题?

【问题讨论】:

【参考方案1】:

HBaseStorage 似乎不会自动将元组的数据字段转换为 chararray,这是在将其存储在 HBase 之前所必需的。我只是将它们转换成这样:

C = FOREACH B 
    GENERATE
    (chararray)$0
    ,(chararray)$1
    ,(chararray)$2
    ,(chararray)$3
    ,(chararray)$4
    ,(chararray)$5
    ,(chararray)$6
    ;

STORE B INTO 'hbase://pig_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ( 'cf:device_id,cf:cost,cf:hours,cf:start_time,cf:code')

【讨论】:

以上是关于如何使用 Pig 和 HBaseStorage 存储到 HBase的主要内容,如果未能解决你的问题,请参考以下文章

运行 Apache Pig 脚本时如何查找 jar 依赖项?

PIG - HBASE - 铸造值

pig 将Hbase中表导出为CSV出现错误 高分!!! 求解!!!

1,pinpoint全链路监控

1,pinpoint全链路监控

如何使用 Pig 按键和值分组