如何获取HBase数据库中“最后一条”数据

如何获取HBase数据库中“最后一条”数据,第1张

select from (select t,from table t order by pxColumn desc) where rownum =1 按照自己希望排序方式排好之后,然后,取第一行

一.工具开发背景:

业务上目前主要计算逻辑的数据源是hbase,但是我们没有工具对hbase的数据进行单条更改造数据来验证逻辑,之前的做法是把hbase的数据都导出来,改完再重新载入回去,或使用hbase shell接口进行更改(有一个限制就是hbase shell get 出来的数据汉字是看不出来的),效率低,也不便于自动化的回归。测试非常的被动。

于是在师姐的建议下期望有 *** 作hbase数据的工具来提高我们的效率,及大数据的验证。

二.工具简介:

工具使用java编写的jar包,在ihbasesh进行简单数据处理对jar包进行调用。主要功能为数据的增删改查,支持gbk,utf8编码。通过配置一个xml格式的配置文件 (也可以不配置)。

三.使用方法:

1propertiessh:在里面配置hbase,hadoop等环境变量,里面目前默认是我们测试集群的配置作为参考。注意一些基础的jar包一定要有。

2config:xml格式的配置hbase导出数据的信息。在海量导出数据或根据rowkey到处数据的时候使用。

3ihbasesh工具的使用接口。

四.简要使用介绍:

*** 作均在bin目录下。

一.查询数据功能

1 /ihbase –t table_name -rowkey rowkey -enc encoding -s

-enc encoding这个的目的是指定以什么编码读出hbase数据,目前支持utf8,gbk。如果不加该参数则默认以utf读出。

查看表名为table_name,rowkey为rowkey的数据。

2 /ihbase –t 表名 –k CF:COLUMN=value –k CF:COLUMN=value –w column -s

/ihbasesh –t "test" –k "a:name=jkfs" –k "a:id=111" -w "nid" -s

查询满足a:name=jkfs且a:id=111的记录,若加上-w参数,则只显示 -w 传进去的列。若不加-w 显示所有列。

(这个命令一般很少用,因为使用这个=的filer需要扫hbase全表,因为这种方式很少使用,所以暂时没考虑如何优化)

二.删除数据功能

1 /ihbase –t table_name –rowkey rowkey –delete

根据rowkey进行删除。

2 /ihbase –t table_name –k CF:COLUMN=value –k CF:COLUMN=value –delete

/ihbase –t test –k "a:id=jaks" -k "name=a:jkasj" -delete

删除满足a:id=jaks且a:name=jkasf的数据(目前支持and进行删除,不支持or,原理同该方式的查询)

三.添加数据功能

/ihbase –t table_name –rowkey rowkey –v CF:COLUMN=value –v CF:COLUMN=value -a

/ihbasesh –t "a:test" -rowkey "111" –v "a:name=jkfs" –v "id=111" -a

添加rowkey为111的数据,后面key,value可以任意指定。如果rowkey已经存在,则报错不进行添加。

添加数据要求必须指定rowkey

四.修改数据功能

1 /ihbase –t table_name –rowkey rowkey –v key=value -v key=value -u

/ihbasesh -t "test" -rowkey "1111" –v "name=jkasjd" -u

根据rowkey进行修改一条记录的列数据

2 /ihbase –t table_name –k key=value –k CF:COLUMN=value -v CF:COLUMN=value -u

/ihbasesh –t test –k "a:name=jksdj" –k "mge=kjdk" –v "a:name=huanyu" -u

根据非rowkey进行修改,-k 提供修改的条件,-u 提供要修改的列的数数据。(原理同查询,scan全表)

五.导出hbase指定列的数据(所有数据)

/ihbase -f config 此处有一个限制:就是导出表的配置文件必须放在bin的目录下。如果不喜欢这样也可以修改ihbase脚本进行调整。

config为配置导出表信息的xml配置

<xml version="10">

<configuration>

<table>

<in_enc>gbk</in_enc>

<out_enc>utf8</out_enc>

<tablename>test</tablename>

<field_separator>\001</field_separator>

<record_separator>\002</record_separator>

<column>

bmw_shops:title

</column>

<outpath>/test/huanyu/hbase</outpath>

</table>

</configuration>

in_enc:hbase中的编码,以解析hbase中数据使用的编码。

out_enc:输出到hdfs路径上的编码。

tablename: *** 作的表名。

field_separator:如果导出多个字段则作为多个字段间的分隔符。

record_separator:导出数据的行分隔符。(除了\n的字符,因为默认会分行)。

column:导出的字段。如果不存在该字段则导出''。

outpath:导出数据的路径。(其实应在代码中把这个路径先删除的,但是怕用户忘记修改路径误删除,所以没有这么做)

有多少个region 启动多少个map。

六.导出hbase指定行的指定列的数据

/ihbase -f config -rf rfile

config里面配置导出的列,字符编码表名等信息。

rfile 配置导出哪些rowkey的数据。(一个rowkey一行)

类似上面。

七.帮助信息

/ihbase –h

显示帮助信息

Configuration conf = HBaseConfigurationcreate();

String tableName = "testTable";

Scan scan = new Scan();

scansetCaching(10000);

scansetCacheBlocks(false);

confset(TableInputFormatINPUT_TABLE, tableName);

ClientProtosScan proto = ProtobufUtiltoScan(scan);

String ScanToString = Base64encodeBytes(prototoByteArray());

confset(TableInputFormatSCAN, ScanToString);

JavaPairRDD<ImmutableBytesWritable, Result> myRDD = sc

newAPIHadoopRDD(conf, TableInputFormatclass,

ImmutableBytesWritableclass, Resultclass);

在Spark使用如上Hadoop提供的标准接口读取HBase表数据(全表读),读取5亿左右数据,要20M+,而同样的数据保存在Hive中,读取却只需要1M以内,性能差别非常大。

以上就是关于如何获取HBase数据库中“最后一条”数据全部的内容,包括:如何获取HBase数据库中“最后一条”数据、如何加快hbase读取数据的效率、如何批量写hive数据到hbase中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9784999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存