`
bupt04406
  • 浏览: 347736 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

region split时metascan出现regioninfo为空

 
阅读更多

最近测试94版本时,出现过多次 HRegionInfo was null or empty in Meta  的异常 

WARN org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation: Encountered problems when prefetch META table:
java.io.IOException: HRegionInfo was null or empty in Meta for writetest, row=writetest,MNI07EGK9EOW7L7VG8TK,99999999999999
at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:170)
at org.apache.hadoop.hbase.client.MetaScanner.access$1(MetaScanner.java:143)
at org.apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.java:133)
at org.apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.java:1)
at org.apache.hadoop.hbase.client.HConnectionManager.execute(HConnectionManager.java:360)
at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:130)
at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:105)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.prefetchRegionCache(HConnectionManager.java:895)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:949)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:837)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:802) 
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionLocation(HConnectionManager.java:726)
at org.apache.hadoop.hbase.client.ServerCallable.connect(ServerCallable.java:82)
at org.apache.hadoop.hbase.client.ServerCallable.withRetries(ServerCallable.java:162)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1326)

 

 

客户端偶然捕获到metascan时regioninfo为空的情况,此时region正在split过程中。代码上看应该不会有空的情况,是什么原因呢?

 

 

Client 端:
metaTable = new HTable(configuration, HConstants.META_TABLE_NAME);
Result startRowResult = metaTable.getRowOrBefore(searchRow,
HConstants.CATALOG_FAMILY);
if (startRowResult == null) { throw new TableNotFoundException("Cannot find row in .META. for table: " + Bytes.toString(tableName) + ", row=" + Bytes.toStringBinary(searchRow)); }
byte[] value = startRowResult.getValue(HConstants.CATALOG_FAMILY,
HConstants.REGIONINFO_QUALIFIER);
if (value == null || value.length == 0) { throw new IOException("HRegionInfo was null or empty in Meta for " + Bytes.toString(tableName) + ", row=" + Bytes.toStringBinary(searchRow)); }

Server端:
HRegionServer 
public Result getClosestRowBefore(final byte[] regionName, final byte[] row,
final byte[] family) throws IOException { // locate the region we're operating on HRegion region = getRegion(regionName); // ask the region for all the data Result r = region.getClosestRowBefore(row, family); return r; }
HRegion 
public Result getClosestRowBefore(final byte [] row, final byte [] family)
throws IOException {
try {
Store store = getStore(family);
// get the closest key. (HStore.getRowKeyAtOrBefore can return null)
KeyValue key = store.getRowKeyAtOrBefore(row);
Result result = null;
if (key != null) { Get get = new Get(key.getRow()); get.addFamily(family); result = get(get, null); }
return result;
} finally { closeRegionOperation(); }
}
HRegion.getClosestRowBefore 里面有两块:
(1)KeyValue key = store.getRowKeyAtOrBefore(row);获取到最近的KeyValue 
(2)get(get, null),也就是scan的逻辑
在store.getRowKeyAtOrBefore时不考虑readPoint,所以memstore中任何信息都可以读取到
在scan逻辑中会考虑readPoint,只有小于等于readPoint才会被读取出来
在Region split时有一定概率会出现在查找一个key对应的region时,getRowKeyAtOrBefore可以找到新的region的keyvalue,但是scan时由于readPoint比较小,所以这个region的keyvalue都被过滤了,导致返回null,所以会出现上面的异常信息

 

90中不出现,主要是由于90中是先写hlog,后写memstore,然后更新mvcc,后两步很快,而94中顺序变为了先写memstore, 再写hlog,最后更新mvcc,当发生split时,如果正在写hlog的时候,客户端去访问,就会出现从memstore里面取出来的记录,在meta表里面因为mvcc的问题读取不到,从而报上述警告日志。

由于出现这个警告日志是在prefetch location中报出,实际在写的时候会再次去获取location,这时候发生问题的概率会变小,该问题对正常功能影响不是很大,先不改进。

分享到:
评论

相关推荐

    HBase二级索引

    HBase 二级索引实现方案的主要思路是,为每个 DataTable 创建一个与之对应的 IndexTable,通过各种途径,保证 IndexTable Region 与 DataTable Region 一一对应,并且存储在同一个 RegionServer 上。这样,每个 ...

    hbase 启动regionserver日志报错: Wrong FS: hdfs:// .regioninfo, expected: file:///

    NULL 博文链接:https://bnmnba.iteye.com/blog/2322332

    教你如何读取+QQ+纯真+IP+数据库

    使用System.IO命名空间下的StreamReader类,初始化时指定QQ纯真IP数据库的路径。例如: ```csharp using System.IO; ... StreamReader reader = new StreamReader("path_to_database.txt"); ``` 2. **读取...

    Hadoop学习总结之二:HDFS读写过程解析.doc

    同时,HDFS支持校验和来确保数据完整性,防止在传输过程中出现错误。 总结来说,HDFS的读写流程涉及客户端、NameNode和DataNode之间的复杂交互,包括元数据查询、数据流的处理、故障恢复和数据冗余策略。理解这一...

    数据库SQL学习笔记配套数据表

    学习MySQL时,掌握如何创建、查询、更新和删除数据表至关重要。 1. **创建数据表**:使用`CREATE TABLE`语句可以创建新的数据表。例如,你可以定义表名、字段名、数据类型以及可能的约束条件,如非空约束、唯一性...

    jsp 实现的IP地址查询功能的web应用,和QQ的显IP类似

    String regionInfo = ip2region.search(ip); ``` `search`方法会返回一个包含地区信息的字符串,然后你可以将这些信息展示在JSP页面上。 在部署方面,这个应用被设计为一个标准的Web应用,可以直接部署到Tomcat...

    中国HBase技术社区第3届-MeetUp-杭州站_HBase技术交流分享-范欣欣.pptx

    HBCK的常用命令包括基本检查、详细检查以及修复命令,如`-fixAssignments`用于修复region分配问题,`-fixMeta`则用于修正.regioninfo文件和hbase:meta元数据表的不一致。 RIT(Regions In Transition)指的是在...

    手机号码查询归属地

    3. **处理结果**:调用查询方法后,会返回一个包含归属地信息的对象,比如 `RegionInfo`,包含省份、城市、运营商等信息。开发者需要解析这个对象,提取出所需的数据。 4. **异常处理**:考虑到可能会有无效的电话...

    cfi.rar_CFI

    CFI,全称为Control Flow Integrity(控制流完整性),是一种安全技术,旨在保护程序免受诸如跳跃指令注入等攻击。在IT行业中,CFI是防御代码注入攻击的重要手段,特别是针对那些无法通过其他方式(如DEP、ASLR)...

    GUI应用程序设计第八章

    开发者可以利用丰富的工具和类库来实现无障碍和国际化功能,如System.Windows.Forms.AccessibleObject类提供的属性和方法,以及System.Globalization命名空间下的类,如CultureInfo和RegionInfo,它们为创建全球化和...

    .net 取IP地址 带纯真数据库

    在.NET开发中,获取IP地址并进行地理位置定位是一项常见的需求,尤其当涉及到用户行为分析、安全防护或个性化服务时。"纯真数据库"(通常指的是"纯真IP库")是一个广泛使用的IP地址库,它包含了全球范围内的IP地址与...

    c#,VB打印需知也是必知的常识,

    这段代码首先判断当前系统是否使用公制单位,如果是,则将对话框中设置的页边距从公制单位转换为.NET所用的英制单位(这里以`Point`为例),从而确保在再次打开页面设置对话框时,显示的值与用户输入的值一致。...

    获取系统文化信息的源代码例子

    RegionInfo currentRegion = RegionInfo.CurrentRegion; Console.WriteLine($"当前区域名称:{currentRegion.EnglishName}"); Console.WriteLine($"当前货币符号:{currentRegion.CurrencySymbol}"); // 显示...

    .net Framwork 复习试题与笔记

    ### .NET Framework 复习知识点总结 #### 一、系统类型的分类 ...- `RegionInfo`:提供区域信息。 - `DateTimeFormatInfo`:日期时间格式化。 - `NumberFormatInfo`:数字格式化。 - `CompareInfo`:字符串比较规则。

    CountryInfo-LanguageInfo-CurrencyInfo:CountryInfo、LanguageInfo 和 CurrencyInfo 类

    CountryInfo-LanguageInfo-CurrencyInfo CountryInfo、LanguageInfo 和 CurrencyInfo 类 此代码复制自。 CountryInfo 和 RegionInfo 有什么区别?

    Microsoft .NET Framework 3.5 Types and Namespaces

    - **HttpRuntime**:提供了 ASP.NET 运行时环境的信息。 - **HttpServerUtility**:提供了一系列服务器实用工具方法。 - **System.Web.ApplicationServices**:提供了一些新的服务,如认证、配置和角色管理。 - ...

Global site tag (gtag.js) - Google Analytics