【问题标题】:How to debug why the map job fails after multiple retries如何调试多次重试后映射作业失败的原因
【发布时间】:2017-06-16 00:59:09
【问题描述】:

我写了一个 mapreduce 作业来扫描某个时间范围内的 hbase 表,以计算我们需要分析的某些元素。

MR 工作中的映射器不断失败,但我不知道为什么。似乎每次我运行作业时,都会有不同数量的映射器失败。 Cloudera 管理器的 YARN 日志(见下文)对于指出问题所在没有帮助,尽管有人说我可能内存不足。

它似乎重试了多次,但每次都失败。我需要做些什么才能让它停止失败,或者我如何记录事情以帮助我更好地确定正在发生的事情?

以下是来自 YARN 的失败映射器之一的日志。

错误:org.apache.hadoop.hbase.client.RetriesExhaustedException: 尝试 = 36 后失败,例外:Thu Jun 15 16:26:57 PDT 2017, 空,java.net.SocketTimeoutException:callTimeout=60000, callDuration=60301: 行 '152_p3401.db161139.sjc102.dbi_1496271480' on 表 'dbi_based_data' 在 region=dbi_based_data,151_p3413.db162024.iad4.dbi_1476974340,1486675565213.d83250d0682e648d165872afe5abd60e.,主机名=hslave35118.ams9.mysecretdomain.com,6048930,1483570 seqNum=19308931 在 org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:276) 在 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:207) 在 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60) 在 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200) 在 org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320) 在 org.apache.hadoop.hbase.client.ClientScanner.loadCache(ClientScanner.java:403) 在 org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:364) 在 org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:236) 在 org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:147) 在 org.apache.hadoop.hbase.mapreduce.TableInputFormatBase$1.nextKeyValue(TableInputFormatBase.java:216) 在 org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:556) 在 org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80) 在 org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91) 在 org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144) 在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 引起 由:java.net.SocketTimeoutException:callTimeout=60000, callDuration=60301: 行 '152_p3401.db161139.sjc102.dbi_1496271480' on 表 'dbi_based_data' 在 region=dbi_based_data,151_p3413.db162024.iad4.dbi_1476974340,1486675565213.d83250d0682e648d165872afe5abd60e.,主机名=hslave35118.ams9.mysecretdomain.com,6048930,1483570 seqNum=19308931 在 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:159) 在 org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:65) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745) 引起: java.io.IOException:调用 hslave35118.ams9.mysecretdomain.com/10.216.35.118:60020 失败 本地异常:org.apache.hadoop.hbase.ipc.CallTimeoutException: 调用 id=12,waitTime=60001,operationTimeout=60000 过期。在 org.apache.hadoop.hbase.ipc.AbstractRpcClient.wrapException(AbstractRpcClient.java:291) 在 org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1272) 在 org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:226) 在 org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:331) 在 org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:34094) 在 org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:219) 在 org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:64) 在 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200) 在 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:360) 在 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:334) 在 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:126) ... 4 更多原因: org.apache.hadoop.hbase.ipc.CallTimeoutException:调用 id=12, 等待时间=60001,操作超时=60000 已过期。在 org.apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.java:73) 在 org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1246) ... 13 更多

【问题讨论】:

    标签: java mapreduce hbase hadoop-yarn mapper


    【解决方案1】:

    所以看起来我需要延长超时设置。在我的 Java 程序中,我必须添加以下几行以使异常消失:

        conf.set("hbase.rpc.timeout","90000");
        conf.set("hbase.client.scanner.timeout.period","90000");
    

    找到答案on this link on Cloudera's site

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 2018-07-08
      • 2013-10-05
      • 2017-08-23
      • 2013-08-13
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多