hbase面试题Miles

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

16.Hbase的rowkey怎么创建比较好?列族怎么创建比较好?尽量将需要查询的维度或者信息存储在行键中,以为它筛选数据的效率最高行键是唯一的高表与宽表Hbase内部是什么机制?client:1、包含访问hbase的接口,client维护着一些cache(缓存)来加快对hbase的访问,比如region的位置信息。(经常使用的表的位置信息)zookeeper:1、保证任何时候,集群中只有一个master2、存贮所有Region的寻址入口----root表在哪台服务器上。-root-这张表的位置信息3、实时监控RegionServer的状态,将RegionServer的上线和下线信息实时通知给Master4、存储Hbase的schema(表的描述信息),包括有哪些table,每个table有哪些columnfamilymaster职责:1、为RegionServer分配region2、负责RegionServer的负载均衡3、发现失效的RegionServer并重新分配其上的region4、HDFS上的垃圾文件(hbase)回收5、处理schema更新请求(增加,删除,修改)(JDBC:crud)RegionServer职责1、RegionServer维护Master分配给它的region,处理对这些region的IO请求2、RegionServer负责切分在运行过程中变得过大的regionhbase写数据的原理是什么?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请求负责切分正在运行过程中变的过大的regionHBASE过滤器实现原则HBase提供了一个API,你可以用来实现定制过滤器。多个过滤器也可以捆绑在一起使用。可以在读过程最开始的地方,基于行健进行过滤处理。此后,也可以基于HFile读出的KeyValues进行过滤处理。过滤器必须实现HBaseJar包中的Filter接口,或者继承扩展一个实现了该接口的抽象类。我们推荐继承扩展FilterBase抽象类,这样你不需要写样板代码。继承扩展其他诸如CompareFilter类也是一个选择,同样可以正常工作。当读取一行时该接口有下面的方法在多个地方可以调过滤器有什么用途:增强hbase查询数据的功能减少服务端返回给客户端的数据量描述HBase,zookeeper搭建过程解压缩进入zookeeper-3.4.9目录l拷贝conf/zoo_sample.cfgcpconf/zoo_sample.cfgconf/zoo.cfgl编辑配置文件conf/zoo.cfg#ThenumberofmillisecondsofeachticktickTime=2000#Thenumberofticksthattheinitial#synchronizationphasecantakeinitLimit=10#Thenumberofticksthatcanpassbetween#sendingarequestandgettinganacknowledgementsyncLimit=5#thedirectorywherethesnapshotisstored.#donotuse/tmpforstorage,/tmphereisjust#examplesakes.dataDir=/home/bigdata/software/zookeeper-3.4.9/zookeeper_data#theportatwhichtheclientswillconnectclientPort=2181#ThenumberofsnapshotstoretainindataDirautopurge.snapRetainCount=5#Purgetaskintervalinhoursautopurge.purgeInterval=1l启动zookeeperbin/zkServer.shstart在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.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.shl在master上启动HBasebin/start-hbase.shl查看是否启动成功客户端读取信息流程(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部分的存储:要写入的数据会先写到HMemca

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功