为什么hbase返回应该使所有单元格都过期的行键

时间:2017-06-29 23:33:29

标签: hadoop hbase

我们有一张TTL为30天的桌子。表中没有为列或单元格定义的其他TTL。

hbase(main):001:0> desc 'server_based_data'
Table server_based_data is ENABLED                                                                                                                                                                   
server_based_data                                                                                                                                                                                    
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                          
{NAME => 'raw_data', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', TTL => '2592000 SECONDS (30 DAYS)'
, KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

然而,当我对它进行扫描时,似乎它正在查找/运行到由于TTL过期而应删除所有单元格的rowkeys。我知道这是因为时间戳是密钥的一部分,例如hash_servername_timestamp或65_app129041.iad1.mydomain.com_1476641940

1476641940是2016年10月16日。我从下午3点到下午4点进行扫描6/26/2017

这是我的扫描对象/代码的片段,用于处理结果。

    Scan scan = new Scan();
    scan.addColumn(Bytes.toBytes("raw_data"), Bytes.toBytes(fileType));
    scan.setCaching(500);
    scan.setCacheBlocks(false);
    scan.setTimeRange(start, end);
    TableMapReduceUtil.initTableMapperJob(tableName, scan, MTTRMapper.class, Text.class, IntWritable.class, job);

我的工作失败(我认为),因为太多的地图工作失败/被杀死。以下是失败的地图作业的其中一个日志的片段。

  

错误:org.apache.hadoop.hbase.client.RetriesExhaustedException:   尝试= 36后失败,例外:2017年6月28日星期三13:46:57,   null,java.net.SocketTimeoutException:callTimeout = 120000,   callDuration = 120301:row' 65_app129041.iad1.mydomain.com_1476641940'   在桌面' server_based_data'在region = server_based_data

我尝试手动获取一些行的内容但没有返回(按预期方式)

get 'server_based_data', '65_app129041.iad1.mydomain.com_1476641940'
COLUMN                                             CELL                                                                                                                                              

0 row(s) in 0.2900 seconds

我的问题是:

  1. 为什么这些键出现在扫描中?它们不应该出现,因为它们不会落在开始和结束时间之间,因为TTL已经过期。
  2. 如何调试这些密钥的来源,因为从表中获取rowkey会产生0行返回。
  3. 从测试运行到测试运行,问题行不一样。我运行我的程序背靠背,每次,问题行都不同。每次运行之间都有一些相同,但它们不是100%相同。

0 个答案:

没有答案