8、Hbase

hive  数据仓库,不能做到实时读写

gfs->hdfs
mapreduce->mapreduce
bigtable->hbase

Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables
                      随机、实时读写(内存)
-- billions of rows X millions of columns
        百万行
-- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's 
                                                            非关系型
Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System,
Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
 
特点:
  高可靠、高性能、面向列、可伸缩(当某列没值时,不占空间)、实时存储的分布式数据库
  存储非结构化和半结构化的松散数据(列存NoSQL数据库)
  利用hdf、mapreduce、zookeeper(作为其分布式协同服务)

 

mongodb   文档数据库{:{:,:,:{}}}

 

 

逻辑存储结构

  

由row key、 cloumn(=<family>+<qualifer>)、version唯一确定数据

一个列族,是1-n个文件

 

架构

 

HRegion  表
Store   列族
MemStore  内存
StoreFile 磁盘文件:hbase里的名称
HFile    磁盘文件:hdfs里的名称    ,两者等候室一个文件,不同的封装 

当有数据更新时,会有一个程序帮助我们检索;以保证缓存中的数据是新的

 

 

 

client
    包含访问HBase的接口并维护cache来加快对HBase的访问

Zookeeper
    保证任何时候,集群中只有一个活跃的master
    存储所有的Region的所在Server
    实时监控Region Server的上线和下线信息,并实时通知Master
    存储HBase的schema和table元数据
Master
  为Region Server分配Region
  负责Region Server的负载均衡器
  发现失效的Region Server并重新分配其上的region (真正的数据,保存在hdfs上)
  管理用户对table的增删改查
Region Server
  Region Server 维护Region,处理对这些region的IO请求
  Region server 负责切分在运行过程中变得过大的region
Region
  HBase自动把表水平划分为多个region,每个region会保存一个表里面某段连续的数据
  每各表一开始只有一个Region,随着数据不断插入表,region不断增大,当增大到一个阈值的时候,region就会等分为两个新的region
  当table中的行不断增多,就会有越来越多的region。这样完整的表被保存在多个regionserver上。

Memstore 与Storefile
  一个region由多个store组成,一个store对应一个CF(列族)
  store包括位于内存中的memstore和位于磁盘的storefile写操作先写入metastore。当memstore中的数据达到某个阈值,hregionserver会启动
    flashcache进程写入storefile,每次写入形成单独的一个storefile
  当storefile文件的数量增长到一定阈值时,系统会进行合并(minor、majar compaction),在合并过程中会进行版本合并和删除工作(majar),
    形成更大的storefile

  当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver
    服务器,实现负载均衡,
  客户端检索数据,现在memstore找,找不到去blockcache,找不到再去storefile,
当找到后往blockcacke中缓存(LRU算法)
        缓存更新确认: 当磁盘中存在新的数据比blockcache 新,在内存中会有一个索引提醒 有新的文件生成。
  memstore  ->  index( blockcache + storefile )   index会时刻发生变化
 

 

 

 

 

HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRgion可以分布在不同的HRegion上
HRegion由一个或多个Store组成,每个store保存一个columns family
每个Store又由一个memstore和 0至多个storefile组成。 storefile以hfile格式保存在hdfs上

 

 

 

搭建

echo  -e '#
export HBASE_HOME=/opt/bigdata/hbase-2.2.5
export PATH=$PATH:$HBASE_HOME/bin
'> /etc/profile
单点
单机部署 :zookeeper、hmaster、hregion server都在一个JVM进程中

echo  -e '#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"
'> /opt/bigdata/hbase-2.2.5/conf/hbase-env.sh 

echo
-e '<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>file:///home/ace/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/ace/zookeeper</value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property>
<!--合并storefile文件配置-->
<property>
   <name>hbase.server.thread.wakefrequency</name>
   <value>1</value>
</property>
<property>
  <name>hbase.hregion.compactchecker.interval.multiplier</name>
  <value>1</value>
</property>
</configuration>
'> /opt/bigdata/hbase-2.2.5/conf/hbase-site.xml

分布式
```
yum install ntpdate
ntpdate ntp1.aliyun.com
``` 

```
ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa.pub node01(节点名称)
```
echo  -e '#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"
HBASE_MANAGES_ZK=false
# 禁用HBASE自带的Zookeeper
'> /opt/bigdata/hbase-2.2.5/conf/hbase-env.sh 

echo  -e '<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://mycluster/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node02,node03,node04</value>
  </property>
</configuration>'> /opt/bigdata/hbase-2.2.5/conf/hbase-site.xml

echo  -e '
node02
node03
node04
'> /opt/bigdata/hbase-2.2.5/conf/regionservers

echo  -e '
node04
'> /opt/bigdata/hbase-2.2.5/conf/
backup-masters

cp /opt/bigdata/hadoop-3.1.3/etc/hadoop/hdfs-site.xml /opt/bigdata/hbase-2.2.5/conf

 

 

[root@node01 ~]# start-hbase.sh                  master在该节点启动
node01:16010/ HMaster  提供的UI
hbase-daemon.sh start master

 

操作
hbase(main):011:0> create 'table_psn' , 'cf1' 'cf2'
hbase(main):011:0> descibe 'table_psn'
hbase(main):011:0> scan 'hbase:meta'
hbase(main):011:0> put 'table_psn','row_key','cf1:key','value'
row_key  是字符串类型,字典序排列

hbase(main):011:0> flush 'table_psn'
[ace@node01 cf]$ hbase hfile -p -f file:///home/ace/hbase/data/default/test/89ee2c531921279dd81754ffcaec7e77/cf/a59334e4cc5747ff94fc350e36a7a018 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/bigdata/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/bigdata/hbase-2.2.5/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2020-07-09 00:20:44,437 INFO  [main] metrics.MetricRegistries: Loaded MetricRegistries class org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl
K: row2/cf:b/1594223767377/Put/vlen=6/seqid=4 V: value2
K: row_key/cf:key/1594224911692/Put/vlen=5/seqid=5 V: value
Scanned kv count -> 2

 

 

 

 
posted @ 2020-07-08 14:11  慕沁  阅读(128)  评论(0)    收藏  举报