mapreduce从hbase大量读数据超时异…

本文介绍了HBase在进行scan操作时出现超时异常的原因及解决办法,通过调整相关参数来提高系统的稳定性和效率。
错误描述:

16/05/06 19:56:13 INFO mapreduce.Job: Task Id attempt_1461653563167_0008_m_000001_2, Status FAILED
Error: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Fri May 06 19:55:05 CST 2016, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=60302: row '' on table 'solway_data_pv' at region=solway_data_pv,\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,1462414827453.d8f26eae36431b4aa0a1c834dc8fd9d8., hostname=solway-online10,60020,1462432265703, seqNum=2753

        at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.
        at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.
        at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.
        at org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.
        at org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.
        at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase$1.nextKeyValue(TableInputFormatBase.
        at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.
        at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.
        at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.
        at org.apache.hadoop.mapred.MapTask.run(MapTask.
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.
        at 
        at 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=60302: row '' on table 'solway_data_pv' at region=solway_data_pv,\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,1462414827453.d8f26eae36431b4aa0a1c834dc8fd9d8., hostname=solway-online10,60020,1462432265703, seqNum=2753
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.
        at 
        at 
        at 
        at 
Caused by: java.io.IOException: Call to solway-online10/60.12.10.20:60020 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=5, waitTime=60001, operationTimeout=60000 expired.
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.wrapException(RpcClientImpl.
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.
问题原因:HBase有很多超时机制,本次报错应当是RPC超时引起的
解决方案:一般HBase进行scan读的时候,超时异常,可根据实际情况适当调整如下参数解决:

set mapreduce.task.timeout=



1200000



set 



hbase.client.scanner.timeout.period=600000



set 



hbase.rpc.timeout=600000



其中,







hbase.client.scanner.timeout.period和







hbase.rpc.timeout最好配置一样大
<think> 我们正在讨论HBase统计表数据量的方法。根据用户提供的引用和之前的问题,用户已经了解了几种方法: 1. HBase Shell的count命令:适合小数据量,但延时较高。 2. MapReduce方式(RowCounter):适合大数据量,但执行时间较长。 3. 使用协处理器(Coprocessor)的方法:通过添加协处理器来统计行数。 4. 使用Java API通过RegionMetrics统计(这是之前回答中提到的)。 用户现在的问题是:我想查找HBase统计表数据量的方法。请问HBase统计表数据量的方法? 根据引用,我们可以总结如下: 引用[1]提到两种方法: - Shell命令:`count '表名', INTERVAL => 间隔条数`,适合小数据量,但较高延时。 - MapReduce任务:`hbase org.apache.hadoop.hbase.mapreduce.RowCounter 表名`,适合大数据量,但需要等待较长时间。 引用[2]补充了RowCounter的执行原理(MapReduce)和结果查看方式(打印在控制台或日志文件中)。 引用[3]和[4]提到了使用协处理器(Coprocessor)来统计表数据量,但需要配置协处理器并加载到表中。 结合之前的回答,我们还介绍了使用Java API通过RegionMetrics来统计行数(高效,但可能是近似值)。 因此,我们可以将统计方法归纳为四类: 1. HBase Shell的count命令 2. MapReduce方式(RowCounter) 3. 使用协处理器 4. Java API(通过Admin.getRegionMetrics) 现在,我们给出一个清晰的回答,涵盖这四种方法,并说明适用场景。 </think> ### HBase 统计表数据量的方法总结 以下是 HBase 中统计表数据量的主要方法,根据场景需求选择合适方案: #### 1. **HBase Shell 命令(小数据量)**[^1] ```shell # 基础命令(全表扫描,效率低) count 'table_name' # 添加采样间隔(推荐) count 'table_name', INTERVAL => 100000 # 每10万行输出一次进度 ``` - **适用场景**:数据量较小(< 千万级)的测试环境 - **特点**: - 简单易用,直接执行 - 全表扫描导致高延迟(大数据量可能超时) - 结果实时显示在 Shell 中 #### 2. **MapReduce 方式(大数据量)**[^1][^2] ```shell hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'table_name' ``` - **适用场景**:亿级数据量的生产环境 - **特点**: - 基于 MapReduce 分布式计算 - 结果输出到控制台或日志文件(如 `hbase.log`) - 执行时间长(需等待 MapReduce 作业完成) - **精确统计**,适合审计等场景 #### 3. **Java API 区域指标统计(高效近似值)** ```java // 核心代码片段 try (Admin admin = connection.getAdmin()) { List<RegionInfo> regions = admin.getRegions(TableName.valueOf("table_name")); long totalRows = 0; for (RegionInfo region : regions) { RegionMetrics metrics = admin.getRegionMetrics(region.getRegionName()); totalRows += metrics.getRowCount(); // 获取Region行数 } System.out.println("总行数: " + totalRows); } ``` - **适用场景**:需要快速获取数据量概览 - **特点**: - 毫秒级响应(直接读取 RegionServer 内存指标) - 结果为**近似值**(因指标步更新) - 支持扩展统计: ```java metrics.getStoreFileSize(); // 存储大小 metrics.getReadRequestCount(); // 读请求数 metrics.getCellCount(); // 单元格总数 ``` #### 4. **协处理器(Coprocessor)**[^3][^4] ```java // 配置协处理器(需提前部署Jar) Configuration conf = HBaseConfiguration.create(); conf.setLong("hbase.client.scanner.caching", 1000); // 优化扫描缓存 addCoprocessor(conf, "table_name", "mycoprocessor.SampleCoprocessor"); ``` - **适用场景**:需要实时统计或复杂聚合 - **特点**: - 在 RegionServer 端并行计算 - 可实现条件过滤统计(如特定列族) - 部署复杂,需修改表结构: ```shell alter 'table_name', METHOD => 'table_att', 'coprocessor' => 'hdfs://path/to/jar|com.example.Coprocessor|1001|' ``` ### 方案对比 | 方法 | 精度 | 速度 | 适用场景 | 复杂度 | |---------------------|------------|----------|------------------------------|--------| | Shell `count` | 精确 | 慢 | 小数据测试 | ★☆☆☆☆ | | MapReduce RowCounter| 精确 | 极慢 | 大数据审计 | ★★★☆☆ | | Java RegionMetrics | 近似 | 极快 | 实时监控/概览 | ★★☆☆☆ | | 协处理器 | 精确/条件 | 中等 | 复杂聚合/条件统计 | ★★★★★ | > **最佳实践**: > - 日常监控用 `RegionMetrics`(效率优先) > - 数据审计用 `RowCounter`(精度优先) > - 避免 Shell 命令统计超大数据集
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值