【问题标题】:Hive error : java.io.IOException: Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProviderHive 错误:java.io.IOException:无法创建代理提供程序类 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
【发布时间】:2015-08-06 11:28:12
【问题描述】:

我的配置单元查询有时会成功运行,但最大时间会给出错误“java.io.IOException:无法创建代理提供程序类 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”

以下是我的错误日志

java.lang.RuntimeException: java.io.IOException: 无法创建代理 提供者类 org.apache.hadoop.hdfs.server.namenode.ha.Con\ 图中的FailoverProxyProvider 位于 org.apache.hadoop.mapred.lib.CombineFileInputFormat.isSplitable(CombineFileInputFormat.java:154) 在 org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getMoreSplits(CombineFileInputFormat.java:283) 在 org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:239) 在 org.apache.hadoop.mapred.lib.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:75) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getSplits(HadoopShimsSecure.java:336) 在 org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getSplits(HadoopShimsSecure.java:302) 在 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:435) 在 org.apache.hadoop.mapreduce.JobSubmitter.writeOldSplits(JobSubmitter.java:525) 在 org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:517) 在 org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:399) 在 org.apache.hadoop.mapreduce.Job$10.run(Job.java:1295) 在 org.apache.hadoop.mapreduce.Job$10.run(Job.java:1292) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614) 在 org.apache.hadoop.mapreduce.Job.submit(Job.java:1292) 在 org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:564) 在 org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:559) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614) 在 org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:559) 在 org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:550) 在 org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:420) 在 org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:136) 在 org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:153) 在 org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:85) 在 org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1516) 在 org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1283) 在 org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1101) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:924) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:914) 在 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:269) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:221) 在 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:431) 在 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:367) 在 org.apache.hadoop.hive.cli.CliDriver.processReader(CliDriver.java:464) 在 org.apache.hadoop.hive.cli.CliDriver.processFile(CliDriver.java:474) 在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:756) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:694) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:633) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:212) 原因: java.io.IOException:无法创建代理提供程序类 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverPr\ 氧供应商在 org.apache.hadoop.hdfs.NameNodeProxies.createFailoverProxyProvider(NameNodeProxies.java:475) 在 org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:148) 在 org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:632) 在 org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:570) 在 org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:147) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2596) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169) 在 org.apache.hadoop.mapred.lib.CombineFileInputFormat.isSplitable(CombineFileInputFormat.java:151) ... 45 更多原因:java.lang.reflect.InvocationTargetException 在 sun.reflect.GeneratedConstructorAccessor32.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.apache.hadoop.hdfs.NameNodeProxies.createFailoverProxyProvider(NameNodeProxies.java:458) ... 53 更多原因:java.lang.OutOfMemoryError:GC 开销限制 在 java.util.Arrays.copyOf(Arrays.java:2219) 处超出 java.util.ArrayList.grow(ArrayList.java:242) 在 java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216) 在 java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208) 在 java.util.ArrayList.add(ArrayList.java:440) 在 java.lang.String.split(String.java:2288) 在 sun.net.util.IPAddressUtil.textToNumericFormatV4(IPAddressUtil.java:47) 在 java.net.InetAddress.getAllByName(InetAddress.java:1129) 在 java.net.InetAddress.getAllByName(InetAddress.java:1098) 在 java.net.InetAddress.getByName(InetAddress.java:1048) 在 org.apache.hadoop.security.SecurityUtil$StandardHostResolver.getByName(SecurityUtil.java:474) 在 org.apache.hadoop.security.SecurityUtil.getByName(SecurityUtil.java:461) 在 org.apache.hadoop.net.NetUtils.createSocketAddrForHost(NetUtils.java:235) 在 org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:215) 在 org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:163) 在 org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:152) 在 org.apache.hadoop.hdfs.DFSUtil.getAddressesForNameserviceId(DFSUtil.java:677) 在 org.apache.hadoop.hdfs.DFSUtil.getAddressesForNsIds(DFSUtil.java:645) 在 org.apache.hadoop.hdfs.DFSUtil.getAddresses(DFSUtil.java:628) 在 org.apache.hadoop.hdfs.DFSUtil.getHaNnRpcAddresses(DFSUtil.java:727) 在 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.(ConfiguredFailoverProxyProvider.java:88) 在 sun.reflect.GeneratedConstructorAccessor32.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.apache.hadoop.hdfs.NameNodeProxies.createFailoverProxyProvider(NameNodeProxies.java:458) 在 org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:148) 在 org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:632) 在 org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:570) 在 org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:147) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2596) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169) 作业 提交失败,异常 'java.lang.RuntimeException(java.io.IOException:无法创建代理 提供者类 org.apac\ he.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider)'

谁能告诉我为什么会这样?

【问题讨论】:

    标签: apache hadoop hive hiveql hadoop-streaming


    【解决方案1】:

    我自己也偶然发现了一个类似的异常,增加 hive 客户端堆并没有帮助。我发现我可以通过在查询的 where 子句中添加一个分区列来清除 OutOfMemory GC Overhead 异常,因此我得出结论,有大量拆分会导致此异常。我没有深入研究代码,但我相信我已经看到在触发 gc 抖动的循环中字符串连接会发生这种情况,并且在 CombineHiveInputFormat.getSplits 方法中可能会发生类似的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-08
      • 2021-12-28
      • 1970-01-01
      • 2019-01-26
      • 2021-04-05
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多