zoukankan      html  css  js  c++  java
  • 大数据之路Week10_day01 (Hbase总结 II)

    Hbase是数据库

    特点:

      1.面向列:Hbase是面向列的存储和权限控制,并支持独立索引。列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段时,能大大减少读取的数据量。

      2.多版本:Hbase每一个列的存储有多个Version(这个版本是针对列簇来说的)。

      3.稀疏性:为空的列不占用存储空间,表可以设计得非常稀疏。

      4.扩展性:底层依赖HDFS。

      5.高可靠性:WAL机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且Hbase底层使用HDFS,HDFS本身也有备份。

      6.高性能:底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能真对Rowkey的查询能到达到毫秒级别。

    数据量

      十亿级别的行

      百万级别的列

    速度快的原因

      充分利用内存

      使用了LSM结构

      缓存机制

      文件是顺序读的

    数据模型

      rowkey

        相当于MySql中的主键,唯一标识一行记录

        rowkey是字典顺序

        rowkey的长度最长是64k,但是一般推荐10-100字节

      colunm family

        一组列的集合

        列簇必须作为表的schema定义给出

        列簇是权限,存储的最小单元

      qulifier

        列

        可以动态的,随机的插入

        表定义之后没有限制列,随着值得插入也把列插入

        列必须归属某一个列簇

      timestamp

        时间戳,64位,精度是毫秒

        起版本号的作用,一个cell中可以存多个版本的数据

        时间戳可以自己当以,但是一般不推荐!!

      cell

        存储数据的最小单元(逻辑概念,实际存储中并没有这个)

        存储的是K-V格式的数据

          K:  rowkey + colunm family + qulifier + timestamp

          V:  value

        hbase的cell存储数据的时候没有类型的区分,存放的都是字节数组

    架构

      hbase是主从架构

      角色

        client

          操作hbase的入口,命令行,API,并维护客户端缓存

        zookeeper

          保证任何时刻集群中有且仅有一台active的hmaster

          存储所有region的寻址入口,所有regoin元数据存储在哪一台regionserver

          监控regonserver的上线和下线信息,并实时通知Hmaster

          存储相关表的schema数据

        Hmaster

          分配region

          保证整个集群中的所有regionserver的负载均衡 

          当发现某一台regoinserver宕机之后,重新分配上面的region

          当region变大的时候,Hmaster去分配region到哪一台regionserver

        HRegionServer

          负责接受客户端的读写请求,处理对于region的IO

          当某一个region变大之后,负责等分两个region

        region

          相当于表的概念,一张表至少对应一个region

          当表的数据过大的时候,region会发生裂变

        store

          相当于列簇

          角色:

            memstore

              位于内存

              每一个store有一个memstore

            storefile

              磁盘的存储空间,将数据持久化的存储位置

              每一个region有一个或者多个storefile

              storefile可以进行合并操作

          存储结构:使用了LSM的数据模型

        WAL:

          write ahead log (预写日志)

          防止数据丢失

          先写内存,再向HDFS上溢写,但是是异步的方式

            先写到memstore,然后memstore达到一个阈值,memstore到一个消息队列中,原来的regon会生成一个新的memstore,再通过这个消息队列,向storefile中写数据,异步的方式。

    读写流程

      读流程

        1、客户端向zookeeper中发送请求

        2、从ZK中拿到metadata的存储节点

        3、去存储metadata的节点获取对应的region的所在位置

        4、访问对应得regon获取数据

        5、先去memstore中查询数据,如果有,直接返回

        6、如果没有查询到结果,去blockcache查找数据,如果找到,直接返回

        7、如果没有找到,就去storefile中查找数据,并将查询到得结果缓存到blockcache中,方便下一次查询

        8、将结果返回给客户端

        注意:blockchache是缓存,有大小限制,会有淘汰机制,默认将最早得数据淘汰

      写流程

        1、client向ZK发送请求

        2、从ZK中拿到metadata得存储节点

        3、去存储metadata的节点获取对应的region所在的位置

        4、访问对应的region进行写数据

        5、首先会向WAL中写数据,写成功之后才会存储到memstore

        6、当memstore中的数据量达到阈值之后,进行溢写,溢写成storefile

        7、store file是一个个的小文件,会进行合并(minor(部分合并)   ,  major(一个regon下面的都进行合并))

        8、store file 是对Hfile的封装,Hfile是实际存储在HDFS上的数据文件

  • 相关阅读:
    样式
    读取网页图片(包含代理)
    C# 替换“换行符”写法
    Iframe中弹出消息问题
    程序list
    C#对象序列化
    软件工程——个人总结
    软件工程——团队作业4
    软件工程———团队答辩
    软件工程--团队作业三
  • 原文地址:https://www.cnblogs.com/wyh-study/p/12167407.html
Copyright © 2011-2022 走看看