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とHiveShellの両方から試しました。出力は同じです。助けてください!
このプロパティはデフォルトでtrue
に設定されるため、これで問題が解決するはずです。
set Hive.auto.convert.join.noconditionaltask=false
Hive.auto.convert.join.noconditionaltask
-Hiveが、入力ファイルサイズに基づいて共通結合をmapjoinに変換することに関する最適化を有効にするかどうか。このパラメーターがオンで、n-way結合のテーブル/パーティションのn-1のサイズの合計が指定されたサイズよりも小さい場合、結合は直接マップ結合に変換されます(条件付きタスクはありません)。
ほとんどの場合、このエラーは、コマンドを実行しているHiveユーザーが/ user/Hiveへのアクセス権を持っていないアクセス許可の問題が原因で発生します。
HadoopHiveクラスターの構成を確認する必要があります
Hive2では、HiveQLの使用中にレデューサーの数を指定する方法を変更する必要があることに気づきました。 Hive1で私は使用しました:
SET mapred.reduce.tasks=1
ただし、Hive2では、次のものを使用する必要があることに気付きました。
SET mapreduce.job.reduces=1
同じエラーメッセージが表示されましたが、これを変更すると問題が解決しました。
VirtualBoxを使用してclouderaクイックスタートイメージをマウントしています。問題を解決するために次のことをしなければなりませんでした
Sudo vi /etc/Hive/conf/Hive-site.xmlを実行し、Hive.auto.convert.joinプロパティをfalseに設定します(編集するにはrootにする必要があるため、Sudoを使用する必要があります)。
Hive-site.xml.xmlにHive.auto.convert.join.noconditionaltaskプロパティがありませんでした。