添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • centos 6.5
  • CDH 5.15
  • JDK 1.8
  • hbase 1.2
读写\x12\x00\x00\x00\x03\x03

HBase 存储数据是使用byte[]的,要求写入都要转为byte[]类型;
参见:
JAVA byte 类型

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.commons.lang.ArrayUtils;
public class Test {
    public static void main(String[] args) throws IOException {
        Configuration config = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("test"));
        //# 插入 \x12\x00\x00\x00\x03\x03
        byte[] rowKey = new byte[6];
        rowKey[0] = 0x12;
        rowKey[1] = 0x00;
        rowKey[2] = 0x00;
        rowKey[3] = 0x00;
        rowKey[4] = 0x03;
        rowKey[5] = 0x03;
        //# 如果是10进制的,hbase put会转为16进制
        Put put = new Put(rowKey);
        //# addColumn(byte[] family,byte[] qualifier,byte[] value)
        put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("_5"), Bytes.toBytes("x"));
        table.put(put);
        //# 读取 \x12\x00\x00\x00\x03\x03
        Get g = new Get(rowKey);
        Result result = table.get(g);
        //# 要读取的列族和列
        byte [] value = result.getValue(Bytes.toBytes("cf"),Bytes.toBytes("_5"));
        //# byte[]转为字符串输出
        String valueRes = Bytes.toString(value);
        System.out.println("valueRes: " + valueRes );
$ javac -classpath $(hbase classpath) Test.java
$ java  -classpath $(hbase classpath) Test
valueRes: x
> scan 'test'
\x12\x00\x00\x00\x03\x03                        column=cf:_5, timestamp=1569572415866, value=x
10进制转16进制的数据
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.commons.lang.ArrayUtils;
public class Test {
    public static void main(String[] args) throws IOException {
        Configuration config = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("test"));
        //# 插入 \x12\x00\x00\x00\x03\x03
        byte byteB1 = 18; //# 10进制的18,转为16进制为12
        byte byteB2 = 0;
        byte byteB3 = 3;
        byte[] rowKey = new byte[] {byteB1,byteB2,byteB2,byteB2,byteB3,byteB3};
        //# 如果是10进制的,hbase put会转为16进制
        Put put = new Put(rowKey);
        put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("_6"), Bytes.toBytes("x"));
        table.put(put);
> scan 'test'
\x12\x00\x00\x00\x03\x03                        column=cf:_6, timestamp=1569572905616, value=x

参考
Package org.apache.hadoop.hbase.client

环境centos 6.5CDH 5.15JDK 1.8hbase 1.2读写\x12\x00\x00\x00\x03\x03import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import...
在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引。 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tree))的索引结构。 下面,我们就结合HBase的实现,来深入了解HBase的核心数据结构与算法,包括索引结构LSM树,内存数据结构跳表、文件多路归并、读优化的布隆过滤器等。 1.LSM树 LSM树和...
当一个组件到了优化部分的时候,基本上这个组件的内容就到了结尾部分了,本文我们给HBase收收尾,来讲一下HBase的优化。关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~ 一、HBase的高可用 在HBase中HMaster负责监控Region Server的生命周期,均衡Region Server的负载,如果HMaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对HMaster的高可用配置。这里需要注意的是,如果HMaster挂掉,H
1.需要对照ACSII码表把字符转换为16进制: \x00\x00\x00\x00\x07'\x0E\x00转换为:\x00\x00\x00\x00\x0727\x0E\x00 2.把第一位"\x"转换为16进制中已“0x”开头的,后边的\x去掉 \x00\x00\x00\x00\x0727\x0E\x00转换为:0x0000000007270E00 3.使用linux转换
关于HBase中的中文数据显示为十六进制码 在使用hbase ImportTsv命令将含中文的tsv文件从hdfs上传到hbase后,出现以下所示现象,中文字符显示为十六进制码。 在hhase shell中,直接使用如下命令: scan 'zhihu',{COLUMNS => 'text::toString'} 这里’zhihu’为表名,text: 为列名 会以中文格式显示: 注意:该tsv文件已经是utf-8格式
DataInputStream dis = null; dis = new DataInputStream(new FileInputStream("F:\\out.data")); byte []b = new byte [1024]; dis.read(b); String helloHex = DatatypeConverter.printHexBinary(b); System.out.printf("Hello hex: 0x%s\n", helloHex); 此处读取输出
由于项目中经常遇到与设备进行交互获取数据,不仅有Python版本、还有Java版本,还可能会有C#版本,在此做个记录。一、十六进制转换工具类主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法:/** * Created by wly on 2018/4/17. public class HexConvert { public stati...
hbase(main):001:0> get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'} 其中,`table_name`为表名,`row_key`为需要转换的16进制row key,`column_family`和`column_name`为列族和列名,`FORMAT => 'hex'`参数指定输出结果为16进制。 3. 使用Linux命令`echo`和`bc`将16进制转换为10进制: hbase(main):002:0> echo "ibase=16; $(get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'})" | bc 其中,`ibase=16`指定输入为16进制,`$(get 'table_name', 'row_key', {COLUMN => 'column_family:column_name', FORMAT => 'hex'})`为上一步中获取的16进制结果。 执行以上命令即可将16进制的row key转换为10进制。