Как Pig хранить строки в HBase как строки, а не байты?
Если я использую 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
Я буду видеть результат в виде строки, а не в байтах.
У меня есть данные в улье, на которых я запустил агрегацию и сохранил в 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 shell
И в happybase
результат в байтах, а не в строке.
Я не могу даже искать по ключу строки, которая является строкой.
Как я могу использовать Pig и HBaseStorage для хранения данных из HDFS в 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'
);
Сканирование в оболочке hbase и в happybase приводит к получению байтов, а не строк.
Я подозреваю, что проблема связана с вашими исходными данными, а не с самим процессом Pig.
Почему бы не скопировать исходные данные на локальный диск и проверить? Что-то вроде:
hadoop fs -copyToLocal /<>/aggregation_test /tmp/aggregation_test
cat /tmp/aggregation_test/*
Еще одна проверка: соответствует ли строка в HBase тому, что вы ожидаете?