【问题标题】:How to have Pig store rows in HBase as strings not bytes?如何让 Pig 在 HBase 中将行存储为字符串而不是字节?
【发布时间】:2014-01-14 23:50:18
【问题描述】:

如果我使用hbase shell 并发出:

put 'test', 'rowkey1','cf:foo', 'bar'
scan 'test'

我会将结果视为字符串,而不是字节。

如果我使用happybase 并发出:

import happybase
connection = happybase.Connection('<hostname>')
table = connection.table('test')
table.put('rowkey2', {'cf:foo': 'bar'})
for row in table.scan():
    print row

我会将结果视为字符串,而不是字节。

我在 hive 中有数据,我通过以下方式运行聚合并存储在 HDFS 上:

INSERT OVERWRITE DIRECTORY 'aggregation_test'
SELECT device_id, device_name, sum(device_cost)
FROM devices
GROUP BY device_id, device_name
ORDER BY device_id, device_name

但是,如果我在 Pig 中发出以下命令:

A = LOAD 'aggregation_test' USING PigStorage(',') as (device_id:chararray, device_name:chararray, device_sum:int);
STORE A INTO 'hbase://aggregation_test'
USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
    'cf:device_name, cf:device_sum');

hbase shellhappybase 中的扫描结果是字节,而不是字符串。

我什至无法搜索作为字符串的行键。

如何使用 Pig 和 HBaseStorage 将数据从 HDFS 存储到 HBase 中作为字符串而不是字节?

【问题讨论】:

    标签: hbase apache-pig hbasestorage


    【解决方案1】:

    在 hbase shell 和 happybase 中的扫描结果是字节,而不是字符串。

    我怀疑问题出在您的源数据上,而不是 Pig 进程本身。

    为什么不将源数据复制到本地磁盘并检查?比如:

    hadoop fs -copyToLocal /<>/aggregation_test /tmp/aggregation_test
    cat /tmp/aggregation_test/*
    

    另一项检查:HBase 中的行数是否符合您的预期?

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 HBaseBinaryConverter 选项?比如:

      store CompleteCases_f into 'hbase://user_test' using
          org.apache.pig.backend.hadoop.hbase.HBaseStorage(
              'id:DEFAULT id:last_modified birth:year gender:female gender:male','-caster HBaseBinaryConverter'
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多