我在HiveQL中执行条件查询时遇到问题。基本的select * from tablename
语句运行正常。
错误是:
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapred.reduce.tasks=<number>
java.net.ConnectException: Call to /0.0.0.0:8021 failed on connection exception: java.net.ConnectException: Connection refused
at org.apache.hadoop.ipc.Client.wrapException(Client.java:1134)
at org.apache.hadoop.ipc.Client.call(Client.java:1110)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226)
at org.apache.hadoop.mapred.$Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:398)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)
at org.apache.hadoop.mapred.JobClient.createRPCProxy(JobClient.java:501)
at org.apache.hadoop.mapred.JobClient.init(JobClient.java:486)
at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:469)
at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:655)
at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:123)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:130)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1063)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:900)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:748)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:209)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:286)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:516)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:186)
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(
....
Job Submission failed with exception 'java.net.ConnectException(Call to /0.0.0.0:8021 failed on connection exception: java.net.ConnectException: Connection refused)'
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MapRedTask
我已经尝试过Eclipse IDE和Hive shell。输出相同。请帮助!
答案 0 :(得分:7)
这可以解决您的问题,因为默认情况下此属性将设置为true
。
set hive.auto.convert.join.noconditionaltask=false
hive.auto.convert.join.noconditionaltask
- Hive是否启用了 关于将公共连接转换为mapjoin的优化 输入文件大小。如果此参数打开,则n-1的大小总和为 n路连接的表/分区小于指定的大小, 连接直接转换为mapjoin(没有条件 任务)。
答案 1 :(得分:3)
在大多数情况下,此错误是由权限问题引起的,其中运行该命令的Hive用户没有对/ user / hive的访问权限
您需要检查Hadoop Hive群集的配置
答案 2 :(得分:1)
我注意到使用Hive2时,您需要在使用HiveQL时更改指定reducer数量的方式。在Hive1上我使用过:
SET mapred.reduce.tasks=1
但是在Hive2上我注意到我需要使用:
SET mapreduce.job.reduces=1
我收到了同样的错误消息,并且更改此消息为我解决了问题。
答案 3 :(得分:0)
我使用VirtualBox安装了cloudera quickstart图像。我必须执行以下操作才能解决问题
sudo vi /etc/hive/conf/hive-site.xml并将hive.auto.convert.join属性设置为false(您需要root来编辑,因此需要sudo)。
我没有hive-site.xml.xml中的hive.auto.convert.join.noconditionaltask属性。
答案 4 :(得分:0)
对我来说,这是由于未设置队列。
set mapred.job.queue.name=xxxx;
set mapreduce.job.reduces=1;
设置两个参数都对我有用。