hbase面试题Miles_第1页
hbase面试题Miles_第2页
hbase面试题Miles_第3页
hbase面试题Miles_第4页
hbase面试题Miles_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好?  尽量将需要查询的维度或者信息存储在行键中,以为它筛选数据的效率最高   行键是唯一的  高表与宽表Hbase 内部是什么机制?client:1、包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 hbase 的访问,比如 region 的 位置信息。 (经常使用的表的位置信息)   zookeeper:1、保证任何时候,集群中只有一个 master2、存贮所有 Region 的寻址入口-root 表在哪台服务器上。

2、-root-这张表的位置信息3、实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master4、存储 Hbase 的 schema(表的描述信息),包括有哪些 table,每个 table 有哪些 column family  master职责:1、为 RegionServer 分配 region2、负责 RegionServer 的负载均衡3、发现失效的 RegionServer 并重新分配其上的 region4、 HDFS 上的垃圾文件( hbase)回收5、处理 schema 更新请求(增加,删除,修改)( JDBC:cru

3、d)RegionServer 职责1、 RegionServer 维护 Master 分配给它的 region,处理对这些 region 的 IO 请求2、 RegionServer 负责切分在运行过程中变得过大的 region hbase 写数据的原理是什么?1、 客户端向hregionServer请求写数据 2、hregionServer将数据先写入hlog中。 3、hregionServer将数据后写入memstore中。 4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。 5、将硬盘

4、中数据通过HFile来序列化,再将数据传输到HDFS进行存储。并对Hlog做一个标记。 6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。 7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。 8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改

5、.META文件中关于数据所在server的信息)。注意:hlog会同步到HDFS中。读数据的流程(参考下图):1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。 2、数据从内存和硬盘合并后返回到客户端。 HBase过滤器实现原则采用bloomfilter进行过滤,Bloom Filter是一种空间效率很高的随机数据结构 (1)BLOOMFILTER在HBase的作用HBase利用 BLOOMFILTER来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER是没有作用的。(2)BLOOM

6、FILTER在HBase的开销BLOOMFILTER是一个列族级别的配置,如果你表中设置了BLOOMFILTER,那么HBase在生成StoreFile时候包含一份BLOOMFILTER的结构数据,称为MetaBlock;开启BLOOMFILTER会有一定的存储以及内存的开销。(3)BLOOMFILTER如何提供随机读(GET)的性能对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。&#

7、160;(4)Region的StoreFile数目越多,BLOOMFILTER效果越好(5)Region下的storefile数目越少,HBase读性能越好Hbase 在进行模型设计时重点在什么地方?一张表中定义多少个Column Family最合适?为什么?具体看表的数据,一般来说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率如何提高HBase客户端的读写性能?请举例说明。开启bloomfilter过滤器,开启bloomfilter比没开启要快3、4倍Hbase对于内存有特别的嗜好,在硬件允许的情况下配足够

8、多的内存给它通过修改hbase-env.sh中的export HBASE_HEAPSIZE=3000 #这里默认为1000m增大RPC数量通过修改hbase-site.xml中的hbase.regionserver.handler.count属性,可以适当的放大。默认值为10有点小(3)       修改java虚拟机属性替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait等待   HBase的rowkey的设计原则rowkey长度原则rowkey是一个二进制码流,可以是任意字符串

9、,最大长度 64kb ,实际应用中一般为10-100bytes,以 byte 形式保存,一般设计成定长。建议越短越好,不要超过16个字节,原因如下rowkey散列原则建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段rowkey唯一原则必须在设计上保证其唯一性,Hbase 的 rowkey 怎么创建比较好?列族怎么创建比较好?RowKey设计:应该具备以下几个属性散列性:散列性能够保证相同相似的rowkey聚合,相异的rowkey分散,有利于查询简短性:rowkey作为key的一部分存储在HFile中,如果为了可读性将rowKey设计得

10、过长,那么将会增加存储压力唯一性:rowKey必须具备明显的区别性建议将HBase列族的数量设置的越少越好。对于两个或两个以上的列族HBase并不能处理的很好。按照业务特点,把数据归类,不同类别的放在不同列族HBASE 内部机制Hbase是一个能适应联机业务的数据库系统物理存储:hbase的持久化数据是存放在hdfs上存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上Region内部还可以划分为store,store内部有memstore和storefile版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做

11、版本间的文件合并Region的split集群管理:    Zookeeper作用在于:1、hbase regionserver 向zookeeper注册,提供hbase regionserver状态信息(是否在线)。2、hmaster启动时候会将hbase系统表-ROOT- 加载到 zookeeper cluster,通过zookeeper cluster可以获取当前系统表.META.的存储所对应regionserver信息。+ HMaster的作用:· 为Region server分配region· 负责Region se

12、rver的负载均衡· 发现失效的Region server并重新分配其上的region· HDFS上的垃圾文件回收· 处理schema更新请求 HRegionServer作用:· 维护master分配给他的region,处理对这些region的io请求· 负责切分正在运行过程中变的过大的region HBASE过滤器实现原则HBase提供了一个API,你可以用来实现定制过滤器。多个过滤器也可以捆绑在一起使用。可以在读过程最开始的地方,基于行健进行过滤处理。此后,也可以基于HFile读出的KeyValues进行过滤处理。过滤器

13、必须实现HBase Jar包中的Filter接口,或者继承扩展一个实现了该接口的抽象类。我们推荐继承扩展FilterBase抽象类,这样你不需要写样板代码。继承扩展其他诸如CompareFilter类也是一个选择,同样可以正常工作。当读取一行时该接口有下面的方法在多个地方可以调过滤器有什么用途:增强hbase查询数据的功能减少服务端返回给客户端的数据量描述 HBase, zookeeper 搭建过程 解压缩 进入 zookeeper-3.4.9 目录l 拷贝 conf/zoo_sample.cfgcp conf/zoo_sample.cfg conf/zoo.cfgl 编辑配置文件 conf/

14、zoo.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not

15、 use /tmp for storage, /tmp here is just# example sakes.dataDir=/home/bigdata/software/zookeeper-3.4.9/zookeeper_data# the port at which the clients will connectclientPort=2181# The number of snapshots to retain in dataDirautopurge.snapRetainCount=5# Purge task interval in hoursautopurge.purgeInterv

16、al=1l 启动 zookeeperbin/zkServer.sh start在 master 机器上解压缩 hbase-1.2.4-bin.tar.gzl 进入 hbase-1.2.4 目录l 编辑 conf/hbase-env.sh 文件编辑 conf/hbase-site.xml 文件编辑 conf/regionservers 文件slave01slave02l 把 master 机器上的 hbase-1.2.4 目录拷贝到 slave01 和 slave02 上scp -r /home/bigdata/software/hbase-1.2.4 slave01:/home/bigdata

17、/software/scp -r /home/bigdata/software/hbase-1.2.4 slave02:/home/bigdata/software/l 启动 HDFS/home/bigdata/software/hadoop-2.7.3/sbin/start-dfs.shl 在 master 上启动 HBasebin/start-hbase.shl 查看是否启动成功http:/master:16010/master-status客户端读取信息流程(1)client要读取信息,先查询下client 端的cache中是否存在数据,如果存在,刚直接返回数据。如果不存在,则进入到zo

18、okeeper,查找到里面的相应数据存在的Root表中的地址。 (2)BlockCache;设计用于读入内存频繁访问的数据,每个列族都有 (3)通过数据存在ROOT表中地址找到.META,最终找到HRegion。找到HRegion后,它会先访问MemStore中是否存在数据,如果存在,则直接读取。如果没有,就再到HFile中查找数据,并将数据放到MemStore (4)最后数据返回到客户端显示。HBASE写数据原理1由于Hbase中默认的刷写方式是隐式刷写,所以你在put()数据时,它会自动保存到HRegion上,但当你批量处理数据时,它会将数据先保存到clien

19、t端的cache中。当你关闭隐式刷写时,你put()的数据则会保存到client cache中,直到你调用刷写命令时,才会保存到HRegion中。 2在HRegion部分的存储:要写入的数据会先写到HMemcache 和Hlog 中,HMemcache 建立缓存,Hlog 同步Hmemcache和Hstore 的事务日志,发起Flush Cache 时,数据持久化到Hstore 中,并清空HMemecache。 3hbase正常写入数据时,会写入两个地方:预写式日志(WAL_or_Hlog)和Memstore(内存里的写入缓冲区), 首先写入cache,并记入WAL,然后才

20、写入MemStore,(都写入才认为动作完成)保证数据的持久化,Hbase中的数据永久写入之前都在MemStore,当MemStore填满后,其中的数据就会写入硬盘生成HFile, 4HBase写数据,如果在写入HStore是发生系统异常,就可以从HLog中恢复数据,重新写 HStore中。   .HBase宕机如何处理答:宕机分为HMaster宕机和HRegionServer宕机,如果是HRegionServer宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致

21、数据丢失。所以数据的一致性和安全性是有保障的。如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。 hbase 怎么预分区?建表时可以通过shell命令预分区,也可以在代码中建表做预分区hbase 怎么给 web 前台提供接口来访问(HTABLE可以提供对 HBase的访问,但是怎么查询同一条记录的多个版本数据)?答:使用HTable来提供对HBase的访问,可以使用时间戳来记录一条数据的多

22、个版本。htable API 有没有线程安全问题,在程序中是单例还是多例?M4 多例:当多线程去访问同一个表的时候会有。HBase 集群安装注意事项(2)主要hbase-env.sh 配置文件,HBASE_MANAGES_ZK=false,设置外部HBase使用外部的ZK,默认情况下是true。Hbase中的metastore用来做什么的?Hbase的metastore是用来保存数据的,其中保存数据的方式有有三种第一种与第二种是本地储存,第三种是远程储存这一种企业用的比较多4、HBase在进行模型设计时重点在什么地方?一张表中定义多少个Column Family最合适?为什么?一般来

23、说划分标准是根据数据访问频度,如一张表里有些列访问相对频繁,而另一些列访问很少,这时可以把这张表划分成两个列族,分开存储,提高访问效率5、如何提高HBase客户端的读写性能?请举例说明。开启bloomfilter过滤器,开启bloomfilter比没开启要快3、4倍Hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它通过修改hbase-env.sh中的export HBASE_HEAPSIZE=3000 #这里默认为1000m增大RPC数量通过修改hbase-site.xml中的hbase.regionserver.handler.count属性,可以适当的放大。默认值为10有

24、点小HBase 接收数据,如果短时间导入数量过多的话就会被锁,该怎么办? 集群数 16台 ,高可用性的环境。参考:通过调用 HTable.setAutoFlush(false)方法可以将 HTable 写客户端的自动 flush关闭,这样可以批量写入数据到 HBase,而不是有一条 put 就执行一次更新,只有当put 填满客户端写缓存时,才实际向 HBase 服务端发起写请求。默认情况下 auto flush是开启的421.怎么知道hbase表里哪些做索引?哪些没有做索引?提示:有且仅有一个:rowkey,所以hbase得快速查找建立在rowkey的基础的,而不能像一般的关系型数据库那样建立

25、多个索引来达到多条件查找的效果。、简述 HBase 的瓶颈提示:HBase 的瓶颈就是硬盘传输速度。Hbase 的所有操作都是追加插入操作。Hbase 是一种日志集数据库。它的存储方式,像是日志文件一样。它是批量大量的往硬盘中写,通常都是以文件形式的读写。这个读写速度,就取决于硬盘与机器之间的传输有多快。16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好?  尽量将需要查询的维度或者信息存储在行键中,以为它筛选数据的效率最高   行键是唯一的  高表与宽表Hbase 内部是什么机制?client:1、包含访问 hbase 的接口, cl

26、ient 维护着一些 cache(缓存) 来加快对 hbase 的访问,比如 region 的 位置信息。 (经常使用的表的位置信息)   zookeeper:1、保证任何时候,集群中只有一个 master2、存贮所有 Region 的寻址入口-root 表在哪台服务器上。 -root-这张表的位置信息3、实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master4、存储 Hbase 的 schema(表的描述信息),包括有哪些 table,每个 table 有哪些 column family  m

27、aster职责:1、为 RegionServer 分配 region2、负责 RegionServer 的负载均衡3、发现失效的 RegionServer 并重新分配其上的 region4、 HDFS 上的垃圾文件( hbase)回收5、处理 schema 更新请求(增加,删除,修改)( JDBC:crud)RegionServer 职责1、 RegionServer 维护 Master 分配给它的 region,处理对这些 region 的 IO 请求2、 RegionServer 负责切分在运行过程中变得过大的 region hbase 写数据的原理是什么?2、 客户端向hreg

28、ionServer请求写数据 2、hregionServer将数据先写入hlog中。 3、hregionServer将数据后写入memstore中。 4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。 5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。并对Hlog做一个标记。 6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并

29、,此时数据块大于256M)。 7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。 8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。注意:hlog会同步到HDFS中。读数据的流程(参考下图):1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。 2、数据从内存和硬盘合并后返回到客户端。 HBase过滤器实现原则采用bloomfilter进行过滤,Bloom Filter是一种空间效率很高的随机数据结构 (1)BLOOMFILTER在HBase的作用HBase利用 BLOOMFILTER来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER是没有作用的。(2)BLOOMFILTER在HBase的开销BLOOMFILTER是一个列族级别的配置,如果你表中设置了BLOOMFILTER,那么HBase在生成Sto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论