HBase环境部署

HBase环境部署_第1张图片
3.png
]( http://upload-images.jianshu.io/upload_images/3068725-574284fb7d9f4eac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
HBase可以被看做一个主-从架构的数据库

  • ** Master **:为HBase的主节点,用来协调客户端应用程序和RegionServer的关系,监控和记录数据库表的元数据的变化。一般来讲一个集群中有多个Master,而且一般和Hadoop中的NameNode运行同一主机上。
  • ** RegionServer **:为HBase的从节点,用region的形式存储实际的表。region是HBase表的基础单元。一般和Hadoop中的DataNode运行在同一主机上。
  • ** ZooKeeper **:用来选举集群主节点Master,维持只有一个master提供访问和运行,同时存储集群的元数据。

HBase的数据存储模型

HBase环境部署_第2张图片
2.png

** 行健(rowkey) **:是HBase表中每个记录的主键,可以提高查找 功能的速度。
** 列簇(column family) **:是一个字符串名称,包含一个或者多个列,这样做也是为了提高检索速度(检索所需的列的时间更快)。
** 列 **:列一定属于某一个列簇。
** 版本(version) **:一个单元格可以保存多个值,一个version代表着一个单元格可以同时存储几个值。
** 时间戳(timestamp) **:对于每条插入的数据,当前的时间戳与值是相关的,它表示了数值插入到这个单元格中的时间。
** 单元格 :最小的存储单元,是一行的一个列中的实际值, 值都是用字节数组存储的 **
** namespace **:hbase中数据库的概念,表名对应有一个namespace

综上所述,插入一个单元格数据必须包含
** rowkey+columnfamily(列簇名)+columname(列名)+timestamp:value **
其中rowkey+列簇名+列名 确定一个单元格;
rowkey+列簇名+列名+timestamp 确定一个单元格中的一个值。

安装部署伪分布式HBase

  1. 启动hadoop


    HBase环境部署_第3张图片
    3.png
  2. 启动zookeeper


    4.png
  3. 下载解压hbase


    5.png
  4. 修改配置文件
  • hbase-env.sh文件
    export JAVA_HOME=/opt/modules/jdk1.7.0_67
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
    export HBASE_MANAGES_ZK=false
  • hbase-site.xml文件
  
        
        hbase.tmp.dir
        /opt/modules/hbase-0.98.6-hadoop2/datas
  
  
        
        hbase.rootdir
        hdfs://bigdata-00:8020/hbase
  
  
        hbase.cluster.distributed
        true
  
  
        
        hbase.zookeeper.quorum
        bigdata-00
 
  1. 启动hbase
$ bin/hbase-daemon.sh start master
$ bin/hbase-daemon.sh start regionserver
HBase环境部署_第4张图片
6.png

登陆web界面查看(bigdata-00:60010)


HBase环境部署_第5张图片
7.png

HBase中shell的基本使用

进入hbase命令行bin/hbase shell
list_namespace查看有哪些namespace

8.png

create_namespace 'test'创建一个namespace,后面接namespace名
describe_namespace 'test'描述一个namespace
9.png

drop_namespace 'test'删除一个namespace
list查看有哪些表
create 'ns:表名','列簇名'
describe 'ns:表名'显示表的详细信息
HBase环境部署_第6张图片
10.png

drop 'ns:tbname'删除一个表
put 'ns:tbname','行键','列簇:列名','值'插入一个数据
get 'ns:tbname','行键','列簇','列'获取一个单元格的数据,如果不加后面的列簇和列,即为获取一行的数据。
scan 'ns:tbname'查看一个表的所有数据
HBase环境部署_第7张图片
11.png

scan 'nstest:tb1',{STARTROW => '20161119_10001',STOPROW => '20161119_10003'}scan+过滤条件查询数据
delete 'ns:tbname','键值','列簇:列名'删除一个值

HBase表的物理模型

HBase在实际的存储中,每个列簇存储在单独的一个HDFS上。表格中的行都是按照RowKey字典序列进行排序的,并且表格在行的方向上被分割为多个Region。如下图:


HBase环境部署_第8张图片
12.png

如下图,表A按照行被分为相等大小的4个Region,这些Region分别被RegionServer管理,但是每个RegionServer可以管理不同表格中的Region。为了负载尽量相同,每个RegionServer管理的Region数据基本上是相同的。


HBase环境部署_第9张图片
13.png

HBase环境部署_第10张图片
15.png

Region是按照大小进行分割的,每个表最开始只有一个Region,随着数据增多,Region不断增大,当增大到一个阈值的时候,Region就会等分成两个新的Region,之后的过程也同样,随着数据量的增加,不断分割Region。
HBase环境部署_第11张图片
14.png

Region虽然是分布式存储的最小单元,但不是存储的最小单元

  • 一个Region由一个或多个Store组成,每个Store保存一个列簇
  • 每个Store又由一个memStore和0到多个StoreFile
  • memStore存储在内存中,StoreFile存储在HDFS中
  • memStore是内存中的写入缓冲区,HBase写入数据到硬盘之前是将数据累积在memStore中,当这个内存缓冲区写满后将数据写到StoreFiel上。
  • 每个Region包含一个HLOG,它是预写式日志WAL,但存储数据的时候只有当把数据写入到WAL和每个Store中的memStore才算成功,这样可以保证数据的安全性。


    HBase环境部署_第12张图片
    16.png

你可能感兴趣的:(HBase环境部署)