博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

大数据面试题V3.0 -- HBase面试题(约2.8w字)


HBase面试题(约2.8w字)

  1. 介绍下HBase

       HBase是一个分布式的,面向列的开源数据库。它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。
    另一个不同的是HBase基于列的而不是基于行的模式。HBase使用和 BigTable非常相同的数据模型。
    用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列,一个或者多个列组成ColumFamily,一个Fammily下的列位于一个HFile中,易于缓存数据。
    表是稀松存储的,因此用户可以给行定义各种不同的列。在HBase中数据按主键排序,同时表按主键划分为多个Region。 分布式环境中HBase运行在HDFS之上,以HDFS作为其基础存储设施。
    HBase上层提供了访问数据的Java API层,供应用访问存储在HBase的数据。
    在HBase的集群中主要由Master和Region Server组成,以及Zookeeper

     

  2. HBase优缺点

    一、Hbase的优点
    HDFS有高容错,高扩展的特点,而Hbase基于HDFS实现数据的存储,因此Hbase拥有与生俱来的超强的扩展性和吞吐量。
    HBase采用的是Key/Value的存储方式,这意味着,即便面临海量数据的增长,也几乎不会导致查询性能下降。
    HBase是一个列式数据库,相对于于传统的行式数据库而言。当你的单张表字段很多的时候,可以将相同的列(以regin为单位)存在到不同的服务实例上,分散负载压力。
    二、Hbase的缺点
    架构设计复杂,且使用HDFS作为分布式存储,因此只是存储少量数据,它也不会很快。在大数据量时,它慢的不会很明显!
    Hbase不支持表的关联操作,因此数据分析是HBase的弱项。常见的 group by或order by只能通过编写MapReduce来实现!
    Hbase部分支持了ACID
    三、Hbase的总结
    适合场景:单表超千万,上亿,且高并发!
    不适合场景:主要需求是数据分析,比如做报表。数据量规模不大,对实时性要求高!
    https://blog.csdn.net/weixin_42796403/article/details/112790756

     

  3. 说下HBase原理

     

     

    随着时间推移,写入的HFile会越来越多,查询数据时就会因为要进行多次io导致性能降低,
    为了提升读性能,HBase会定期执行compaction操作以合并HFile。
    此外,HBase在读路径上也有诸多设计,其中一个重要的点是设计了BlockCache读缓存。
    这样以后,读取数据时会依次从BlockCache、MemStore以及HFile中seek数据,
    再加上一些其他设计比如布隆过滤器、索引等,保证了HBase的高性能。

     

  4. 介绍下HBase架构

     

     

      • Master        
         HBase Master用于协调多个Region Server,侦测各个Region Server之间的状态,并平衡Region Server之间的负载。
      • HBase Master还有一个职责就是复杂分配Region给Region Server。HBase允许多个Master结点共存,但这需要zk的帮助。
      • 不过当多个Master结点共存时,只有一个Master是提供服务的,其他的Master结点处于待命的状态。
      • 当正在工作的Master结点宕机时,zk会选举另一个Master来接管HBase集群。更多参考:HMaster是什么?
      • Region Server
        一个Region Server包含多个Region。Region Server的作用只是管理表格,以及实现读写操作。
      • Client直接连接Region Server,并通信获取HBase中的数据。对于Region而言,则是真实存放HBase数据的地方,也就是说Region是HBase可用性和分布式的基本单位。
      • 如果当一个表格很大,并由多个CF组成时,那么表的数据将存放在多个Region之间,并且在每个Region中会关联多个存储单元(Store).
      • Zookeeper
        对于 HBase 而言,Zookeeper的作用是至关重要的。首先Zookeeper是作为HBase Master的HA解决方案。
      • 也就是说,是Zookeeper保证了至少有一个HBase Master 处于运行状态。并且Zookeeper负责Region和Region Server的注册。
      • 其实Zookeeper发展到目前为止,已经成为了分布式大数据框架中容错性的标准框架。不光是HBase,几乎所有的分布式大数据相关的开源框架,都依赖于Zookeeper实现HA。
  5. HBase读写数据流程

    Hbase的读取数据流程
    1 客户端发起读取数据的请求, 首先会先连接zookeeper
    
    2从zookeeper中获取一个 hbase:meta表 被那个RegionServer所管理着
    hbase:meta: hbase的元数据表, 在这个表中存储了自定义的表相关元数据, 包含: 表名, 表有那些列族, 表有几个Region构成的, 每个Region被那个RegionServer管理meta表只有一个Region, 
    而这个Region必然会被某一个RegionServer所管理, 至于被那个RegionServer所管理了呢
    ? zookeeper清楚 从zookeeper中的/hbase/meta-region-server获取hbase:meta表所在的节点: 3 连接meta表对应RegionServer, 从meta表获取当前要读取的这个表对应的Region是那些, 并且这些Region对应的RegionServer是谁当表有多个Region的时候:
    如果执行的Get操作获取某一条数据, 只会返回一个RegionServer的地址;如果执行的Scan操作, 会将所有的Region对应RegionServer地址全部返回。 例如:查找TRANFER_RECORD表所在HRegionServer位置: 其中红框中的表示TRANFER_RECORD表所在HRegionServer位置为node3. 4连接要读取表对应的RegionServer, 从RegionServer上开始获取数据即可: 读取顺序: MemStore —
    > blockCache(缓存) —> StoreFlie(小HFile) —>大HFile 当从后续的文件中读取到数据后, 会将这一部分存储到缓存中 如果执行Scan操作, blockCache基本没有太大意义 整个读取过程, Master是否有参与呢? Master是不参与数据读取操作。 5.写入数据流程 1 由客户端发起写入数据的请求, 首先会先连接zookeeper 2 从zookeeper中获取 hbase:meta表 被那个regionServer所管理 3 连接meta表对应的RegionServer地址, 从meta表获取当前要写入的表对应region被那个RegionServer所管理(一般只会返回一个RegionServer地址, 除非一次性写入多条数据) 4连接对应要写入RegionServer的地址, 开始写入数据, 将数据首先会写入到HLog中,然后将数据写入到对应Region的对应Store模块的MemStore中(有可能会写入到MemStore), 当这两个地方都写入完成后, 客户端认为数据写入完成了 服务端写入过程: 异步操作(可能客户端执行N多次写入后, 服务端才开始对之前的数据进行操作) 5 随着客户端不断的写入操作, memstore中数据会越来越多, 当内存中数据达到阈值(128M / 1h)后, 就会触发flush刷新机制, 将数据<最终>刷新到HDFS上形成StoreFile(小Hfile)文件. 6 随着不断的刷新, 在HDFS上StoreFile文件会越来越多, 当StoreFlie文件数量达到阈值(3个及以上)后, 就会触发compact合并压缩机制, 将多个StoreFlie文件<最终>合并为一个大的HFile文件 7随着不断的合并, 大的HFile也会越来越大, 当大HFile达到一定的阈值(<最终>10GB)后, 就会触发Split分裂机制, 将大HFile进行一分为二,形成两个新的大HFile,
    同时管理这个大HFile的Region也会形成两个新的Region, 形成的两个新的Region和两个新的大HFile 进行一对一的管理即可, 原来的Region和原来的大的HFile就会下线删除掉。 ———————————————— https:
    //blog.csdn.net/lijian972/article/details/124227814

     

  6. HBase的读写缓存

  7. 在删除HBase中的一个数据的时候,它什么时候真正的进行删除呢?当你进行删除操作,它是立马就把数据删除掉了吗?

  8. HBase中的二级索引

  9. HBase的RegionServer宕机以后怎么恢复的?

  10. HBase的一个region由哪些东西组成?

  11. HBase高可用怎么实现的?

  12. 为什么HBase适合写多读少业务?

  13. 列式数据库的适用场景和优势?列式存储的特点?

  14. HBase的rowkey设计原则

  15. HBase的rowkey为什么不能超过一定的长度?为什么要唯一?rowkey太长会影响Hfile的存储是吧?

  16. HBase的RowKey设置讲究有什么原因

  17. HBase的大合并、小合并是什么?

  18. HBase和关系型数据库(传统数据库)的区别(优点)?

  19. HBase数据结构

  20. HBase为什么随机查询很快?

  21. HBase的LSM结构

  22. HBase的Get和Scan的区别和联系?

  23. HBase数据的存储结构(底层存储结构)

  24. HBase数据compact流程?

  25. HBase的预分区

  26. HBase的热点问题

  27. HBase的memstore冲刷条件

  28. HBase的MVCC

  29. HBase的大合并与小合并,大合并是如何做的?为什么要大合并

  30. 既然HBase底层数据是存储在HDFS上,为什么不直接使用HDFS,而还要用HBase

  31. HBase和Phoenix的区别

  32. HBase支持SQL操作吗

  33. HBase适合读多写少还是写多读少

  34. HBase表设计

  35. Region分配

  36. HBase的Region切分

posted @ 2022-06-28 15:03  CHANG_09  阅读(354)  评论(0)    收藏  举报