最新hbase面试题Miles资料.docx
- 文档编号:10095095
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:15
- 大小:23.62KB
最新hbase面试题Miles资料.docx
《最新hbase面试题Miles资料.docx》由会员分享,可在线阅读,更多相关《最新hbase面试题Miles资料.docx(15页珍藏版)》请在冰豆网上搜索。
最新hbase面试题Miles资料
16.Hbase的rowkey怎么创建比较好?
列族怎么创建比较好?
尽量将需要查询的维度或者信息存储在行键中,以为它筛选数据的效率最高
行键是唯一的
高表与宽表
Hbase内部是什么机制?
client:
1、包含访问hbase的接口,client维护着一些cache(缓存)来加快对hbase的访问,比如region的 位置信息。
(经常使用的表的位置信息)
zookeeper:
1、保证任何时候,集群中只有一个master
2、存贮所有Region的寻址入口----root表在哪台服务器上。
-root-这张表的位置信息
3、实时监控RegionServer的状态,将RegionServer的上线和下线信息实时通知给Master
4、存储Hbase的schema(表的描述信息),包括有哪些table,每个table有哪些columnfamily
master职责:
1、为RegionServer分配region
2、负责RegionServer的负载均衡
3、发现失效的RegionServer并重新分配其上的region
4、HDFS上的垃圾文件(hbase)回收
5、处理schema更新请求(增加,删除,修改)(JDBC:
crud)
RegionServer职责
1、RegionServer维护Master分配给它的region,处理对这些region的IO请求
2、RegionServer负责切分在运行过程中变得过大的region
hbase写数据的原理是什么?
1、客户端向hregionServer请求写数据
2、hregionServer将数据先写入hlog中。
3、hregionServer将数据后写入memstore中。
4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。
5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。
并对Hlog做一个标记。
6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。
7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。
8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。
注意:
hlog会同步到HDFS中。
读数据的流程(参考下图):
1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。
2、数据从内存和硬盘合并后返回到客户端。
HBase过滤器实现原则
采用bloomfilter进行过滤,BloomFilter是一种空间效率很高的随机数据结构
(1)BLOOMFILTER在HBase的作用
HBase利用BLOOMFILTER来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER是没有作用的。
(2)BLOOMFILTER在HBase的开销
BLOOMFILTER是一个列族级别的配置,如果你表中设置了BLOOMFILTER,那么HBase在生成StoreFile时候包含一份BLOOMFILTER的结构数据,称为MetaBlock;开启BLOOMFILTER会有一定的存储以及内存的开销。
(3)BLOOMFILTER如何提供随机读(GET)的性能
对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。
如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。
(4)Region的StoreFile数目越多,BLOOMFILTER效果越好
(5)Region下的storefile数目越少,HBase读性能越好
Hbase在进行模型设计时重点在什么地方?
一张表中定义多少个ColumnFamily
最合适?
为什么?
具体看表的数据,一般来说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率
如何提高HBase客户端的读写性能?
请举例说明。
①开启bloomfilter过滤器,开启bloomfilter比没开启要快3、4倍
②Hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它
③通过修改hbase-env.sh中的
exportHBASE_HEAPSIZE=3000#这里默认为1000m
④增大RPC数量
通过修改hbase-site.xml中的
hbase.regionserver.handler.count属性,可以适当的放大。
默认值为10有点小
(3) 修改java虚拟机属性
替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait等待
HBase的rowkey的设计原则
rowkey长度原则
rowkey是一个二进制码流,可以是任意字符串,最大长度 64kb ,实际应用中一般为10-100bytes,以 byte[] 形式保存,一般设计成定长。
建议越短越好,不要超过16个字节,原因如下
rowkey散列原则
建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段
rowkey唯一原则
必须在设计上保证其唯一性,
Hbase的rowkey怎么创建比较好?
列族怎么创建比较好?
RowKey设计:
应该具备以下几个属性
散列性:
散列性能够保证相同相似的rowkey聚合,相异的rowkey分散,有利于查询
简短性:
rowkey作为key的一部分存储在HFile中,如果为了可读性将rowKey设计得过长,那么将会增加存储压力
唯一性:
rowKey必须具备明显的区别性
建议将HBase列族的数量设置的越少越好。
对于两个或两个以上的列族HBase并不能处理的很好。
按照业务特点,把数据归类,不同类别的放在不同列族
HBASE内部机制
Hbase是一个能适应联机业务的数据库系统
物理存储:
hbase的持久化数据是存放在hdfs上
存储管理:
一个表是划分为很多region的,这些region分布式地存放在很多regionserver上
Region内部还可以划分为store,store内部有memstore和storefile
版本管理:
hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并
Region的split
集群管理:
Zookeeper作用在于:
1、hbaseregionserver向zookeeper注册,提供hbaseregionserver状态信息(是否在线)。
2、hmaster启动时候会将hbase系统表-ROOT-加载到zookeepercluster,通过zookeepercluster可以获取当前系统表.META.的存储所对应regionserver信息。
+ HMaster的作用:
∙为Regionserver分配region
∙负责Regionserver的负载均衡
∙发现失效的Regionserver并重新分配其上的region
∙HDFS上的垃圾文件回收
∙处理schema更新请求
HRegionServer作用:
∙维护master分配给他的region,处理对这些region的io请求
∙负责切分正在运行过程中变的过大的region
HBASE过滤器实现原则
HBase提供了一个API,你可以用来实现定制过滤器。
多个过滤器也可以捆绑在一起使用。
可以在读过程最开始的地方,基
于行健进行过滤处理。
此后,也可以基于HFile读出的KeyValues进行过滤处理。
过滤器必须实现HBaseJar包中的Filter
接口,或者继承扩展一个实现了该接口的抽象类。
我们推荐继承扩展FilterBase抽象类,这样你不需要写样板代码。
继承
扩展其他诸如CompareFilter类也是一个选择,同样可以正常工作。
当读取一行时该接口有下面的方法在多个地方可以调
过滤器有什么用途:
增强hbase查询数据的功能
减少服务端返回给客户端的数据量
描述HBase,zookeeper搭建过程
解压缩
进入zookeeper-3.4.9目录
l拷贝conf/zoo_sample.cfg
cpconf/zoo_sample.cfgconf/zoo.cfg
l编辑配置文件conf/zoo.cfg
#Thenumberofmillisecondsofeachtick
tickTime=2000
#Thenumberofticksthattheinitial
#synchronizationphasecantake
initLimit=10
#Thenumberofticksthatcanpassbetween
#sendingarequestandgettinganacknowledgement
syncLimit=5
#thedirectorywherethesnapshotisstored.
#donotuse/tmpforstorage,/tmphereisjust
#examplesakes.
dataDir=/home/bigdata/software/zookeeper-3.4.9/zookeeper_data
#theportatwhichtheclientswillconnect
clientPort=2181
#ThenumberofsnapshotstoretainindataDir
autopurge.snapRetainCount=5
#Purgetaskintervalinhours
autopurge.purgeInterval=1
l启动zookeeper
bin/zkServer.shstart
在master机器上解压缩hbase-1.2.4-bin.tar.gz
l进入hbase-1.2.4目录
l编辑conf/hbase-env.sh文件
编辑conf/hbase-site.xml文件
编辑conf/regionservers文件
slave01
slave02
l把master机器上的hbase-1.2.4目录拷贝到slave01和slave02上
scp-r/home/bigdata/software/hbase-1.2.4slave01:
/home/bigdata/software/
scp-r/home/bigdata/software/hbase-1.2.4slave02:
/home/bigdata/software/
l启动HDFS
/home/bigdata/software/hadoop-2.7.3/sbin/start-dfs.sh
l在master上启动HBase
bin/start-hbase.sh
l查看是否启动成功
http:
//master:
16010/master-status
客户端读取信息流程
(1)client要读取信息,先查询下client端的cache中是否存在数据,如果存在,刚直接返回数据。
如果不存在,则进入到zookeeper,查找到里面的相应数据存在的Root表中的地址。
(2)BlockCache;设计用于读入内存频繁访问的数据,每个列族都有
(3)通过数据存在ROOT表中地址找到.META,最终找到HRegion。
找到HRegion后,它会先访问MemStore中是否存在数据,如果存在,则直接读取。
如果没有,就再到HFile中查找数据,并将数据放到MemStore
(4)最后数据返回到客户端显示。
HBASE写数据原理
1由于Hbase中默认的刷写方式是隐式刷写,所以你在put()数据时,它会自动保存到HRegion上,但当你批量处理数据时,它会将数据先保存到client端的cache中。
当你关闭隐式刷写时,你put()的数据则会保存到clientcache中,直到你调用刷写命令时,才会保存到HRegion中。
2在HRegion部分的存储:
要写入的数据会先写到HMemcache和Hlog中,HMemcache建立缓存,Hlog同步Hmemcache和Hstore的事务日志,发起FlushCache时,数据持久化到Hstore中,并清空HMemecache。
3hbase正常写入数据时,会写入两个地方:
预写式日志(WAL_or_Hlog)和Memstore(内存里的写入缓冲区),首先写入cache,并记入WAL,然后才写入MemStore,(都写入才认为动作完成)保证数据的持久化,Hbase中的数据永久写入之前都在MemStore,当MemStore填满后,其中的数据就会写入硬盘生成HFile,
4HBase写数据,如果在写入HStore是发生系统异常,就可以从HLog中恢复数据,重新写HStore中。
.HBase宕机如何处理
答:
宕机分为HMaster宕机和HRegionServer宕机,如果是HRegionServer宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。
所以数据的一致性和安全性是有保障的。
如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master运行。
即ZooKeeper会保证总会有一个HMaster在对外提供服务。
hbase怎么预分区?
建表时可以通过shell命令预分区,也可以在代码中建表做预分区
hbase怎么给web前台提供接口来访问(HTABLE可以提供对HBase的访问,但是怎么查询同一条记录的多个版本数据)?
答:
使用HTable来提供对HBase的访问,可以使用时间戳来记录一条数据的多个版本。
htableAPI有没有线程安全问题,在程序中是单例还是多例?
[M4]
多例:
当多线程去访问同一个表的时候会有。
HBase集群安装注意事项
(2)
主要hbase-env.sh配置文件,HBASE_MANAGES_ZK=false,设置外部HBase使用外部的ZK,默认情况下是true。
Hbase中的metastore用来做什么的?
Hbase的metastore是用来保存数据的,其中保存数据的方式有有三种第一种与第二种是本地储存,第三种是远程储存这一种企业用的比较多
4、HBase在进行模型设计时重点在什么地方?
一张表中定义多少个ColumnFamily最合适?
为什么?
一般来说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率
5、如何提高HBase客户端的读写性能?
请举例说明。
①开启bloomfilter过滤器,开启bloomfilter比没开启要快3、4倍
②Hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它
③通过修改hbase-env.sh中的
exportHBASE_HEAPSIZE=3000#这里默认为1000m
④增大RPC数量
通过修改hbase-site.xml中的
hbase.regionserver.handler.count属性,可以适当的放大。
默认值为10有点小
HBase接收数据,如果短时间导入数量过多的话就会被锁,该怎么办?
集群数16台,高可用性的环境。
参考:
通过调用HTable.setAutoFlush(false)方法可以将HTable写客户端的自动flush
关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新,只有当
put填满客户端写缓存时,才实际向HBase服务端发起写请求。
默认情况下autoflush
是开启的
421.怎么知道hbase表里哪些做索引?
哪些没有做索引?
提示:
有且仅有一个:
rowkey,所以hbase得快速查找建立在rowkey的基础的,而不能像一般的关系型数据库那样建立多个索引来达到多条件查找的效果。
、简述HBase的瓶颈
提示:
HBase的瓶颈就是硬盘传输速度。
Hbase的
所有操作都是追加插入操作。
Hbase是一种日志集数据库。
它的存储方式,像是日志文
件一样。
它是批量大量的往硬盘中写,通常都是以文件形式的读写。
这个读写速度,就
取决于硬盘与机器之间的传输有多快。
16.Hbase的rowkey怎么创建比较好?
列族怎么创建比较好?
尽量将需要查询的维度或者信息存储在行键中,以为它筛选数据的效率最高
行键是唯一的
高表与宽表
Hbase内部是什么机制?
client:
1、包含访问hbase的接口,client维护着一些cache(缓存)来加快对hbase的访问,比如region的 位置信息。
(经常使用的表的位置信息)
zookeeper:
1、保证任何时候,集群中只有一个master
2、存贮所有Region的寻址入口----root表在哪台服务器上。
-root-这张表的位置信息
3、实时监控RegionServer的状态,将RegionServer的上线和下线信息实时通知给Master
4、存储Hbase的schema(表的描述信息),包括有哪些table,每个table有哪些columnfamily
master职责:
1、为RegionServer分配region
2、负责RegionServer的负载均衡
3、发现失效的RegionServer并重新分配其上的region
4、HDFS上的垃圾文件(hbase)回收
5、处理schema更新请求(增加,删除,修改)(JDBC:
crud)
RegionServer职责
1、RegionServer维护Master分配给它的region,处理对这些region的IO请求
2、RegionServer负责切分在运行过程中变得过大的region
hbase写数据的原理是什么?
2、客户端向hregionServer请求写数据
2、hregionServer将数据先写入hlog中。
3、hregionServer将数据后写入memstore中。
4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。
5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。
并对Hlog做一个标记。
6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。
7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。
8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。
注意:
hlog会同步到HDFS中。
读数据的流程(参考下图):
1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。
2、数据从内存和硬盘合并后返回到客户端。
HBase过滤器实现原则
采用bloomfilter进行过滤,BloomFilter是一种空间效率很高的随机数据结构
(1)BLOOMFILTER在HBase的作用
HBase利用BLOOMFILTER来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER是没有作用的。
(2)BLOOMFILTER在HBase的开销
BLOOMFILTER是一个列族级别的配置,如果你表中设置了BLOOMFILTER,那么HBase在生成StoreFile时候包含一份BLOOMFILTER的结构数据,称为MetaBlock;开启BLOOMFILTER会有一定的存储以及内存的开销。
(3)BLOOMFILTER如何提供随机读(GET)的性能
对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。
如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。
The铏氭嫙Xi撳簱(4)Region的StoreFile数目越多,BLOOMFILTER效果越好
TheXian侀€?
LuGui?
(5)Region下的storefile数目越少,HBase读性能越好
Hbase在进行模型设计时重点在什么地方?
一张表中定义多少个ColumnFamily
最合适?
为什么?
The鐗╄祫Cong㈣Chuai具体看表的数据,一般来说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率
TheQian撳瓨Congplank綍如何提高HBase客户端的读写性能?
请举例说明。
①开启bloomfilter过滤器,开启bloomfilter比没开启要快3、4倍
②Hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它
③通过修改hbase-env.sh中的
Doesthe鍐gocrazy棌鍖?
exportHBASE_HEAPSIZE=3000#这里默认为1000m
④增大RPC数量
通过修改hbase-site.xml中的
hbase.regionserver.handler.count属性,可以适当的放大。
默认值为10有点小
(3) 修改java虚拟机属性
The闄勫姞XiFeng€?
鏈嶅?
替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait等待
Gansentencethe細Qi濋殰LuGui敤HBa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 hbase 试题 Miles 资料