Alex 的 Hadoop 菜鸟教程: 第7课 Hbase 使用教程

这篇教程介绍了如何在Hadoop的HBase中建立表,特别是列簇的概念及其作用。通过实际操作,展示了如何添加数据、使用scan、get等命令查询与获取数据,以及如何修改表结构、统计表数据。适合HBase初学者。
摘要由CSDN通过智能技术生成

原帖地址: http://blog.csdn.net/nsrainbow/article/details/38758375

声明:

  • 本文基于Centos 6.x + CDH 5.x 
  • 本例中 Hbase 是安装成集群模式的
本文通过建立student表等相关操作,简单介绍一下hbase的shell操作

建立student 表

使用 hbase shell命令进入hbase的命令行
[root@localhost conf]# hbase shell
2014-08-22 16:10:47,662 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.96.1.1-cdh5.0.1, rUnknown, Tue May  6 13:27:24 PDT 2014

然后用 create建立一个表,我们建立的表有如下属性
表名: student
列簇:sid, name, age

什么是列簇?

Hbase是面向列存储的数据库。Hbase中数据列是由列簇来组织的。一个列簇相当于你在mysql中这个表的多个列定义的总和。但是特别的是,一个表可以对多个列簇。具体列簇里面有哪些列是开始时不用指定的。暂时只需要知道这么多,等做了以后慢慢去理解消化,我们学习的时候一定要掌握方法,先做再想为什么这么做,是最高效的学习方式。

为什么要有列簇?

在同一个列簇中的列是存放在一个实例上的。所以对于列簇的理解我的猜测是这样的,刚开始可能没有列簇。虽然nosql是不用定义列的,但是由于我们的hadoop是分布式的,肯定会有一些列在这台机子上,有一些列在那些机子上,为了性能问题,需要弄出一个算法来把一些经常在一起使用的列放到一台机子上,最简单的算法就是由用户自己去定,这就产生了列簇,也就是列的集合,在同一个列簇中的列都在一个机子上。

说完了概念,我们来建立一下这个表
hbase(main):001:0> create 'student', 'info'
0 row(s) in 4.3300 seconds

=> Hbase::Table - student

增加数据

使用put增加一行,这里说的一行意思是:一个表的一个列簇中的一个行,在mysql中就相当于只增加 一行中的一列
hbase(main):002:0> put 'student','row1','info:name','jack'
0 row(s) in 0.1990 seconds
意思是往 student 的 name 列中插入一个值 jack
我们查一下这条数据
hbase(main):003:0> get 'student','row1','info:name'
COLUMN                        CELL                                                                               
 info:name                    timestamp=1408697225683, value=jack                                                
1 row(s) in 0.0490 seconds
查出来了。
怎么样?是不是感觉这么费劲才插入了一个行的一个列?这是以为hbase是基于google的工程师 Fay Chang (应该是个华裔) 的关于bigtable的论坛写的,而bigtable就是拥有超大列数的表格,大到什么程度?大到一台电脑放不下了,必须用多台电脑分布式的存放,才能放的下,所以数据的操作都是以一行一列为最小单位的。
这个row1 是rowkey

rowkey

行以rowkey作为唯一标示。Rowkey是一段字节数组,这意味着,任何东西都可以保存进去,例如字符串、或者数字。行是按字典的排序由低到高存储在表中


我们继续插入这行别的列
hbase(main):004:0> put 'student','row1','info:sid','1'
0 row(s) in 0.0200 seconds

hbase(main):005:0> put 'student','row1','info:age','22'
0 row(s) in 0.0210 seconds
然后我们用scan命令查询一下整个表
hbase(main):006:0> scan 'student'
ROW                           COLUMN+CELL                                                                        
 row1                         column=info:age, timestamp=1408697651322, value=22                                 
 row1                         column=info:name, timestamp=1408697225683, value=jack                              
 row1                         column=info:sid, timestamp=1408697640490, value=1                                  
1 row(s) in 0.0580 seconds

可以看到有三条记录,但是都是一个row里面的,这个row才是相当于mysql的一行
继续插入别的记录,最终结果是这样
hbase(main):005:0> scan 'student'
ROW                              COLUMN+CELL                                                                                  
 row1                            column=info:age, timestamp=1420817226790, value=22                                           
 row1                            column=info:name, timestamp=1420817205836, value=jack                                        
 row1                            column=info:sid, timestamp=1420817219869, value=1                                            
 row2                            column=info:age, timestamp=1420817278346, value=28                                           
 row2                            column=info:name, timestamp=1420817252182, value=terry                                       
 row2                            column=info:sid, timestamp=1420817267780, value=2                                            
 row3                            column=info:age, timestamp=1420817315351, value=18                                           
 row3                            column=info:name, timestamp=1420817294342, value=billy                                       
 row3                            column=info:sid, timestamp=1420817304621, value=3                                            
 row4                            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值