我是Hadoop的初学者。我正在研究Apache给出的WordCountV2。
当我尝试使用method addCacheFile not found in class Job
Job.addCacheFile(new Path(remainingArgs[++i]).toUri());
我用Google搜索了一下,this是我能找到的唯一一个但是没有解决方案。
我不确定为什么会这样(getCacheFiles
对我很有用)。我想这与我如何设置环境有关? (不幸的是Java新手。)
我正在使用Eclipse + Maven,pom.xml
设置为:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>3.0.0-alpha2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>2.6.0-mr1-cdh5.10.1</version>
</dependency>
我可以问一下这个错误是否可能是由我的设置造成的,如果不是,那可能是什么原因?
非常感谢。
答案 0 :(得分:0)
我能够重现你所尝试的并且没有遇到任何问题。我正在使用MRv2。
从pom看,你似乎在使用MR2(这是最新的)。因此,删除MR1依赖项(hadoop-core 2.6.0-mr1-cdh5.10.1)。 MRv2不需要hadoop核心罐。
我用过的代码。如果您使用的是MRv2,这应该可以使用。
import java.io.IOException;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
public class App
{
public static void main( String[] args ) throws IOException, InterruptedException, URISyntaxException
{
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.addCacheFile(new Path("").toUri());
}
}
但是如果你想使用MRv1,那么我们需要更改POM,然后我们需要使用
Configuration conf = new Configuration();
DistributedCache.addFileToClassPath(new Path("<path to file>"), conf);
Job job = new Job(conf);