美文网首页Java相关
大数据 - Hbase

大数据 - Hbase

作者: 万福来 | 来源:发表于2020-04-03 17:41 被阅读0次

大数据 - Hbase

Hbase介绍

Hbase是一种分布式NoSql数据库,不支持sql作为查询语言。

  • 强读写一致,但是不是最终一致性的数据存储,非常适合高速计算聚合。
  • 自动分片,通过Region分散在集群中,当行数增长的时候Region也会自动切分和再分配。
  • 支持自动故障转移。
  • 底层基于HDFS实现存储层。
  • 支持块缓存,布隆过滤器,可以高效的列查询优化。

Hbase架构

image.png
  • Zookeeper作为分布式的协调,RegionServer会把自己的信息写入到zookeeper;
  • Hdfs是hbase运行的底层文件系统;
  • RegionServer 是数据节点,存储数据的;
  • RegionServer要实时向Master报告信息,Master实时监控全局RegionServer运行情况,可以控制故障转移和Region的切分。

存储设计

在Hbase中,表被分割成多个更小的块然后分散存储在不同的服务器上,这些小块叫做Regions,
存放Regions的服务器叫RegionServer。Master负责处理不同的RegionServer之间的Region的分发。在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储

  • HLog, 预写日志文件,也叫做WAL(write-ahead log)
  • HFile 真实的数据存储文件

HLog

  • MasterProcWAL:HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件。

  • WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。

    1. 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLog
    2. WAL位于/hbase/WALs/目录下
    3. MultiWAL: 如果每个RegionServer只有一个WAL,由于HDFS必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。
  • WAL的配置

    // 启用multiwal
    <property>
      <name>hbase.wal.provider</name>
      <value>multiwal</value>
    </property>
    

HFile

HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。

Hbase 数据模型

  • Table:Hbase的table由多个行组成
  • Row:一个行在Hbase中由一个或多个有值的列组成。Row按照字母进行排序,因此行健的设计非常重要。这种设计方式可以让有关系的行非常的近,通常行健的设计是网站的域名反转,比如(org.apache.www, org.apache.mail, org.apache.jira),这样的话所有的Apache的域名就很接近。
  • Column:列由列簇加上列的标识组成,一般是“列簇:列标识”,创建表的时候不用指定列标识
  • Column Family:列簇在物理上包含了许多的列与列的值,每个列簇都有一些存储的属性可配置。例如是否使用缓存,压缩类型,存储版本数等。在表中,每一行都有相同的列簇,尽管有些列簇什么东西也没有存。
  • Column Qualifier:列簇的限定词,理解为列的唯一标识。但是列标识是可以改变的,因此每一行可能有不同的列标识
  • Cell:Cell是由row,column family,column qualifier包含时间戳与值组成的,一般表达某个值的版本
  • Timestamp:时间戳一般写在value的旁边,代表某个值的版本号,默认的时间戳是你写入数据的那一刻,但是你也可以在写入数据的时候指定不同的时间戳

Hbase数据模型设计

Hbase与关系型数据库对比


image.png

行健设计

关键部分,直接关系到后续服务的访问性能。如果行健设计不合理,后续查询服务效率会成倍的递减。

  • 避免单调的递增行健,因为Hbase的行健是有序排列的,这样可能导致一段时间内大部分写入集中在某一个Region上进行操作,负载都在一台节点上。可以设计成: [metric_type][event_timestamp],不同的metric_type可以将压力分散到不同的region上
  • 行健短到可读即可,因为查询短键不必长键性能好多少,所以设计时要权衡长度。
    行健不能改变,唯一可以改变的方式是先删除后插

列簇设计

列簇是一些列的集合,一个列簇的成员有相同的前缀,以冒号(:)作为分隔符。

  • 现在Hbase不能很好处理2~3个以上的列簇,所以尽可能让列簇少一些,如果表有多个列簇,列簇A有100万行数据,列簇B有10亿行,那么列簇A会分散到很多的Region导致扫描列簇A的时候效率底下。
  • 列簇名的长度要尽量小,一个为了节省空间,另外加快效率,比如d表示data,v表示value

相关文章

  • 分布式NoSQL数据库HBase介绍

    1. HBase数据库介绍 HBase产生背景自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案。大...

  • Hive 大表数据导入 HBase

    本文简单介绍 HBase 的数据导入工具 ImportTSV 。通过一次将 hive 大表导入 HBase 的实战...

  • 经典Hbase面试7题(附答案)

    Hbase Hbase是怎么写数据的? HDFS和HBase各自使用场景 Hbase的存储结构 热点现象(数据倾斜...

  • hbase 1.4.13 安装部署

    认识HBase HBase介绍 HBase = Hadoop database,Hadoop数据库开源数据库官网:...

  • spark bulk load hbase 推数

    spark环境下使用bluk load方式推hbase 背景介绍 Hbase作为一种常用的数据存储工具,对应解决大...

  • (转)HBase详细概述

    本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理...

  • Hbase设计原则

    Hbase存储架构 Hbase通过元数据信息来管理,数据都是通过ReginServer存储在HDFS上 Hbase...

  • 数据库

    1.列族数据库:BigTable、HBase:Hbase:HBase:Apache Hbase源于Google的B...

  • HBase那些事

    HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...

  • Hadop之Hbase

    介绍 Hbase是非关系型分布式数据库。 Hbase区分与传统关系数据库的特点 数据类型:Hbase采用简单的数据...

网友评论

    本文标题:大数据 - Hbase

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