首页 > 编程知识 正文

oracle dba面试题,java面试题答案

时间:2023-05-06 16:02:04 阅读:10329 作者:2577

一.简单地说,Hbase(1) HBase是一个分布式的基于列的存储数据库,由基于Hadoop的hdfs存储zookeeper管理。

) Hbase适合半结构化或非结构化数据的存储,是数据结构字段不充分确定或杂乱无章、难以用一个概念提取的数据。

)3) Hbase为空的记录不被存储。

基于(4)的表包括rowkey、时间戳和列族。 写入新数据时,时间戳更新,可以同时询问早期版本。

)5) hbase为主从结构。 hmaster为主节点,hregionserver为从节点。

说明HBase特征的1 (大)个表有数十亿行、数百万列;

2 )无模式)每行有可排序的主键和任意数量的列,列可以根据需要动态增加,数量相同

张表中的不同行可以有完全不同的列;

3 )面向列)对列(族)的存储和权限控制,列(族)的独立搜索;

4 )稀疏)空(null )列不占用存储空间,表可以设计得非常稀疏。

5 )数据的多版本)每个单元中的数据可以具有多个版本,默认情况下自动分配版本号,并且是一个单元

插入格时的时间戳;

6 )数据类型单一: Hbase数据均为字符串,无类型。

阐述HBase和Hive的区别

Hive和Hbase是两种基于Hadoop的不同技术。 Hive是一种SQL引擎,运行MapReduce任务。 Hbase是Hadoop之上的NoSQL的Key/vale数据库。 当然,这两个工具可以同时使用。 Hive可以用于统计查询,HBase可以用于实时查询,就像在谷歌上搜索或在脸书上社交一样。 数据也可以从Hive写入HBase,然后进行设置并从HBase写回Hive。

四. HBase适用方案半结构化或非结构化数据

记录非常稀疏

多版本数据

超大数据量

五、HBase的rowKey的设计原则说明rowKey的长度原则

Rowkey是二进制码流,许多开发人员建议Rowkey的长度设计为10到100字节,但建议长度不要超过16字节。

理由如下。

)1)数据持久化文件HFile中按照KeyValue进行存储,但如果Rowkey过长,例如100字节,则仅Rowkey就需要100*1000万=10亿字节,约1G的数据

)2) MemStore将部分数据缓存在内存中。 Rowkey字段太长会降低内存利用率,导致系统无法缓存更多数据,从而降低搜索效率。 因此,Rowkey的字节长度越短越好。

)3)目前操作系统均为64位系统,内存按8字节对齐。 控制为16字节、8字节

的整数倍利用操作系统的最佳特性。

原始密钥散列原则

如果Rowkey以时间戳递增,并且不在二进制代码之前放置时间,则建议在程序周期中将Rowkey的高位作为散列字段生成,并将时间字段放置在低位。 这增加了将数据分布到每个Regionserver以实现负载平衡的概率。 如果没有散列字段,则第一个字段是时间信息,会出现所有新数据都聚集在一个RegionServer上的热点现象,从而导致检索数据时负载集中在各个RegionServer上,降低查询效率。

Rowkey的唯一原则

在设计方面必须保证其唯一性。

六.扫描和get在HBase中的功能以及实现异同HBase的查询实现只提供两种方式。

1 )为每个指定的RowKey获取唯一记录。 get方法(org.Apache.Hadoop.h base.client.get ) get的方法处理主要分为两种:一些设置了ClosestRowBefore,另一些未设置ClosestRowBefore 也就是说,每个get都用row标记。 一个row可以包含很多family和column。

2 )在指定条件下获取批量记录。 scan方法(org.Apache.Hadoop.h base.client.scan )使用scan方法来实现条件查询功能。

7 .请详细说明hbase的一个cell的结构hbase中,row和columns决定的是将一个存储单元称为cell。

由cell (原始密钥,列)=familylabel ),version} )唯一确定的单元。 cell数据没有类型,全部以字节码格式存储。

八. HBase的压缩用途是什么? 什么时候触发? 分为哪两种? 有什么区别? 有哪些相关的配置参数? 在hbase中,每当memstore数据刷新到磁盘时,就会形成storeFile,成为storef

ile的数量达到一定程度后,就需要将 storefile 文件来进行 compaction 操作。
Compact 的作用:
① 合并文件
② 清除过期,多余版本的数据
③ 提高读写数据的效率

HBase 中实现了两种 compaction 的方式:minor and major. 这两种 compaction 方式的
区别是:
1、Minor 操作只用来做部分文件的合并操作以及包括 minVersion=0 并且设置 ttl 的过
期版本清理,不做任何删除数据、多版本数据的清理工作。
2、Major 操作是对 Region 下的 HStore 下的所有 StoreFile 执行合并操作,最终的结果
是整理合并出一个文件。 

九.HBase 优化方式

(1)高可用
在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以 HBase 支持对 Hmaster 的高可用配置。 

(2)预分区
每一个 region 维护着 startRow 与 endRowKey,如果加入的数据符合某个 region 维护的rowKey 范围,则该数据交给这个 region 维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高 HBase 性能 .

(3)RowKey 设计
一条数据的唯一标识就是 rowkey,那么这条数据存储于哪个分区,取决于 rowkey 处于哪个一个预分区的区间内,设计 rowkey 的主要目的 ,就是让数据均匀的分布于所有的 region中,在一定程度上防止数据倾斜。

(4)7.4 内存优化
HBase 操作过程中需要大量的内存开销,毕竟 Table 是可以缓存在内存中的,一般会分配整个可用内存的 70%给 HBase 的 Java 堆。但是不建议分配非常大的堆内存,因为 GC 过程持续太久会导致 RegionServer 处于长期不可用状态,一般 16~48G 内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。

(5)基础优化 

十.Region 如何预建分区?

预分区的目的主要是在创建表的时候指定分区数,提前规划表有多个分区,以及每个分区的区间范围,这样在存储的时候 rowkey 按照分区的区间存储,可以避免 region 热点问题。
通常有两种方案:
方案 1:shell 方法
create 'tb_splits', {NAME => 'cf',VERSIONS=> 3},{SPLITS => ['10','20','30']}
方案 2: JAVA 程序控制
· 取样,先随机生成一定数量的 rowkey,将取样数据按升序排序放到一个集合里;
· 根据预分区的 region 个数,对整个集合平均分割,即是相关的 splitKeys;
· HBaseAdmin.createTable(HTableDescriptor tableDescriptor,byte[][]splitkeys)可以指定预分区的 splitKey,即是指定 region 间的 rowkey 临界值。 

十一. HRegionServer 宕机如何处理?

1)ZooKeeper 会监控 HRegionServer 的上下线情况,当 ZK 发现某个 HRegionServer 宕机之后会通知 HMaster 进行失效备援;
2)该 HRegionServer 会停止对外提供服务,就是它所负责的 region 暂时停止对外提供服务;
3)HMaster 会将该 HRegionServer 所负责的 region 转移到其他 HRegionServer 上,并且会对 HRegionServer 上存在 memstore 中还未持久化到磁盘中的数据进行恢复;
4)这个恢复的工作是由 WAL 重播来完成,这个过程如下:
· wal 实际上就是一个文件,存在/hbase/WAL/对应 RegionServer 路径下。
· 宕机发生时,读取该 RegionServer 所对应的路径下的 wal 文件,然后根据不同的region 切分成不同的临时文件 recover.edits。
· 当 region 被分配到新的 RegionServer 中,RegionServer 读取 region 时会进行是否存在 recover.edits,如果有则进行恢复。 

11.HBase 读写流程?

读:
① HRegionServer 保存着 meta 表以及表数据,要访问表数据,首先 Client 先去访问zookeeper,从 zookeeper 里面获取 meta 表所在的位置信息,即找到这个 meta 表在哪个HRegionServer 上保存着。
② 接着 Client 通过刚才获取到的 HRegionServer 的 IP 来访问 Meta 表所在的HRegionServer,从而读取到 Meta,进而获取到 Meta 表中存放的元数据。
③ Client 通过元数据中存储的信息,访问对应的 HRegionServer,然后扫描所在HRegionServer 的 Memstore 和 Storefile 来查询数据。
④ 最后 HRegionServer 把查询到的数据响应给 Client。


写:
① Client 先访问 zookeeper,找到 Meta 表,并获取 Meta 表元数据。
② 确定当前将要写入的数据所对应的 HRegion 和 HRegionServer 服务器。
③ Client 向该 HRegionServer 服务器发起写入数据请求,然后 HRegionServer 收到请求
并响应。 

④ Client 先把数据写入到 HLog,以防止数据丢失。
⑤ 然后将数据写入到 Memstore。
⑥ 如果 HLog 和 Memstore 均写入成功,则这条数据写入成功
⑦ 如果 Memstore 达到阈值,会把 Memstore 中的数据 flush 到 Storefile 中。
⑧ 当 Storefile 越来越多,会触发 Compact 合并操作,把过多的 Storefile 合并成一个大
的 Storefile。
⑨ 当 Storefile 越来越大,Region 也会越来越大,达到阈值后,会触发 Split 操作,将
Region 一分为二。
 

12.HBase 内部机制是什么?

Hbase 是一个能适应联机业务的数据库系统物理存储:hbase 的持久化数据是将数据存储在 HDFS 上。
存储管理:一个表是划分为很多 region 的,这些 region 分布式地存放在很多 regionserver上 Region 内部还可以划分为 store,store 内部有 memstore 和 storefile。
版本管理:hbase 中的数据更新本质上是不断追加新的版本,通过 compact 操作来做版本间的文件合并 Region 的 split。
集群管理:ZooKeeper + HMaster + HRegionServer。

13. HBase 在进行模型设计时重点在什么地方?一张表中定义多少个 Column Family 最合适?为什么? 

Column Family 的个数具体看表的数据,一般来说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率。 

14.如何提高 HBase 客户端的读写性能?请举例说明

1 开启 bloomfilter 过滤器,开启 bloomfilter 比没开启要快 3、4 倍
2 Hbase 对于内存有特别的需求,在硬件允许的情况下配足够多的内存给它
3 通过修改 hbase-env.sh 中的
export HBASE_HEAPSIZE=3000 #这里默认为 1000m
4 增大 RPC 数量
通过修改 hbase-site.xml 中的 hbase.regionserver.handler.count 属性,可以适当的放大RPC 数量,默认值为 10 有点小。 

15.直接将时间戳作为行健,在写入单个 region 时候会发生热点问题,为什么呢?

region 中的 rowkey 是有序存储,若时间比较集中。就会存储到一个 region 中,这样一个 region 的数据变多,其它的 region 数据很少,加载数据就会很慢,直到 region 分裂,此问题才会得到缓解。 

16.请描述如何解决 HBase 中 region 太小和 region 太大带来的冲突? 

Region 过大会发生多次compaction,将数据读一遍并重写一遍到 hdfs 上,占用io,region过小会造成多次 split,region 会下线,影响访问服务,最佳的解决方法是调整 hbase.hregion.max.filesize 为 256m。 

17. 解释一下布隆过滤器原理;

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。