• HBase
    • 架构图

    • 组成部分及作用
      • Zookeeper在HBase中作用
        • Master的高可用
        • RegionServer的监控
        • 元数据的入口
      • HMaster
        • 不仅有维护集群元数据信息的功能,还能
          • 通过Zookeeper发布自己的位置给客户端
          • 为RegionServer分配Region
          • 维护整个集群的负载均衡
          • 发现失效的Region,并将失效的Region分配到正常的RegionServer上
          • 当RegioServer失效的时候,协调对应Hlog的拆分
      • HRegionServer
        • 作用
          • 干活的结点:处理用户读写请求
          • 管理Hmaster为其分配的region
          • 与底层HDFS交互,存储数据到HDFS
          • 负责Region的拆分与Storefile的合并工作
        • 组成
          • HLog
            • 日志文件,记录了操作,数据写入时先写入这里再写入内存,防止内存中丢失。系统故障时可以通过这个日志文件重建。内存存入磁盘后hlog也对应删除
          • Region
            • 表的分片,一个总体表的一部分
          • Store
            • 不同的列族分在不同的Store存放,Store在Region中,也就对应了列族的一部分数据
          • MemStore
            • 每个列族持有,写入时先写入这里
              • 数据flush过程指MemStore达到阈值,将数据刷新到硬盘,同时删除Hlog中历史数据
          • HFile
            • 实际物理文件,以这种形式存储在HDFS上。
    • 是强一致性数据库,其牺牲了可用性来换取强一致性
      • hbase之所以是CP系统,实际和底层HDFS无关,它是CP系统,是因为对每一个region同时只有一台region server为它服务,对一个region所有的操作请求,都由这一台region server来响应,自然是强一致性的.在这台region server fail的时候,它管理的region failover到其他region server时,需要根据WAL log来redo,这时候进行redo的region应该是unavailable的,所以hbase降低了可用性,提高了一致性.设想一下,如果redo的region能够响应请求,那么可用性提高了,则必然返回不一致的数据(因为redo可能还没完成),那么hbase就降低一致性来提高可用性了.
    • HBase数据结构
      • Rowkey
        • 用来检索记录的主键,访问HBase table中的行
        • 可以使任意字符串,最大64KB,
        • 存储时,按照RowKey的字典排序存储,设计Rowkey时要充分存储这个特性,将经常一起读取的行存放到一起(位置相关性),也要注意热点问题
        • RowKey设计
          • 目的:就是让所有数据均匀的分布与所有的Region中,在一定程度上防止数据倾斜
          • 原则
            • 唯一性
            • 长度原则
            • 散列原则
              • 热点问题
                • 数据热点:HBase 中的行是按照 rowkey 的字典顺序排序的,这种设计优化了 scan 操作,可以将相 关的行以及会被一起读取的行存取在临近位置,便于 scan。然而糟糕的 rowkey 设计是热点 的源头。 热点发生在大量的 client 直接访问集群的一个或极少数个节点(访问可能是读, 写或者其他操作)。大量访问会使热点 region 所在的单个机器超出自身承受能力,引起性能 下降甚至 region 不可用,这也会影响同一个 RegionServer 上的其他 region,由于主机无法服 务其他 region 的请求。 设计良好的数据访问模式以使集群被充分,均衡的利用。 为了避免写热点,设计 rowkey 使得不同行在同一个 region,但是在更多数据情况下,数据 应该被写入集群的多个 region,而不是一个。(解决方法就是rowkey设计原则中的散列原则)
      • 列族Colum Family
        • HBase中每个列都属于某个列族,列族必须在使用表前定义
          • 列族设计原则
            • 和mysql一样的原理,能少列族就少列族,比如用户基本信息一个列族,额外信息一个列族。(因为列族过大,对一部分的改动有时会影响其他的列族,比如flush,都是针对region的,表的分裂1000列族10行,分裂会产生基数问题,分不开。)
      • Cell
        • 由rowkey、列族、列唯一确定的单元,没有类型,全部以字节码存储
      • Time stamp
        • 版本号,每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引,最新的数据排在前面。操作只要加一个版本而不用删去之前的版本,这大大提高了速度。删去和合并版本最后数据的操作什么时候做都可以。
    • 工作流程
      • 数据合并、拆分过程
        • HDFS不适合存储小文件,当数据达到3块,Hmaster出发合并操作,Region将数据进行合并。但是当合并的Region太大之后,还要进行拆分,分给不同的Regionserver
      • 读数据流程(写流程相似)

        • 具体从每一个server读数据的时候要先从memStore读,然后没找到,再到BlockCache里读(应该是一个cache一样的东西,利用时间局部性原理),最后没有到StroeFile里读,读完之后先缓存到BlockCache,再返回给客户端。
    • 布隆过滤器:比哈希表高效一些,但是不适用于零错误的应用场合。
    • 因为哈希表的存储效率比较低,布隆过滤器解决了这个问题。用很少的错误率换取极大地存储空间节省。原理是通过对一个数进行多次哈希值,对应的位置标记,如果对一个数多次哈希之后的结果都被标记,则这个数在表里。但存在一定误识率,即一个数刚好对应的是其他的已经标记了的几个点里。优化:可以建立一个白名单,标注出这些可能被识别为错误的数字。
      • Hbase应用
        • Hbase应用布隆:我们可以知道,当我们随机读get数据时,如果采用hbase的块索引机制,hbase会加载很多块文件。如果采用布隆过滤器后,它能够准确判断该HFile的所有数据块中,是否含有我们查询的数据,从而大大减少不必要的块加载,从而增加hbase集群的吞吐率。
    • Hbase快的关键
      • 时间戳
      • 基于内存
      • 列式存储
        • 行存储写快读慢,列存储写慢读快,适合大数据。hbase列存储。
    • 优化
      • 布隆过滤器
      • 有些不需要的情况,版本设置为1
      • 压缩方式:snappy
      • 预分区
        • 可以自己事先定义分区策略让每个Region维护哪些数据(startRow 与endRowKey来界定)
          • 防止因自动切分策略造成的数据倾斜问题
      • 内存优化:HBase操作需要大量内存开销,一般给70%内存给Hbase的Java堆,但是不能给太多,因为GC持续太长也会使RegionServer处于长期不可用状态。而且太多的话其他应该用内存不足也会造成系统的不稳定。

HBase面试考点的更多相关文章

  1. C#面试考点集锦

    C#面试考点集锦 ©智客坊      岁末年初往往是程序猿准备跳槽的高峰,当然互联网行业跳槽几乎是每个月都在发生,没有太过明显的淡季~那么,如何提高面试的通过率,最终顺利的拿到自己心仪的offer呢? ...

  2. React16源码解读:开篇带你搞懂几个面试考点

    引言 如今,主流的前端框架React,Vue和Angular在前端领域已成三足鼎立之势,基于前端技术栈的发展现状,大大小小的公司或多或少也会使用其中某一项或者多项技术栈,那么掌握并熟练使用其中至少一种 ...

  3. HBase面试问题

    一.HBase的特点是什么 1.HBase一个分布式的基于列式存储的数据库,基于hadoop的hdfs存储,zookeeper进行管理. 2.HBase适合存储半结构化或非结构化数据,对于数据结构字段 ...

  4. 【面试】Spring事务面试考点吐血整理(建议珍藏)

    Spring和事务的关系 关系型数据库.某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务. Spring很显然不是事务性资源,但是它可以管理事务性资源,所以Spring和 ...

  5. Java岗 面试考点精讲(基础篇02期)

    1. 两个对象的hashCode相同,则equals也一定为true,对吗? 不对,答案见下面的代码: @Override public int hashCode() { return 1; } 两个 ...

  6. Java岗 面试考点精讲(基础篇01期)

    即将到来金三银四人才招聘的高峰期,渴望跳槽的朋友肯定跟我一样四处找以往的面试题,但又感觉找的又不完整,在这里我将把我所见到的题目做一总结,并尽力将答案术语化.标准化.预祝大家面试顺利. 术语会让你的面 ...

  7. java和数据结构的面试考点

    目标:不要有主要的逻辑错误.2遍以内bug free.注意代码风格 不要让面试官觉得不懂规矩 Java vs C++ Abstract class vs interface  pass by refe ...

  8. java应届生面试考点收集

    回 到 顶 部 这些知识点来自于之前去百度实习.阿里.蘑菇街校园招聘的电话面试 未完待续 JavaSE 面向对象 封装.继承.多态(包括重载.重写) 常见区别 String.StringBuffer. ...

  9. java面试考点-面试准备

    面试前准备 了解应试公司相关信息及岗位信息 系统复习基础知识 对原公司负责项目进行梳理 阅读常规框架源码 学习典型架构案例 针对招聘文案准备加分项 相关技能 基础知识:进程/线程,TCP协议,HTTP ...

随机推荐

  1. PHP输入流

    PHP输入流php://input,对于这个的官方解释是: php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要 ...

  2. MySQL一招入门

    连接mysql数据库命令:mysql -u root -p 创建mysql数据库:create databaase xx库; 创建mysql表: create table db_xx表( id int ...

  3. Centos7 上安装FastDFS

    Centos7 上安装 FastDFS 本文章摘抄于 风止鱼歇  博客地址:https://www.cnblogs.com/yufeng218/p/8111961.html 1.安装gcc(编译时需要 ...

  4. Java String的相关性质分析

    引言 String可以说是在Java开发中必不可缺的一种类,String容易忽略的细节也很多,对String的了解程度也反映了一个Java程序员的基本功.下面就由一个面试题来引出对String的剖析. ...

  5. springsecurity简单学习

    一.初识SpringSecurity 在springboot项目中加入spring security. 1.在pom.xml中加入依赖 <dependency> <groupId&g ...

  6. 这些 CSS 命名规范将省下你大把调试时间

    我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...

  7. 理解并使用CSS3中的单位rem vh vw vmin vmax

    rem vh vw vmin vmax做为CSS3中的新单位,其实都出来挺久的了,这篇文章将总结并理解下它们. rem 如果你给body设置了font-size字体大小,那么body的任何子元素的1e ...

  8. expected single matching bean but found 2: menusServiceImpl,IMenusService

    问题如下: 接口也作为匹配的bean? 有点迷惑了....... 经过在网上找资料,发现和@MapperScan这个注解有关系,具体源码不止.但是这个注解会扫描路径下的所有类. 去掉这个注解就可以正常 ...

  9. iOS应用千万级架构:MVVM框架

    业务模块内的MVC和MVVM架构 目前,唯品会中MVC和MVVM架构并存,后期会偏重于MVVM架构的使用. MVC架构 Model:程序中要操纵的实际对象的抽象,为Controller提供经过抽象的业 ...

  10. php基础学习中认为重点的知识

    <?php ... ?> 简写成 <? ... ?> 服务器中可以通过php.ini中配置short_open_tag为on来实现 php语句必须以分号  ; 结尾 .  连接 ...