0

我一直在玩 Hadoop 和它的姊妹项目,一路上我遇到了一些问题,但我终于找到了一个我找不到答案的问题:

我有一个以制表符分隔的文本文件形式存储在 hdfs 上的配置单元表。而且我可以在表上做一个基本的选择,但是只要我让查询变得更复杂一点,hive 就会把它变成一个 map reduce 作业,它会因以下堆栈跟踪而失败

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 是一个目录 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 is a directory java.io.IOException: Target /tmp/hadoop-yarn/staging/hduser/.staging/job_1385633903169_0013/libjars/lib/lib is a directory at org. org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:502) 中的 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) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:289) at org.apache.hadoop.mapreduce.JobSubmitter.copyRemoteFiles(JobSubmitter.java:139) at 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(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at 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(任务。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) 在 org.apache.hadoop.hive.ql .Driver.run(Driver.java:888) 在 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java :216) 在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781) 的 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)。 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.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 是一个目录)'29 年 13 月 11 日 08:31:00 错误 exec.Task:作业提交失败,出现异常'java.io。 IOException(目标/tmp/hadoop-yarn/staging/hduser/.staging/job_1385633903169_0013/libjars/lib/lib 是一个目录)'java.io.IOException:目标/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) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:387) at org.apache.hadoop.mapreduce.Job$10.run(Job.java :1268) 在 org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415 ) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at 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) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:557) at 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) 在 org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:151) 在 org.apache.hadoop.hive.ql。 exec.TaskRunner.runSequential(TaskRunner.java:65) at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1414) at org.apache.hadoop.hive.ql.Driver.execute(Driver. java:1192) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:888) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:888) 在 org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1020) .hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216) 在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781) 在 org.apache.hadoop 的 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413) .hive.cli.CliDriver.run(CliDriver.java:675) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) 在 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)在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) 执行Driver(CliDriver.java:781)在 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)在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) 执行Driver(CliDriver.java:781)在 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)invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar .main(RunJar.java:212)invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar .main(RunJar.java:212)

有问题的文件夹确实存在于 dfs 上,至少是“/tmp/hadoop-yarn/staging”部分,无论我将其权限设置为什么,hive 或 hadoop 都会在提交作业时重置它们。真正令人担忧的部分是完整路径似乎是生成的文件夹名称,那么为什么该软件会遇到它自己生成的东西的问题呢?为什么路径是目录会出现问题?它应该是什么?

编辑:这是我正在使用的表和我正在尝试运行的查询:查询: select * from hive_flow_details where node_id = 100 limit 10;

桌子:

col_name data_type comment id bigint None
flow_versions_id int None
node_id int None
node_name string None

请记住,这发生在我尝试的任何具有任何类型 where 子句的 uery 上,因为 hive 将其转换为 MR 工作。

4

1 回答 1

0

我最终正确地解决了这个问题。我在清理的类路径中发现了冲突的 jar,从那时起我就没有遇到任何问题。

于 2013-12-02T18:07:53.623 回答