【hbase】hbase使用MR统计行数指定yarn队列,及后续遇到的问题

一、前言

最近需要统计一张hbase表的条数,网上的很多案例都是使用MR的方式来进行统计,所以我们也采用这个方式。

但是在实施过程中,遇到一些问题。使用MR去统计时,如果不指定队列,那么就会使用默认的YARN队列,而我们的默认队列是完全没有资源的。

网上关于指定YARN队列的文章也比较少,这里整理并记录一下。

二、准备

这里我们使用 hbase.RowCounter包执行MR的任务。

[hbase@bi-hadoop02 ~]$ hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.job.queuename=root.bi 'default:rc_bifrost_user_data' --starttime=1627920000000 --endtime=1628006400000
  • 重点:
    -Dmapreduce.job.queuename=root.bi

上面这个参数就是我们今天的重点,另外一个注意这个参数的位置,是在包后面,在表的前面,注意不要将参数写在别的位置。

三、补充

另外一个,就是在使用MR统计行数时,抛出了大量的错误。

报错一:

报错内容如下:
在这里插入图片描述

21/09/07 16:19:15 INFO mapreduce.Job: Task Id : attempt_1628044774004_796644_m_000033_1, Status : FAILED
Error: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=11, exceptions:
Tue Sep 07 16:17:23 CST 2021, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=60202: row '101232_99306126' on table 'rc_bifrost_user_data' at region=rc_bifrost_user_data,101232_94527761,1618890773382.b8903826797f396bd40907e9268067f6., hostname=dx-hadoop100.dx,60020,1629967785931, seqNum=32768084

        at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:320)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:247)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:62)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
        at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:327)
        at org.apache.hadoop.hbase.client.ClientScanner.loadCache(ClientScanner.java:410)
        at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:371)
        at org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:252)
        at org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:147)
        at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase$1.nextKeyValue(TableInputFormatBase.java:216)
        at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:562)
        at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
        at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=60202: row '101232_99306126' on table 'rc_bifrost_user_data' at region=rc_bifrost_user_data,101232_94527761,1618890773382.b8903826797f396bd40907e9268067f6., hostname=dx-hadoop100.dx,60020,1629967785931, seqNum=32768084
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:169)
        at org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:80)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Call to dx-hadoop100.dx/10.11.34.85:60020 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=12, waitTime=60001, operationTimeout=60000 expired.
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient.wrapException(AbstractRpcClient.java:292)
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1276)
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:227)
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:336)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:34094)
        at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:220)
        at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:65)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:397)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:371)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:136)
        ... 4 more
Caused by: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=12, waitTime=60001, operationTimeout=60000 expired.
        at org.apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.java:73)
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1250)

问题原因:
HBase Client Scanner Timeout。

解决方案:
修改此参数:hbase.client.scanner.timeout.period 默认为1分钟,延长该值。
在这里插入图片描述

另外这篇博客对于一些参数设置介绍比较多,大家可以根据自己的实际情况来进行配置: https://blog.csdn.net/jiangshouzhuang/article/details/52355670

问题二:

统计行数是使用的MR进行统计的,这个之前已经说过了,但是有个注意点就是当遇到上面或者别的一些报错时,MAP端失败的任务是不会重试的,所以我们在统计hbase表的行数时,可以会发现统计的结果与实际结果对不上。

这个就是因为在进行MR任务时,如果MAP端任务有失败,不会重试。这个需要大家注意一下。

梦好莫催醒,由他好处行。——纳兰性德《菩萨蛮·朔风吹散三更雪》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值