zoukankan      html  css  js  c++  java
  • Hbase学习

    HBase基本概念与基本使用

    HBase详解(很全面)

    一条数据的HBase之旅,简明HBase入门教程-开篇

    组成部件说明:

    Client:

    使用HBase RPC机制与HMaster和HRegionServer进行通信
    Client与HMaster进行管理类操作
    Client与HRegionServer进行数据读写类操作

    Zookeeper:

    Zookeeper Quorum存储-ROOT-表地址、HMaster地址
    HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况
    Zookeeper避免HMaster单点问题

    HMaster:

    HMaster没有单点问题,HBase可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行
    主要负责Table和Region的管理工作:
    1. 管理用户对表的增删改查操作
    2. 管理HRegionServer的负载均衡,调整Region分布
    3. Region Split后,负责新Region的分布
    4. 在HRegionServer停机后,负责失效HRegionServer上Region迁移

    HRegionServer:

    HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写

    HRegionServer管理一系列HRegion对象;
    每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
    每个HStore对应Table中一个Column Family的存储;
    Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效。

    HStore:

    HBase存储的核心。由MemStore和StoreFile组成。MemStore是Stored Memory Buffer。
    HLog:

    引入HLog原因:在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。

    工作机制:
    每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入MemStore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

    写流程

    1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据;

    2) 数据被写入Region的MemStore,知道MemStore达到预设阀值(即MemStore满);

    3) MemStore中的数据被Flush成一个StoreFile;

    4) 随着StoreFile文件的不断增多,当其数量增长到一定阀值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除;

    5) StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile;

    6) 单个StoreFile大小超过一定阀值后,触发Split操作,把当前Region Split成2个新的Region。父Region会下线,新Split出的2个子Region会被HMaster分配到相应的RegionServer上,使得原先1个Region的压力得以分流到2个Region上。

    可以看出HBase只有增添数据,所有的更新和删除操作都是在后续的Compact历程中举行的,使得用户的写操作只要进入内存就可以立刻返回,实现了HBase I/O的高性能。

    读流程

    1) Client访问Zookeeper,查找-ROOT-表,获取.META.表信息;

    2) 从.META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer;

    3) 通过RegionServer获取需要查找的数据;

    4) RegionServer的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。

    寻址过程:client—>Zookeeper—>ROOT表—>.META. 表—>RegionServer—>Region—>client

    1、分布式模式的HBase

    HBase将表会切分成小的数据单位叫region,分配到多台服务器。托管region的服务器叫做RegionServer。一般情况下,RgionServer和HDFS DataNode并列配置在同一物理硬件上,RegionServer本质上是HDFS客户端,在上面存储访问数据,HMaster分配region给RegionServer,每个RegionServer托管多个region。

    HBase中的两个特殊的表,-ROOT-和.META.,用来查找各种表的region位置在哪。-ROOT-指向.META.表的region,.META.表指向托管待查找的region的RegionServer。

    一次客户端查找过程的3层分布式B+树如下图:

    一次基本的流程:

    a、 客户端通过zookeeper获取含有-ROOT-的region服务器名。

    b、 通过含有-ROOT-的region服务器查询含有.META.表中对应的region服务器名。

    c、  查询.META.服务器获取客户端查询的行键数据所在的region服务器名。

    d、 通过行键数据所在的region服务器获取数据。

    HBase每次执行写操作都会写入两个地方:预写式日志(write-ahead log,也称HLog)和MemStore(写入缓冲区),以保证数据持久化,只有当这两个地方的变化信息都写入并确认后,才认为写动作完成。MemStore是内存里的写入缓冲区,HBase中数据在永久写入硬盘之前在这里累积,当MemStore填满后,其中的数据会刷写到硬盘,生成一个HFile。

  • 相关阅读:
    苹果审核被拒,Guideline 1.1.6
    Java基础:类与继承
    Java中的static关键字解析
    Entity Framework 预备知识
    Entity Framework Code First执行SQL语句、视图及存储过程
    java多线程技能
    流与文件
    多线程
    集合
    断言
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10471968.html
Copyright © 2011-2022 走看看