zoukankan      html  css  js  c++  java
  • 认识HBase

    • NoSQL与关系型数据库的区别

    • HBase是什么?

    • HBase架构

    • HBase原理

    • HBase写入和读取数据

    1.  什么是NoSQL?

    • NoSQL的全称是Not Only SQL,这个概念早就有人提出,在09年的时候比较火,NoSQL指的是关系型数据库,而我们常用的都是关系型数据库。就像我们常用的MySQL一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量,高并发的时候力不从心。在这个时候NoSQL得到长足的发展。

      它与关系型数据库的区别

    1. 存储方式
      • 关系型数据库是表格式的,因此存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而NoSQL数据库则与其相反,他是大块的组合在一起。通常存储在数据集中,就像文档,键值对或者图结构
    2. 存储结构
      • 关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的定义),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而NoSQL数据库基于动态结构,使用与非结构化数据。因为NoSQL 数据库是动态结构,可以很容易适应数据类型和结构的变化
    3. 存储规范
      • 关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而NoSQL 数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体, 这样整块数据更加便于读
    4. 存储扩展
      • 这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而NoSQL 数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
    5. 查询方式
      • 这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而NoSQL 数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
    6. 事务
      • 这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而NoSQL 数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
    7. 性能
      • 关系型数据库为了维护数据的致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。而NoSQL存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的一致性是弱要求。NoSQL无需sg!的解析,提高了读写性能。
    8. 授权方式
      • 关系型数据库通常有SQL Server, Mysal, Oracle。 主流的NoSQL数据库有redis,memcache, MongoDb。 大多数的关系型数据库都是付费的并且价格昂贵,成本较大,而NoSQL数据库通常都是开源的。

      市场上常见的NoSQL数据库

      • Redis
      • Memcache
      • MongoDb
      • HBase

    2.  HBase是什么?

    • HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个 开源项目,是横向扩展的。  
      HBase是一个 数据模型,类似于谷歌的大表设计(Big Table),可以提供快速随机访问海量结构化数据。
      它利用了Hadoop的文件系统(HDFS)提供的容错能力。它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的部分。
      人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。HBase在Hadoop的文件系统之 上,并提供了读写访问。
    • HBase的特点
      • HBase线性可扩展
      • 它具有自动故障支持
      • 它提供了一致的读取和写入
      • 它集成了Hadoop,作为源和目的地
      • 客户端方便的javaAPI
      • 它提供了跨集群数据复制

    2.  HBase架构

    HBase是个面向列的数据库, 在表中它由行排序表模式定义只能列族,也就是键值对。一个表有多个列族以及每个列族可以有任意数量的列。 后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:

      • 表示行的集合
      • 行是列的集合
      • 列族是列的集合
      • 列是键值对的集合
      • 这里说的列式存储或者说面向列,其实就是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候必须指定

    HBase数据模型示例

      • RowKey(Rowide)  行键
        • RowKey是用来表示唯一一行记录的主键,Rowkey行键可以是任意字符串每一行有一个唯一列Row key,必须是唯一的,按照字典序来排序的,按位比较的(有比没有大)
      • ColumnsFamily  列族
        • 列族:HBase表中的每个列,都归属于某个列族,必须在使用表之前定义。列名都以列族作为前缀。
      • Cell  列
        • HBase表中唯一确定的单元,cell中的数据时没有类型的,全部是字节码形式存储
      • TimeStamp   时间戳
        • 每个cell都保存这同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64整型,时间戳可以有HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。每个cell中,不同版本的数据按照时间倒序排序,最新的排在最前面
    • HBase和RDBM(关系型数据库)的比较

    • HBase表模型的要点

      • 1、一个表,有表名

        2、一个表可以分为多个列族(不同列族的数据会存储在不同文件中)3.表中的每行有个”行键rowkey" ,而且行键在表中不能重复4、表中的每对kv数据称作一个cell

        5. hbase可以对数据存储多个历史版本(历史版本数量可配置)

        6.整张表由于数据量过大,会被横向切分成若干个region (用rowkey范围标识), 不同region的数据也存储在不同文件中

        7. hbase会对插入的数据按顺序存储:

        要点一:首先会按行键排序

        要点二:同一行里面的kv会按列族排序,再按k排序

    3.  执行流行图



    • Client
      • 使用HBaseRPC机制与HMAster和HRegionServer进行通信
      • Client与HMaster进行管理类操作
      • Client与HRegionServer进行数据读写类操作
    • Zookeeper
      • ZookeeperQuorum存储-ROOT-表地址,HMaster地址
      • HRegionServer把自己注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况
      • Zookeeper避免HMaster单节点问题
    • HMaster
      • HMaster没有单点问题,HMaster可以启动多个HMaster,通过Zookeeper保证总有一个Master在运行,主要负责:
        • 主要负责Table和Region的管理工作
        • 管理用户对表的增删改查
        • 管理HRegionServer的负载均衡,调整Region分布
        • RegionSplit后,负责新Region的分布
        • 在HRegionServer停机后,负责失效HRegionServer上Region迁移
    • HRegionServer
      • HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写
    • Column Family
      • 就是一个集中存储单元,将具有相同IO特性的Column放在一个ColumnFamily会更高效
    • HStore
      • HBase存储的核心。由MemStore和StoreFile组成。MemStore是Stored Memory Buffer
    • HLog
      • 引入HLog的原因:在分布式环境中,无法避免系统出错或者待机,一旦HRegionServer意外退出,MemStore的内存数据就会丢失,引入HLog就是防止这种情况的发生
    • HBase存储什么数据类型
      • 只支持byte[]
      • 包括了:rowkey,key,value,列族名,表名

    4.  HBase写入和读取数据

    • 写入操作:



      1. Client通过Zookeeper的调度,向RegionServer发出写数据请求, 在Region中写数据;
      2. 数据被写入Region的MemStore,知道MemStore达到预设阀值(即MemStore满);
      3. MemStore中的数据被Flush成-一个StoreFile;
      4. 随着StoreFile文件的不断增多,当其数量增长到定阀值后,触发Compact合并操作, 将多个StoreFile台并成一个StoreFile, 同时进行版本合并和数据删除;
      5. StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile;

      6. ⑤单个StoreFle大小超过一定祸值后,触发splt操作,把当前Regio Splt成2个新的hReg on。父Region会下线,新 lit出的2个子BReion会被HMlaster分百到相应的Regionsever上,使候
        原先1个Region的压力得以分流到2个Region上。

    • 读出操作

      1. Client访问Zookeeper,查找-ROOT-表,获取.META.表信息;
      2. 从.META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer;通过RegionServer获取需要查找的数据;
      3. 通过RegionServer获取需要查找的数据
      4. RegionServer的内存分为MemStore和]BlocCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据
      5. 寻址过程: client—>Zookeeper—>ROOT表—>.META.表—>RegionServer—>Region—>client
  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/wyk1/p/14071294.html
Copyright © 2011-2022 走看看