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中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)