HBase使用例子(中文翻译)drop table if exists admin
通过编码(java)的形式对HBase进行一系列的管理涉及到对表的管理、数据的操作等。
1  对表的创建、删除、显示以及修改等,可以用HBaseAdmin 一旦创建了表,那么可以通过HTable 实例来访问表,每次可以往表里增加数据。
2  插入数据
创建一个Put 象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put) 提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。
3  获取数据
要获取数据,使用Get 象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过(Get) 调用。
4  浏览每一行
通过Scan 以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan 相当于一个游标,通过next()来浏览下一个,通过调用Scanner(Scan) 来返回一个ResultScanner对象。(Get)Scanner(Scan) 都是返回一个Result Result是一个KeyValue 链表,
5  删除
使用Delete 删除记录,通过调用HTable.delete(Delete) 执行删除操作。(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。)
6 
7  新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。
8  簇(cluster)的访问
客户端代码通过ZooKeeper来访问到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要到文件l
下面是一个例子,假定你已经创建了一个表:myTable,还有一个column family(这个不到合适的翻译词语):myColumnFamily
HBaseHadoop的一个子项目,HBase采用了Google BigTable的稀疏的,面向列的数据库实现方式的理论,建立在hadoophdfs,一方面里用了hdfs的高可靠性和可伸缩行,另外一方面里用了BigTable的高效数据组织形式.可以说HBase为海量数据的real-time相应提供了很好的一个开源解决方案.据说在某运营商中使用类似于BigTable(个人猜测应该就是HBase)的技术可以在两秒时间内从2TB数据中查到某条话费记录.而这是原来该运营商使用Oracle数据库所无法解决的问题.
    对于HBase使用的类似与BigTable的技术我们这里就不仔细描述,可以参考google的论文以及网上的一些相关资料.另外,HBase的配置在HBase的官方文档中有很详细的描述.可以参见相关文档.
    HBase提供了一个类似于mysql等关系型数据库的shell.通过该shell我们可以对HBase的内的相关表以及列族进行控制和处理.HBase shellhelp命令比较详细的列出了HBase所支持的命令.具体使用方法可以参见其文档.
   
    这里我们用一个学生成绩表作为例子,HBase的基本操作和基本概念进行讲解:
下面是学生的成绩表:
name grad      course:math   course:art
Tom    1            87                    97
Jerry  2            100                  80
    这里grad对于表来说是一个列,course对于表来说是一个列族,这个列族由两个列组成:mathart,当然我们可以根据我们的需要在course中建立更多的列族,computer,physics等相应的列添加入course列族.
    有了上面的想法和需求,我们就可以在HBase中建立相应的数据表啦!
1, 建立一个表格 scores 具有两个列族grad courese
hbase(main):002:0> create 'scores', 'grade', 'course'
0 row(s) in 4.1610 seconds
2,查看当先HBase中具有哪些表
hbase(main):003:0> list
scores
1 row(s) in 0.0210 seconds
3,查看表的构造
hbase(main):004:0> describe 'scores'
{NAME => 'scores', IS_ROOT => 'false', IS_META => 'false', FAMILIES => [{NAME => 'course', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}, {N
AME => 'grade', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}]}
1 row(s) in 0.0130 seconds
4, 加入一行数据,行名称为 Tom 列族grad的列名为”” 值位1
hbase(main):005:0> put 'scores', 'Tom', 'grade:', '1'
0 row(s) in 0.0070 seconds
5,Tom这一行的数据的列族添加一列 <math,87>
hbase(main):006:0> put 'scores', 'Tom', 'course:math', '87'
0 row(s) in 0.0040 seconds
6,Tom这一行的数据的列族添加一列 <art,97>
hbase(main):007:0> put 'scores', 'Tom', 'course:art', '97'
0 row(s) in 0.0030 seconds
7, 加入一行数据,行名称为 Jerry 列族grad的列名为”” 值位2
hbase(main):008:0> put 'scores', 'Jerry', 'grade:', '2'
0 row(s) in 0.0040 seconds
8,Jerry这一行的数据的列族添加一列 <math,100>
hbase(main):009:0> put 'scores', 'Jerry', 'course:math', '100'
0 row(s) in 0.0030 seconds
9,Jerry这一行的数据的列族添加一列 <art,80>
hbase(main):010:0> put 'scores', 'Jerry', 'course:art', '80'
0 row(s) in 0.0050 seconds
10,查看scores表中Tom的相关数据
hbase(main):011:0> get 'scores', 'Tom'
COLUMN                      CELL
 course:art                  timestamp=1224726394286, value=97
 course:math                timestamp=1224726377027, value=87
 grade:                      timestamp=1224726360727, value=1
3 row(s) in 0.0070 seconds
11,查看scores表中所有数据
hbase(main):012:0> scan 'scores'
ROW                          COLUMN+CELL
 Tom                        column=course:art, timestamp=1224726394286, value=97
 Tom                        column=course:math, timestamp=1224726377027, value=87
 Tom                        column=grade:, timestamp=1224726360727, value=1
 Jerry                        column=course:art, timestamp=1224726424967, value=80
 Jerry                        column=course:math, timestamp=1224726416145, value=100
 Jerry                        column=grade:, timestamp=1224726404965, value=2
6 row(s) in 0.0410 seconds
12,查看scores表中所有数据courses列族的所有数据
hbase(main):013:0> scan 'scores', ['course:']
ROW                          COLUMN+CELL
 Tom                        column=course:art, timestamp=1224726394286, value=97

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。