【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.全表扫描,即直接扫描整张表中所有行记录。

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据研习社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值