HBase外壳扫描字节到字符串的转换 [英] HBase shell scan bytes to string conversion
本文介绍了HBase外壳扫描字节到字符串的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
org.apache.hadoop.hbase.util.Bytes.toString(
"x48x65x6cx6cx6fx20x48x42x61x73x65".to_java_bytes)
org.apache.hadoop.hbase.util.Bytes.toString("Hello HBase".to_java_bytes)
我将非常高兴有扫描示例,获得搜索二进制数据(长数据)并输出正常字符串。我使用的是HBase shell,而不是Java。
推荐答案
HBase将数据存储为字节数组(无类型)。因此,如果您执行表扫描,数据将以common format(转义十六进制字符串)的形式显示,例如:
"x48x65x6cx6fx20x48x42x61x73x65"->Hello HBase
如果希望从序列化的字节数组中取回类型化的值,则必须手动执行此操作。 您有以下选项:
- Java代码(Bytes.toString(.))
- 破解
$HBASE/HOME/lib/ruby/hbase/table.rb
中的to_string函数: 将非元表的to StringBinary替换为to Int - 编写Get/ScanJRuby函数,将字节数组转换为适当的类型
既然您想要它HBase shell,那么考虑最后一个选项:
创建文件get_result t.rb:
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Result;
import java.util.ArrayList;
# Simple function equivalent to scan 'test', {COLUMNS => 'c:c2'}
def get_result()
htable = HTable.new(HBaseConfiguration.new, "test")
rs = htable.getScanner(Bytes.toBytes("c"), Bytes.toBytes("c2"))
output = ArrayList.new
output.add "ROW COLUMN+CELL"
rs.each { |r|
r.raw.each { |kv|
row = Bytes.toString(kv.getRow)
fam = Bytes.toString(kv.getFamily)
ql = Bytes.toString(kv.getQualifier)
ts = kv.getTimestamp
val = Bytes.toInt(kv.getValue)
output.add " #{row} column=#{fam}:#{ql}, timestamp=#{ts}, value=#{val}"
}
}
output.each {|line| puts "#{line}
"}
end
将其加载到HBase shell中并使用:
require '/path/to/get_result'
get_result
注意:根据需要修改/增强/修复代码
这篇关于HBase外壳扫描字节到字符串的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文