【发布时间】:2012-08-22 14:24:12
【问题描述】:
在我们的集群上,即使是最简单的作业“wordcount”也在本地模式下运行。但是之前有使用 oozie 运行的作业,我们观察到它们以集群模式运行。本地 hadoop 作业与使用 oozie 运行的 hadoop 作业是否存在冲突?这是错误堆栈跟踪-
java.lang.IllegalArgumentException: Can't read partitions file
at org.apache.hadoop.hbase.mapreduce.hadoopbackport.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:111)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:560)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:639)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:210)
原因:java.io.FileNotFoundException:文件_partition.lst 不存在。 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:408) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251) 在 org.apache.hadoop.fs.FileSystem.getLength(FileSystem.java:825) 在 org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1480) 在 org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1475) 在 org.apache.hadoop.hbase.mapreduce.hadoopbackport.TotalOrderPartitioner.readPartitions(TotalOrderPartitioner.java:296) 在 org.apache.hadoop.hbase.mapreduce.hadoopbackport.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:82)
我们的工作在没有安装 Oozie 的测试集群上运行良好。因此不确定这两件事是否相关。 提前致谢。
我们正在使用 Cloudera 发行版。
【问题讨论】:
-
如果这有帮助,我有更多的细节。显然,我们正在本地提交作业。 Hadoop 未配置为运行本地提交的作业。所以作业跟踪器没有运行作业。所以我们可能需要在job conf中更改以下参数。 mapred.job.tracker = :8021 ; fs.default.name = hdfs://:8020 ; hadoop.job.ugi", "hdfs:hadoop 在我们的代码中使用 conf.set。我想保持代码不变而不是硬编码东西,而是更喜欢修改hadoop conf文件的解决方案。非常感谢任何帮助。