• 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十六)


    持续分享有用、有价值、精选的优质大数据面试题

    致力于打造全网最全的大数据面试专题题库

    141、底层数据同样存储在HDFS,HBase为什么比Hive查询速度快?

    参考答案:

    (1)Hive

            1)hive 是基于MapReduce来处理,离线计算速度慢。

            2)MapReduce处理数据是基于行的模式,查询数据默认是扫描整个表。

            3)hive中的表是纯逻辑表,只是表的定义,本身不存储数据,完全依赖hdfs和MapReduce。

    (2)Hbase

            1)hbase 是物理表,有独立的物理结构,查询的时候将相应的数据加载到内存,提升后续的查询效率。

            2)Hbase 是基于列存储的,查询的时候可以只扫描某一个列或者某几列,避免扫描所有数据。

            3)Hbase 有一级索引rowkey,根据rowkey查询速度非常快。

            4)Hbase 提供了一个超大的内存hash表,搜索引擎通过这个hash表存储索引,提升查询效率。

    142、如果HBase集群中的节点宕机了,HBase集群内部后续是如何处理的?是否影响线上业务?

    参考答案:

            1.如果是Master宕机,通过Zookeeper重新选举另外一个Master提供服务,此短暂期间负载均衡,region迁移,元数据操作无法进行,但不影响数据读写。

            2.如果是RegionServer宕机,当前RegionServer上面的region会迁移到其他RegionServer。此短暂期间,无法响应region I/O请求以及region切分。

            3.因为HBase集群是高可用的,故HBase集群中有节点宕机,不影响线上业务运行。

    143、HBase写数据的原理是什么?

    参考答案:

    1.客户端

    (1)客户端发起Put写请求,将put写入writeBuffer,如果是批量提交,写满缓存后自动提交 。

    (2)根据rowkey将put分发给不同regionserver 。

    2.服务端

    (1)Regionserver将put按rowkey分给不同的region 。

    (2)Region首先把数据写入wal。

    (3)wal写入成功后,把数据写入memstore,此时写成功,并返回通知客户端。

    (4)Memstore写完后,检查memstore大小是否达到flush阈值。

    (5)如果达到flush阈值,将memstore写入到HDFS,生成HFile文件。

    144、Hbase如何设计rowkey?列簇怎么设计比较好?

    参考答案:

    (1)Rowkey设计

            1)业务逻辑简单,同时满足业务查询

            2)数据是连续查询还是随机查询

            3)考虑热点问题,选择不同的高位散列方法

            4)设计原则:长度、散列、唯一 2、列簇设计:

    (2)列簇设计

            1)列簇一般2~3个比较合适;

            2)具有相同IO特性的列放在一个列簇,降低IO;

            3)列簇的名称尽可能短。

    145、怎么实现Hbase的预分区?

    参考答案:

    1.首先确定分区个数。

            regionNum=数据总量/region大小。

    2.确定rowkey范围。

            1)可以抽样。

            2)可以指定一个范围(如使用java short类型16进制)。

    3.计算参数中的startkey和endkey。

    4.调用Java api分区方法。

    admin.createTable(tableDescriptor, Bytes.toBytes(startkey), Bytes.toBytes(endkey), regionNum);

    146、HBase的特点是什么?

    参考答案:

    1.大:单表可以数十亿行,数百万列。

    2.无模式:同一个表的不同行可以有截然不同的列。

    3.面向列:存储、权限控制、检索均面向列。

    4.稀疏:空列不占用存储,表是稀疏的。

    5.多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。

    6.数据类型单一:数据都是字符串,没有类型。

    147、hbase导入数据有哪些方式?

    参考答案:

    1.通过HBase API进行批量写入数据。

    2.使用Sqoop工具批量导数到HBase集群。

    3.使用MapReduce批量导入。

    4.HBase BulkLoad的方式。

    148、hbase 的存储结构?

    参考答案:  

            Hbase 中的每张表都通过行键(rowkey)按照一定的范围被分割成多个子表(HRegion),默认一个 HRegion 超过 256M 就要被分割成两个,由 HRegionServer 管理,管理哪些 HRegion由 Hmaster 分配。 HRegion 存取一个子表时,会创建一个 HRegion 对象,然后对表的每个列族(Column Family)创建一个 store 实例,每个 store 都会有 0 个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个 HFile, HFile 就是实际的存储文件,因此,一个 HRegion 还拥有一个 MemStore 实例。

    149、解释下 hbase 实时查询的原理

    参考答案:

            实时查询,可以认为是从内存中查询,一般响应时间在 1 秒内。 HBase 的机制是数据先写入到内存中,当数据量达到一定的量(如 128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

    150、描述 Hbase 中 scan 和 get 的功能以及实现的异同?

    参考答案:

            1.按指定RowKey 获取唯一一条记录, get方法(org.apache.hadoop.hbase.client.Get)Get 的方法处理分两种 : 设置了 ClosestRowBefore 和没有设置的 rowlock .主要是用来保证行的事务性,即每个 get 是以一个 row 来标记的.一个 row 中可以有很多 family 和 column。

            2.按指定的条件获取一批记录, scan 方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是 scan 方式。

                     1)scan 可以通过 setCaching 与 setBatch 方法提高速度(以空间换时间);

                    2)scan 可以通过 setStartRow 与 setEndRow 来限定范围([start, end]start 是闭区间, end 是开区间)。范围越小,性能越高。

                     3)scan 可以通过 setFilter 方法添加过滤器,这也是分页、多条件查询的基础。

            3.全表扫描,即直接扫描整张表中所有行记录。

    持续分享有用、有价值、精选的优质大数据面试题

    致力于打造全网最全的大数据面试专题题库

  • 相关阅读:
    Axure9 基本操作(一)
    postgres 自定义内置函数
    An工具介绍之钢笔工具、铅笔工具与画笔工具
    Oracle 账户被锁:the account is locked 解决方法
    基于SpringBoot的校园周边美食探索及分享平台的设计与实现
    在PHP项目中使用阿里云消息队列MQ集成RabbitMQ的完整指南与问题解决
    什么是架构基本概念和架构本质
    读书笔记:多Transformer的双向编码器表示法(Bert)-1
    jfinal中如何使用过滤器监控Druid监听SQL执行?
    利用python自动完成网页计算TEC等参数
  • 原文地址:https://blog.csdn.net/dajiangtai007/article/details/126624117