Hbase运维手册_第1页
Hbase运维手册_第2页
Hbase运维手册_第3页
Hbase运维手册_第4页
Hbase运维手册_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、.hbase运维手册1.region情况需要检查1. region的数量(总数和每台regionserver上的region数)2. region的大小如果发现异常可以通过手动merge region和手动分配region来调整从cdh前台和master前台以及regionserver的前台都可以看到region数量,如master前台: 在region server前台可以看到storefile大小:2.缓存命中率精品.缓存命中率对hbase的读有很大的影响,可以观察这个指标来调整blockcache的大小。从regionserver web页面可以看到block cache的情况: 注意:

2、hbase上regionserver的内存分为两个部分,一部分作为memstore,主要用来写;另外一部分作为blockcache,主要用于读。 写请求会先写入memstore,regionserver会给每个region提供列族数提供一定数量的memstore,当memstore满64mb以后,会启动 flush刷新到磁盘。当memstore的总大小超过限制时(heapsize * hbase.regionserver.global.memstore.upperlimit * 0.9),会强行启动flush进程,从最大的memstore开始flush直到低于限制。 读请求先到memstore

3、中查数据,查不到就到blockcache中查,再查不到就会到磁盘上读,并把读的结果放入blockcache。由于blockcache采用的是lru策略,因此blockcache达到上限(heapsize * hfile.block.cache.size * 0.85)后,会启动淘汰机制,淘汰掉最老的一批数据。一个regionserver上有一个blockcache和n个memstore,它们的大小之和不能大于等于heapsize * 0.8,否则hbase不能正常启动。默认配置下,blockcache为0.2,而memstore为0.4。在注重读响应时间的应用场景下,可以将 blockcach

4、e设置大些,memstore设置小些,以加大缓存的命中率。hbase regionserver包含三个级别的block优先级队列: single:如果一个block第一次被访问,则放在这一优先级队列中; multi:如果一个block被多次访问,则从single队列移到multi队列中; inmemory:如果一个block是inmemory的,则放到这个队列中。以上将cache分级思想的好处在于: 首先,通过inmemory类型cache,可以有选择地将in-memory的column families放到regionserver内存中,例如meta元数据信息; 通过区分single和mul

5、ti类型cache,可以防止由于scan操作带来的cache频繁颠簸,将最少使用的block加入到淘汰算法中。默认配置下,对于整个blockcache的内存,又按照以下百分比分配给single、multi、inmemory使用:0.25、0.50和0.25。注意,其中inmemory队列用于保存hbase meta表元数据信息,因此如果将数据量很大的用户表设置为inmemory的话,可能会导致meta表缓存失效,进而对整个集群的性能产生影响。精品.3.读写请求数通过读写请求数可以大概看出每台regionserver的压力,如果压力分布不均匀,应该检查regionserver上的region以及

6、其它指标 4.压缩队列压缩队列存放的是正在压缩的storefile,compact操作对hbase的读写影响较大通过cdh的hbase图表库可以看到集群总的压缩队列大小:可以通过cdh的hbase主页查询compact日志:精品.点击“压缩”进入:5.刷新队列精品.单个region的memstore写满(128m)或regionserver上所有region的memstore大小总合达到门限时会进行flush操作,flush操作会产生新的storefile同样可以通过cdh的hbase前台查看flush日志:6.rpc调用队列没有及时处理的rpc操作会放入rpc操作队列,从rpc队列可以看出服

7、务器处理请求的情况 7.文件块保存在本地的百分比datanode和regionserver一般都部署在同一台机器上,所以region server管理的region会优先存储在本地,以节省网络开销。如果block locality较低有可能是刚做过balance或刚重启,经过compact之后region的数据都会写到当前机器的datanode,block locality也会慢慢达到接近100:8.内存使用情况内存使用情况,主要可以看used heap和memstore的大小,如果usedheadp一直超过80-85%以上是比较危险的精品.memstore很小或很大也不正常从region s

8、erver的前台可以看到: 9.检查数据一致性以及修复方法数据一致性是指:1. 每个region都被正确的分配到一台regionserver上,并且region的位置信息及状态都是正确的。2. 每个table都是完整的,每一个可能的rowkey都可以对应到唯一的一个regionhbase hbck注:有时集群正在启动或region正在做split操作,会造成数据不一致hbase hbck -details加上details会列出更详细的检查信息,包括所以正在进行的split任务hbase hbck table1 table2如果只想检查指定的表,可以在命令后面加上表名,这样可以节省操作时间cd

9、h通过cdh提供的检查报告也可以看到hbck的结果,日常只需要看cdh hbck的报告即可:精品. 选择“最近的hbck结果”: 1)局部的修复如果出现数据不一致,修复时要最大限度的降低可能出现的风险,使用以下命令对region进行修复风险较低: hbase hbck -fixassignments精品. 修复region没有分配(unassigned),错误分配(incorrectly assigned)以及多次分配(multiply assigned)的问题 hbase hbck -fixmeta 删除meta表里有记录但hdfs里没有数据记录的region 添加hdfs里有数据但是met

10、a表里没有记录的region到meta表 hbase hbck -repairholes 等价于:hbase hbck -fixassignments -fixmeta -fixhdfsholes -fixhdfsholes的作用: 如果rowkey出现空洞,即相邻的两个region的rowkey不连续,则使用这个参数会在hdfs里面创建一个新的region。创建新的region之后要使用-fixmeta和-fixassignments参数来使用挂载这个region,所以一般和前两个参数一起使用 2)region重叠修复 进行以下操作非常危险,因为这些操作会修改文件系统,需要谨慎操作! 进行以

11、下操作前先使用hbck details查看详细问题,如果需要进行修复先停掉应用,如果执行以下命令时同时有数据操作可能会造成不可期的异常。 hbase hbck -fixhdfsorphans 将文件系统中的没有metadata文件(.regioninfo)的region目录加入到hbase中,即创建.regioninfo目录并将region分配到regionser hbase hbck -fixhdfsoverlaps 通过两种方式可以将rowkey有重叠的region合并: 1. merge:将重叠的region合并成一个大的region 2. sideline:将region重叠的部分去掉

12、,并将重叠的数据先写入到临时文件,然后再导入进来。 如果重叠的数据很大,直接合并成一个大的region会产生大量的split和compact操作,可以通过以下参数控制region过大: -maxmerge 合并重叠region的最大数量 -sidelinebigoverlaps 假如有大于maxmerge个数的region重叠,则采用sideline方式处理与其它region的重叠. -maxoverlapstosideline 如果用sideline方式处理重叠region,最多sideline n个region .精品. hbase hbck -repair 以下命令的缩写:hba hba

13、se hbck -fixassignments -fixmeta -fixhdfsholes -fixhdfsorphans -fixhdfsoverlaps -fixversionfile sidelinebigoverlaps 可以指定表名:hba hbase hbck -repair table1 table2 hbase hbck -fixmetaonly fixassignments 如果只有meta表的region不一致,则可以使用这个命令修复 hbase hbck fixversionfile hbase的数据文件启动时需要一个version file,如果这个文件丢失,可以用这

14、个命令来新建一个,但是要保证hbck的版本和hbase集群的版本是一样的 hbase org.apache.hadoop.hbase.util.hbck.offlinemetarepair 如果root表和meta表都出问题了hbase无法启动,可以用这个命令来创建新的root和meta表。 这个命令的前提是hbase已经关闭,执行时它会从hbase的home目录加载hbase的相关信息(.regioninfo),如果表的信息是完整的就会创建新的root和meta目录及数据 hbase hbck fixsplitparents 当region做split操作的时候,父region会被自动清除掉

15、。但是有时候子region在父region被清除之前又做了split。造成有些延迟离线的父region存在于meta表和hdfs中,但是没有部署,hbase又不能清除他们。这种情况下可以 使用此命令重置这些在meta表中的region为在线状态并且没有split。然后就可以使用之前的修复命令把这个region修复 10.手动merge region进行操作前先将balancer关闭,操作完成后再打开balancer经过一段时间的运行之后有可能会产生一些很小的region,需要定期检查这些region并将它们和相邻的region合并以减少系统的总region数,减少管理开销 合并方法:1. 找到

16、需要合并的region的encoded name2. 进入hbase shell3. 执行merge_region region1,region2 手动分配region精品.如果发现台regionserver资源占用特别高,可以检查这台regionserver上的region是否存在过多比较大的region,通过hbase shell将部分比较大的region分配给其他不是很忙的regions server:move encoderegionname, servername #encoderegionname指的regioname后面的编码,servername指的是master-status

17、的region servers列表例:move 24d9eef6ba5616b1a60180503e62bae7,dn1,60020,1429840460046手动major_compact进行操作前先将balancer关闭,操作完成后再打开balancer选择一个系统比较空闲的时间手工major_compact,如果hbase更新不是太频繁,可以一个星期对所有表做一次 major_compact,这个可以在做完一次major_compact后,观看所有的storefile数量,如果storefile数量增加到 major_compact后的storefile的近二倍时,可以对所有表做一次ma

18、jor_compact,时间比较长,操作尽量避免高锋期注:fms现在生产上开启了自动major_compact,不需要做手动major compactbalance_switchbalance_switch true 打开balancerbalance_switch flase 关闭balancer配置master是否执行平衡各个regionserver的region数量,当我们需要维护或者重启一个regionserver时,会关闭balancer,这样就使得region在regionserver上的分布不均,这个时候需要手工的开启balance。regionserver重启 graceful

19、_stop.sh -restart -reload -debugnodename进行操作前先将balancer关闭,操作完成后再打开balancer这个操作是平滑的重启regionserver进程,对服务不会有影响,他会先将需要重启的regionserver上面的所有region迁移到其它的服务器,然后重启,最后又会将之前的region迁移回来,但我们修改一个配置时,可以用这种方式重启每一台机 子,对于hbase regionserver重启,不要直接kill进程,这样会造成在zookeeper.session.timeout这个时间长的中断,也不要通过bin/hbase-daemon.sh

20、stop regionserver去重启,如果运气不太好,-root-或者.meta.表在上面的话,所有的 请求会全部失败regionserver关闭下线bin/graceful_stop.sh nodename进行操作前先将balancer关闭,操作完成后再打开balancer和上面一样,系统会在关闭之前迁移所有region,然后stop进程。精品.flush表所有memstore刷新到hdfs,通常如果发现regionserver的内存使用过大,造成该机的 regionserver很多线程block,可以执行一下flush操作,这个操作会造成hbase的storefile数量剧增,应尽量避

21、免这个操 作,还有一种情况,在hbase进行迁移的时候,如果选择拷贝文件方式,可以先停写入,然后flush所有表,拷贝文件强制splithbase 允许客户端强制执行split,在hbase shell中执行以下命令: split forced_table, b /其中forced_table 为要split的table , b 为split 点region splits执行过程:region server处理写请求的时候,会先写入memstore,当memstore 达到一定大小的时候,会写入磁盘成为一个store file。这个过程叫做 memstore flush。当store file

22、s 堆积到一定大小的时候,region server 会 执行compact操作,把他们合成一个大的文件。 当每次执行完flush 或者compact操作,都会判断是否需要split。当发生split的时候,会生成两个region a 和 region b但是parent region数据file并不会发生复制等操作,而是region a 和region b 会有这些file的引用。这些引用文件会在下次发生compact操作的时候清理掉,并且当region中有引用文件的时候是不会再进行split操作的。这个地方需要注意一下:(大量的写入会刷大量的hfile,一个region就会对这大量的hfi

23、le进行compact操作。如果这时候触发了split操作,这个region会成为父region,而两个子region会保留父region的引用文件。而在这其间,子region会继续写入数据。那么又可能触发子region的compact,这里的关键点来了子region如果做compact的文件都是新写入的文件,而迟迟不去compact父region 引用的文件,会导致一个问题就是这个子region无法被split掉了(因为含有父region引用的region是不能被split的)。那么子region越来越大,由于写入文件数量急剧增长,父region的ref文件总也得不到机会compact,就形

24、成了大region的恶性循环情况由于region太大,compact无法完成,但是由于compact无法完成导致region无法split,无法分摊compact的压力给其他regionserver。)虽然split region操作是region server单独确定的,但是split过程必须和很多其他部件合作。region server 在split开始前和结束前通知master,并且需要更新.meta.表,这样,客户端就能知道有新的region。在hdfs中重新排列目录结构和数据文件。split是一个复杂的操作。在split region的时候会记录当前执行的状态,当出错的时候,会根据状

25、态进行回滚。下图表示split中,执行的过程。(红色线表示region server 或者master的操作,绿色线表示client的操作。)精品.1.region server 决定split region,第一步,region server在zookeeper中创建在/hbase/region-in-transition/region-name 目录下,创建一个znode,状态为splitting.2.因为master有对region-in-transition 的znode做监听,所以,mater的得知parent region需要split3.region server 在hdfs的p

26、arent region的目录下创建一个名为“.splits”的子目录4.region server 关闭parent region。强制flush缓存,并且在本地数据结构中标记region为下线状态。如果这个时候客户端刚好请求到parent region,会抛出notservingregionexception。这时客户端会进行补偿性重试。5.region server在.split 目录下分别为两个daughter region创建目录和必要的数据结构。然后创建两个引用文件指向parent regions的文件。6.region server 在hdfs中,创建真正的region目录,并且

27、把引用文件移到对应的目录下。7.region server 发送一个put的请求到.meta.表中,并且在.meta.表中设置parent region为下线状态,并且在parent region对应的row中两个daughter region的信息。但是这个时候在.meta.表中daughter region 还不是独立的row。这个时候如果client scan .meta.表,会发现parent region正在split,但是client还看不到daughter region的信息。当这个put 成功之后,parent region split会被正在的执行。如果在 rpc 成功之前

28、region server 就失败了,master和下次打开parent region的region server 会清除关于这次split的脏状态。但是当rpc返回结果给到parent region ,即.meta.成功更新之后,region split的流程还会继续进行下去。相当于是个补偿机制,下次在打开这个parent region的时候会进行相应的清理操作。8.region server 打开两个daughter region接受写操作。精品.9.region server 在.meta.表中增加daughters a 和 b region的相关信息,在这以后,client就能发现这两个新的regions并且能发送请求到这两个新的region了。client本地具体有.meta.表的缓存,当他们访问到parent region的时候,发现parent region下线了,就会重新访问.meta.表获取最新的信息,并且更新本地缓存。10.region server 更新 znode 的状态为split。mas

温馨提示

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

评论

0/150

提交评论