hadoop6-Hbase入门

来源:互联网 发布:平井一夫 知乎 编辑:程序博客网 时间:2024/06/07 09:37

像计算机这门学科,光看书是远远不够的,还要多动手,去谈谈究竟,才会深入理解。就比如说TCP/IP协议栈,光看《TCP/IP协议详解》是远远不够的,还要学会写网络程序,在写的过程中,你可能会遇到各种各样的问题,这样就会促使回去再去仔细研究书本的内容,加深理解同时使得印象深刻。


Hadoop家族现在包含很多组件,其中就包括Hbase

1. Hbase产生的背景

Hbase主要起源于Google的三大论文之一的BigTable,主要是Google为解决海量数据存储而设计,因为Google每天要爬取全球数以千计的页面,因此存储他们的URL就需要海量存储数据库,在这种背景下,也就诞生了BigTable,Hbase是BigTable的开源实现,值得一提的是,Hbase并不是传统的RDBMS,而是NoSQL,或者更准确的称之为列数据库。


2. Hbase的应用场景

很显然,Hbase一般用于海量数据的存储,海量大概是一个怎样的量级?大约是billion(十亿)*million(百万),而一般的关系型数据库存储量大概在500万行*30列,超过这样的规模,关系型数据库就会难以处理,另外Hbase还支持动态扩容。


3. Hbase入门

入门Hbase应该通过哪种方式?无非就是玩玩呗

单机版的伪分布式Hbase特别好安装,可以下载下来玩一下。可以按照如下步骤简单的配置单机版本的Hbase

 (1)下载Hbase

 (2)解压

 (3)修改配置文件,主要是conf目录下的hbase-env.sh与hbase-site.xml,

               在hbase-env.sh中,只需要修改JAVA_HOME

               在hbase-site.xml,只要添加,这一项配置hbase的数据存储的路径,这里处于方便,选择本地文件系统           

<property>    <name>hbase.rootdir</name>    <value>file:///DIRECTORY/hbase</value>  </property>

 (4)启动hbase服务,./bin/start-hbase.sh

           启动hbase shell,./bin/hbase shell

          上面的步骤都完成后,就可以体验一下hbase的使用了

hbase有以下几个常用命令,(创建/删除表,增删改查数据)

1. create 创建表

2. put      向表中插入数据

3. get      查询

4. delete 删除数据

5. scan  扫描表中数据

6. enable/disable 启用/禁用表

7. drop  删除表

在使用hbase之前,要大概了解几个概念,数据模型,行健,列族,列,值,版本

数据模型是hbase中的核心概念之一,意即数据在hbase的逻辑结构。主要包括

1. 行健

行健是不可分割的字节数组,按照字典顺序由低到高存储在hbase表中

2. 列族

列族是一些列的集合,一个列族所有成员都有相同的前缀。

3. cell

{row, column, version} 元组就是一个HBase中的一个 cell

4. 版本

一个 {row, column, version} 元组是HBase中的一个单元(cell).但是有可能会有很多的单元的行和列是相同的,可以使用版本来区分不同的单元。

rows和column key是用字节数组表示的,version则是用一个长整型表示。

在HBase中,版本是按倒序排列的,因此当读取这个文件的时候,最先找到的是最近的版本。

在了解了这些内容以后,就可以开始玩玩hbase了。

新建表test,插入几条数据

hbase(main):009:0> create 'test','info'0 row(s) in 1.2220 seconds=> Hbase::Table - testhbase(main):010:0> put 'test','row1','info:username','xiaowang'0 row(s) in 0.0110 secondshbase(main):011:0> put 'test','row1','info:age','18'0 row(s) in 0.0070 secondshbase(main):012:0> put 'test','row1','info:sex','female'0 row(s) in 0.0060 secondshbase(main):013:0> put 'test','row2','info:username','xiaoli'0 row(s) in 0.0060 secondshbase(main):014:0> put 'test','row1','info:age','19'
查询表test中的数据
hbase(main):016:0> scan 'test'ROW                                        COLUMN+CELL                                                                                                                  row1                                      column=info:age, timestamp=1503579647541, value=19                                                                           row1                                      column=info:sex, timestamp=1503579618284, value=female                                                                       row1                                      column=info:username, timestamp=1503579596404, value=xiaowang                                                                row2                                      column=info:username, timestamp=1503579631661, value=xiaoli


需要说明的几点:

(1). 创建表的时候,需要同时提供表名和列族(Version是可选的,代表存储几个Version)

(2). 向表中插入数据的时候,顺序依次是 表名,行健,‘列族:列名’,‘值’,其中列族不能省略,如省略会有如下提示

ERROR: Unknown column family! Valid column names: info:*,未知列族名

(3). 刚才在向表中插入数据的时候,我们插入两条行健为row1的的年龄,这样的话,后插入的年龄就会覆盖之前插入的(假设存储的Version版本数为1)

(4). 另外可以看到,hbase表中,数据是按照字典顺序存储的,先按照行健的字典顺序,在按照cell的字典顺序


4. Hbase的运行模式

因为要快速体验Hbase,上面选取了最简单的单机运行模式,这种一般不会在生产环境中用到。

简单介绍一下Hbase的运行模式

1. 单机伪分布式

2. 全分布式

3. 高可用运行模式

第1,2点比较好理解,2中全分布式下,只有一台master,当这台master挂掉后,服务就不可用了。

第3点为了提高Hbase的可用性,通常是要同时运行两台master,一台用于服务,另外一台备用,其他的作为RegionServer,这样的话,当一台master挂掉以后,另外一台master可以迅速切换成运行模式,向外提供服务,从一定程度上保障了服务的高可用性。


5. Hbase中有哪些可以研究的部分

 基本的自然不必说,首先是学会使用,包含搭环境,shell,API等使用方式

 Hbase的架构

 Hbase的索引,在海量数据存储的情况下,为什么可以在几百ms内查询到数据?

 Region分割的时机

 RPC机制

 想到在补充吧,先写这么多!


参考:

官方文档:http://hbase.apache.org/

中文文档:http://abloz.com/hbase/book.html

原创粉丝点击