zoukankan      html  css  js  c++  java
  • HBase问题

    1.HBase Region问题

    问题

    现场反映数据查询错误,界面上显示有总数和分页,但查询的详细信息却为空。排查后总体表现如下:

    1、  hbase界面的region存在黑洞。

    2、  hbase region界面多出了很多奇怪的region,Startrow和endrow都不是正常数据可能产生的region。

    3、  很多region未上线。

    存在多个start region和多个end region

    事故原因分析

    一、hbase split过程

     

    1、 首先各种校验省不了。比如region是否在对应regionServer中,splitPoint是否符合要求等等。

    2、  如果没有指定splitPoint,根据策略(共3种)分region。这里使用的是默认的IncreasingToUpperBoundRegionSplitPolicy策略。

    3、 调用线程池,开线程执行split

    3.1.createDaughters 创建两个region,获得parent region的写锁

    3.1.1在zk上创建一个临时的node splitting point,

    3.1.2等待master直到这个region转为splitting状态

    3.1.3之后建立splitting的文件夹,

    3.1.4等待region的flush和compact都完成后,关闭这个region

    3.1.5从HRegionServer上移除,加入到下线region中

    3.1.6进行regionsplit操作,创建线程池,用StoreFileSplitter类将region下的所有 Hfile(StoreFile)进行split,(split row在hfile中的不管,其他的都进行引用,把引用文件分别写到region下边)

    3.1.7.生成左右两个子region,删除meta上parent,根据引用文件生成子region的regioninfo,写到hdfs上

    3.2.stepsAfterPONR 调用DaughterOpener类run打开两个子region,调用initilize

    3.2.1.向hdfs上写入.regionInfo文件以便meta挂掉以便恢复

    3.2.2.初始化其下的HStore,主要是LoadStoreFiles函数:

    对于该store函数会构造storefile对象,从hdfs上获取路径和文件,每个文件一个 storefile对象,对每个storefile对象会读取文件上的内容创建一个HalfStoreFileReader读对象来操作该region的父region上的相应的文件,及该region上目前存储的是引用文件,其指向的是其父region上的相应的文件,对该region的所有读或写都将关联到父region上 将子Region添加到rs的online region列表上,并添加到meta表上。

    二、原因分析

            由于region出现黑洞和多个start region以及多个end region,split应该已经执行了下线父region,创建两个子region的过程。此时断电导致数据写入错误,或者hdfs产生坏块。重启后错误的region上线致使表中的数据部分丢失。但其它未错乱的数据还是有的。

            基本上,数据丢失已经无法避免了。下面讨论的问题是介绍和使用hbase hbck工具解决hbase的hole(黑洞)、orphan(孤儿)、overlap(重叠)meta丢失、regioninfo丢失等不一致问题。

    解决方案

    1. sh hbase hbck –details:检查hbase是否存在不一致问题。

    Status:OK,表示没有发现不一致问题。

    Status:INCONSISTENT,表示有不一致问题。

    1. hole问题:指一张表中的多个region的startrow和endrow不能连贯,不能完全覆盖所有数据,产生数据空洞。

    黑洞的产生基本都是region丢失导致的,可以去hdfs的/hbase/archive目录找找是否存在丢失的region。如果不存在,这个region的数据也就找不回来了。Hbase在split此时数据入录可能丢失,需要修补。可以使用

    sh hbase hbck –fixHdfsHoles填补region。fixHdfsHoles只是创建region,并不挂载,需要再执行-fixAssignments -fixMeta 解决问题

    所以有了组合拳 -repairHoles 相当于执行了-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans修复region holes。

    1. orphan问题:一张表中存在一个起始region和一个结束region。两者缺失一个就是orphan。这里有两种可能,

    a.刚好起始的region丢失,使用-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region)

    b.tableinfo错误,使用-fixTableOrphans。

    1. overlap问题:指多个region的startrow和endrow中有部分或全部重叠,导致数据不知应该放在那个region上。使用-fixHdfsOverlaps修复重叠 region。另外-maxMerge <n>可以将几个重叠的region合并,一次合并的region数最大不超过n。
    2. meta丢失:hbase中维护了一张描述表信息的表,描述了每张表的region等基本信息。可以通过hbase shell scan’hbase:meta’查看。若meat表错误或丢失,该region就无法上线。可通过-fixMeta修复。

    -fixMeta通过hdfs上的regioninfo修复meta信息,所以若regioninfo丢失无法正确生成meta表。

    1. regioninfo丢失:regioninfo丢失,数据无法恢复了,只能把它当做holes来处理,使用- repairHoles生成新的regioninfo,而数据已经丢失。

    hbase针对常见的不一致问题给出了一些组合技能,下面介绍组合命令

    1、-repairHoles:用于修复黑洞等regioninfo丢失的问题。等价于-fixAssignments -fixMeta –fixHdfsHoles。数据会丢失。

    2、- repair:用于修复所有常见问题,相当于一键修复。等价于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps -fixReferenceFiles –fixTableLocks

  • 相关阅读:
    [USACO15FEB]Superbull 超级牛
    [SHOI2015]自动刷题机
    [BJOI2019]排兵布阵
    P3528 [POI2011]PAT-Sticks
    P3539 [POI2012]ROZ-Fibonacci Representation
    洛谷P1868 饥饿的奶牛
    洛谷P1462 通往奥格瑞玛的道路(SPFA+二分答案)
    [SDOI2008]山贼集团
    [SHOI2013]阶乘字符串
    30. 如何使用 GDB 调试 Go 程序?
  • 原文地址:https://www.cnblogs.com/warmingsun/p/7000076.html
Copyright © 2011-2022 走看看