0

私はHadoopと姉妹プロジェクトをいじっており、途中でいくつかの問題がありましたが、最終的に答えが見つからない問題にぶつかりました:

タブ区切りのテキスト ファイルとして hdfs に格納されているハイブ テーブルがあります。そして、テーブルで基本的な選択を行うことができますが、クエリをもう少し複雑にするとすぐに、ハイブはそれをマップ削減ジョブに変え、次のスタック トレースで失敗します

13/11/29 08:31:00 エラー security.UserGroupInformation: PriviledgedActionException as:hduser (auth:SIMPLE) 原因:java.io.IOException: ターゲット /tmp/hadoop-> > yarn/staging/hduser/.staging/job_1385633903169_0013 /libjars/lib/lib はディレクトリです 13/11/29 08:31:00 エラー security.UserGroupInformation: PriviledgedActionException as:hduser (auth:SIMPLE) cause:java.io.IOException: Target /tmp/hadoop-yarn/staging /hduser/.staging/job_1385633903169_0013/libjars/lib/lib はディレクトリですorg.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:500) の org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:502) java:348) org.apache.hadoop.fs にあります。FileUtil.copy(FileUtil.java:338) org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:289) org.apache.hadoop.mapreduce.JobSubmitter.copyRemoteFiles(JobSubmitter.java:139) org .apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:212) org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:300) org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter) java.security. org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) で org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:562) で org.apache.hadoop.mapred. JobClient$1.run(JobClient.java:557) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation .doAs(UserGroupInformation.java:1491) org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:557) org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:548) org. apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:425) org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:144) org. apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:151) org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:65) で org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1414) で org .apache.hadoop.hive.ql.Driver.execute(Driver.java:1192) org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1020) at org.apache.hadoop.hive.ql org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259) の .Driver.run(Driver.java:888) org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java) :216) org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413) で org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781) で org.apache. hadoop.hive.cli.CliDriver.run(CliDriver.java:675) org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で 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(Target / tmp/hadoop-yarn/staging/hduser/.staging/job_1385633903169_0013/libjars/lib/lib はディレクトリです)' 13/11/29 08:31:00 エラー exec.Task: ジョブの送信が例外 'java.io. IOException(Target /tmp/hadoop-yarn/staging/hduser/.staging/job_1385633903169_0013/libjars/lib/lib はディレクトリです)' java.io.IOException: Target /tmp/hadoop-yarn/staging/hduser/.staging/job_1385633903169_0013/libjars/lib/lib は、org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:502) の org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:500) にあるディレクトリです。 org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:348) で org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:338) で org.apache.hadoop.fs.FileUtil.copy で(FileUtil.java:289) org.apache.hadoop.mapreduce.JobSubmitter.copyRemoteFiles(JobSubmitter.java:139) org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:212) org.apache. hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:300) org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:387) org.apache.hadoop.mapreduce.Job$10.run(Job.java) :1268) org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) で java.security.AccessController.doPrivileged(ネイティブメソッド) で javax.security.auth.Subject.doAs(Subject.java:415) ) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) で org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) で org.apache.hadoop.mapred.JobClient$1 .run(JobClient.java:562) at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:557) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject. doAs(Subject.java:415) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:557) org.org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:425) の org.apache.hadoop.hive の apache.hadoop.mapred.JobClient.submitJob(JobClient.java:548)。 ql.exec.mr.MapRedTask.execute(MapRedTask.java:144) at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:151) at org.apache.hadoop.hive.ql. org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1414) の exec.TaskRunner.runSequential(TaskRunner.java:65) org.apache.hadoop.hive.ql.Driver.execute(Driver. java:1192) org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1020) で org.apache.hadoop.hive.ql.Driver.run(Driver.java:888) で org.apache org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216) org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413) で org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781) で org.apache.hadoop .hive.cli.CliDriver.run(CliDriver.java:675) org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) で sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) で sun org.apache. hadoop.util.RunJar.main(RunJar.java:212)org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) で org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) で executeDriver(CliDriver.java:781) sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) でorg.apache.hadoop.util.RunJar.main(RunJar.java:212) の .invoke(Method.java:606)org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) で org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) で executeDriver(CliDriver.java:781) sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) でorg.apache.hadoop.util.RunJar.main(RunJar.java:212) の .invoke(Method.java:606)org.apache.hadoop.util.RunJar で java.lang.reflect.Method.invoke(Method.java:606) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で (NativeMethodAccessorImpl.java:57) を呼び出す.main(RunJar.java:212)org.apache.hadoop.util.RunJar で java.lang.reflect.Method.invoke(Method.java:606) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で (NativeMethodAccessorImpl.java:57) を呼び出す.main(RunJar.java:212)

問題のフォルダーは、少なくとも「/tmp/hadoop-yarn/staging」の部分である dfs に存在し、そのパーミッションを何に設定しても、ハイブまたは Hadoop はジョブの送信時にそれらをリセットします。本当に懸念されるのは、フル パスが生成されたフォルダー名のように見えることです。では、ソフトウェアが独自に生成したものに問題があるのはなぜでしょうか? パスがディレクトリであることはなぜ問題なのですか? そして、それはむしろ何であるべきですか?

編集:これが私が使用しているテーブルと実行しようとしているクエリです:クエリ: select * from hive_flow_details where node_id = 100 limit 10;

テーブル:

col_name data_type コメント id bigint なし
flow_versions_id int なし
node_id int なし
node_name string なし

これは、Hive がそれを MR ジョブに変換するため、where 句を含むあらゆる種類の uery に発生することを覚えておいてください。

4

1 に答える 1

0

私は最終的にこの問題を解決しました。クリーンアップしたクラスパスに競合する jar が見つかりましたが、それ以来、問題はありませんでした。

于 2013-12-02T18:07:53.623 に答える