hbase shell&java 获取多版本的值

转自:http://blog.csdn.net/wind520/article/details/39344805
在HBase中 一个row对应的相同的列只会有一行。使用scan 或get 得到都是最新的数据,如果我们对这某一row所对应的列进行了更改操作后,并不会多生成一条数据,不会像数据库一样,插入时多生成一条记录,在HBase中对同一条数据的修改或插入都只是put操作,最终看到的都是最新的数据,其它的数据在不同的version中保存,默认是隐藏的,通过时间戳区分,Hbase默认保存最近的三个版本,如何才能看到这些旧版本的数据了?
插入测试数据:

hbase(main):026:0> put 'testtable1','row-1','colfam1:qual1','你好,中国'  
0 row(s) in 0.0200 seconds  
  
hbase(main):027:0> put 'testtable1','row-1','colfam1:qual1','你好,广州'  
0 row(s) in 0.0130 seconds  
  
hbase(main):027:0> put 'testtable1','row-1','colfam1:qual1','welcome,hbase'  
0 row(s) in 0.0130 seconds  

下面3个命令,只显示最近的三个版本

hbase(main):015:0> get 'testtable1','row-1',{COLUMN=>'colfam1:qual1',VERSIONS=>10}  
COLUMN                             CELL                                                                                               
 colfam1:qual1                     timestamp=1410943676361, value=welcome\xEF\xBC\x8Chbase                                            
 colfam1:qual1                     timestamp=1410942935244, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE5\xB9\xBF\xE5\xB7\x9E        
 colfam1:qual1                     timestamp=1410942917285, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8\xAD\xE5\x9B\xBD        
3 row(s) in 0.0270 seconds  
  
hbase(main):016:0> scan 'testtable1', {COLUMN=>'colfam1:qual1',VERSIONS=>10}  
ROW                                COLUMN+CELL                                                                                        
 row-1                             column=colfam1:qual1, timestamp=1410943676361, value=welcome\xEF\xBC\x8Chbase                      
 row-1                             column=colfam1:qual1, timestamp=1410942935244, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE5\xB9  
                                   \xBF\xE5\xB7\x9E                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410942917285, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8  
                                   \xAD\xE5\x9B\xBD                                                                                   
1 row(s) in 0.0300 seconds  
  
hbase(main):017:0> scan 'testtable1', {FILTER => "PrefixFilter ('row-1')",COLUMN=>'colfam1:qual1',VERSIONS=>10}  
ROW                                COLUMN+CELL                                                                                        
 row-1                             column=colfam1:qual1, timestamp=1410943676361, value=welcome\xEF\xBC\x8Chbase                      
 row-1                             column=colfam1:qual1, timestamp=1410942935244, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE5\xB9  
                                   \xBF\xE5\xB7\x9E                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410942917285, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8  
                                   \xAD\xE5\x9B\xBD                                                                                   
1 row(s) in 0.0220 seconds  

下面2个命令,可以显示所有的版本

hbase(main):018:0> scan 'testtable1',{FILTER => "(QualifierFilter (>=, 'binary:qual1')))",RAW => true, VERSIONS => 10}  
ROW                                COLUMN+CELL                                                                                        
 row-1                             column=colfam1:qual1, timestamp=1410943676361, value=welcome\xEF\xBC\x8Chbase                      
 row-1                             column=colfam1:qual1, timestamp=1410942935244, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE5\xB9  
                                   \xBF\xE5\xB7\x9E                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410942917285, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8  
                                   \xAD\xE5\x9B\xBD                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410936055137, value=\xE4\xB8\xAD\xE5\x9B\xBD\xE7\xAC\xAC\xE4\xB8  
                                   \x89\xE6\x96\xB9\xE7\x9A\x84\xE4\xBA\x8C\xE6\x96\xB9\xE7\x9A\x84                                   
 row-1                             column=colfam1:qual1, timestamp=1410936031157, value=\xE4\xB8\xAD\xE5\x9B\xBD\xE7\xAC\xAC\xE4\xB8  
                                   \x89\xE6\x96\xB9\xE7\x9A\x84                                                                       
1 row(s) in 0.0290 seconds  
  
hbase(main):019:0> scan 'testtable1',{FILTER => "PrefixFilter ('row-1')",RAW => true, VERSIONS => 10}  
ROW                                COLUMN+CELL                                                                                        
 row-1                             column=colfam1:qual1, timestamp=1410943676361, value=welcome\xEF\xBC\x8Chbase                      
 row-1                             column=colfam1:qual1, timestamp=1410942935244, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE5\xB9  
                                   \xBF\xE5\xB7\x9E                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410942917285, value=\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8  
                                   \xAD\xE5\x9B\xBD                                                                                   
 row-1                             column=colfam1:qual1, timestamp=1410936055137, value=\xE4\xB8\xAD\xE5\x9B\xBD\xE7\xAC\xAC\xE4\xB8  
                                   \x89\xE6\x96\xB9\xE7\x9A\x84\xE4\xBA\x8C\xE6\x96\xB9\xE7\x9A\x84                                   
 row-1                             column=colfam1:qual1, timestamp=1410936031157, value=\xE4\xB8\xAD\xE5\x9B\xBD\xE7\xAC\xAC\xE4\xB8  
                                   \x89\xE6\x96\xB9\xE7\x9A\x84                                                                       
 row-1                             column=colfam2:col-0, timestamp=1410935938913, value=val-1.0                                       
 row-1                             column=colfam2:col-1, timestamp=1410935938921, value=val-1.1                                       
 row-1                             column=colfam2:col-2, timestamp=1410935938927, value=val-1.2                                       
 row-1                             column=colfam2:col-3, timestamp=1410935938929, value=val-1.3                                       
 row-1                             column=colfam2:col-4, timestamp=1410935938932, value=val-1.4                                       
 row-1                             column=colfam2:col-5, timestamp=1410935938935, value=val-1.5                                       
 row-1                             column=colfam2:col-6, timestamp=1410935938937, value=val-1.6                                       
 row-1                             column=colfam2:col-7, timestamp=1410935938939, value=val-1.7                                       
 row-1                             column=colfam2:col-8, timestamp=1410935938941, value=val-1.8                                       
 row-1                             column=colfam2:col-9, timestamp=1410935938944, value=val-1.9                                       
                                     
1 row(s) in 0.0690 seconds  

用java代码测试:

package client;  
// cc GetExample Example application retrieving data from HBase  
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.HTable;  
import org.apache.hadoop.hbase.client.Result;  
import org.apache.hadoop.hbase.util.Bytes;  
  
import util.HBaseHelper;  
  
import java.io.IOException;  
  
import org.apache.hadoop.hbase.KeyValue;  
  
import java.util.List;  
public class GetExample {  
  
  public static void main(String[] args) throws IOException {  
    // vv GetExample  
    Configuration conf = HBaseConfiguration.create(); // co GetExample-1-CreateConf Create the configuration.  
    conf.set("hbase.zookeeper.property.clientPort", "2181");    
    conf.set("hbase.zookeeper.quorum", "jifeng01");    
    conf.set("zookeeper.znode.parent", "/hbase");  
    /*/ ^^ GetExample 
    HBaseHelper helper = HBaseHelper.getHelper(conf); 
    if (!helper.existsTable("testtable1")) { 
      helper.createTable("testtable1", "colfam1"); 
    } 
    */  
    //vv GetExample  
    HTable table = new HTable(conf, "testtable1"); // co GetExample-2-NewTable Instantiate a new table reference.  
  
    Get get = new Get(Bytes.toBytes("row-1")); // co GetExample-3-NewGet Create get with specific row.  
    get.setMaxVersions();  
    get.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));  
    Result result = table.get(get);  
    List<KeyValue> list = result.list();   
     for(final KeyValue kv:list){  
        // System.out.println("value: "+ kv+ " str: "+Bytes.toString(kv.getValue()));  
         System.out.println(String.format("row:%s, family:%s, qualifier:%s, qualifiervalue:%s, timestamp:%s.",   
                 Bytes.toString(kv.getRow()),   
                 Bytes.toString(kv.getFamily()),   
                 Bytes.toString(kv.getQualifier()),   
                 Bytes.toString(kv.getValue()),  
                 kv.getTimestamp()));       
     }  
    /* 
    get.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1")); // co GetExample-4-AddCol Add a column to the get. 
     
    Result result = table.get(get); // co GetExample-5-DoGet Retrieve row with selected columns from HBase. 
 
    byte[] val = result.getValue(Bytes.toBytes("colfam1"), 
      Bytes.toBytes("qual1")); // co GetExample-6-GetValue Get a specific value for the given column. 
 
    System.out.println("Value: " + Bytes.toString(val)); // co GetExample-7-Print Print out the value while converting it back. 
     
    */  
    // ^^ GetExample  
  }  
}  

输出结果:

row:row-1, family:colfam1, qualifier:qual1, qualifiervalue:welcome,hbase, timestamp:1410943676361.  
row:row-1, family:colfam1, qualifier:qual1, qualifiervalue:你好,广州, timestamp:1410942935244.  
row:row-1, family:colfam1, qualifier:qual1, qualifiervalue:你好,中国, timestamp:1410942917285.  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,512评论 1 41
  • Hbase架构与原理 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang所撰写的Goo...
    全能程序猿阅读 86,278评论 2 37
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 3,924评论 3 17
  • 1. HBase介绍,Hbase是什么? HBase -- Hadoop Database ,是一个高可靠、高性能...
    奉先阅读 3,728评论 1 36
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,561评论 0 52