Hbase

2018-09-08  本文已影响0人  ___Hello

就是一数据库
但是,是非关系型数据库(NoSql)【关系型数据库 vs 非关系型数据库(自行了解)】

特点

解释面向列:
数据库存储分两种 行存储列存储

image.png

总结:
行存储适合小数据量写,列存储适合大数据量读

总结

Hbase适合海量数据存储
快速随机访问
大量写操作应用

非结构化信息 -》Hbase -》结构化存储

Hbase数据模型

从逻辑上理解几个概念:

image.png

行健RowKey:一定是按照字节顺序存储的,方便查询 byte array
列族ColumnFamily:类型
列Column:元数据
版本VersionNumber:默认值时间戳 Long类型
值Value:就是字面量

拆分理解:
image.png

上面的表存储了2行记录,a行,b行
a行有2个列族, cf1,cf2,
cf1列族有2个列,"bar" , "foo"
bar列有2个版本,583,261
583版对应着1个值 7

这就是三维有序
按照三维去排序,前两维是字节顺序,第三维是倒序

image.png

从物理上理解存储

image.png

一张表,是

image.png

region:
按行划分region,如上图1-50行是regionA,50-100行是regionB
会按照大小分割,每张表一开始只有一个region,随着记录逐渐增多,达到一个阈值,等分成2个region

 逻辑概念              物理概念  
 Region                Hregion
 RegionServer机器          HregionServer

 HregionServer 包含很多 Hregion
 Hregion 包含很多 Hstore  
 Hstore 由2部门组成 Memstore StoreFile   内存与磁盘
 Hsore 与 column family 对应

架构

client、zookeeper 、hmaster、hregionServer
hmaster:负载均衡,管理分配hregion,管理table元数据,权限控制
hregionServer:存储hregion,读写hdfs管理table数据
hregionServer上可以存1000个hregion
zk负责与master,与regionserver交互
client缓存rowkey -> hregion 关系
memstore写缓存,每个cf上都有自己memstore,因为cf与hstore对应
blockcache读缓存,
hlog避免数据丢失,在hregion共享,先写hlog(WAL),再写memstore

每次写log时,首先HbaseClient 寻址,.Meta 对应着 hregionServer 的 region,
检查数据是否存在memstore中,存在就退出
不存在先写hlog(hdfs),然后写memstore,写成功后返回

memstore益写到storefile ,导致storefile 会冗余,通过时间戳或者标记等字段storefile会有combine操作,

表结构设计

rowkey
目的:减少数据倾斜
策略:逆排序,hash(md5,crc32)
cf
策略:尽量少,1-2个,因为flush与region合并时,触发基本单位是region级别
这个flush是指memstore flush filestore

实践

安装

0.98.6
①:安装

tar zxvf hbase-0.98.6-hadoop2.tar.gz

②:配置./bashrc

   export HBASE_HOME=/opt/hbase-0.98.6-hadoop2
   export PATH=$PATH:$HABSE_HOME/bin 

3:配置conf/hbase.env.sh

    export HBASE_MANAGES_ZK=true
    export JAVA_HOME=/usr/local/src/jdk1.8.0_181

④:配置conf/hbase.site.xml

 <configuration>
     <property>
         <name>hbase.rootdir</name>
         <value>hdfs://master:9000/hbase</value>
     </property>
     <property>
         <name>hbase.cluster.distributed</name>
        <value>true</value>  false表示单机模式,true表示分布式模式
     </property> 
     <property>
         <name>hbase.zookeeper.quorum</name>
         <value>master,slave1,slave2</value>
     </property>
     <property>
         <name>dfs.replication</name>
         <value>2</value>
     </property>
 </configuration> 

5:配置conf/regionservers

  slave1
  slave2

⑥:分发到othersNode

  scp -rp hbase-0.98.6-hadoop2  slave1: /opt/
  scp -rp hbase-0.98.6-hadoop2  slave2: /opt/

⑦:启动hbase

./start-hbase.sh
进程验证:jps验证hmaster、hregionServer进程
页面验证:http://master:60010/master-status
命令行验证:./bin/hbase shell    进入终端  status

shell操作

python操作

本地操作
集群操作

java操作

本地操作

上一篇下一篇

猜你喜欢

热点阅读