Hbase

作者: ___Hello | 来源:发表于2018-09-08 17:37 被阅读0次

    就是一数据库
    但是,是非关系型数据库(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操作

    本地操作

    相关文章

      网友评论

          本文标题:Hbase

          本文链接:https://www.haomeiwen.com/subject/ckflgftx.html