Hadoop 1.2.1 - 使用分布式缓存
Hadoop 1.2.1 - using Distributed Cache
我开发了一个使用分布式缓存的 Hadoop 应用程序。我使用的是 Hadoop 2.9.0。在 stand-alone 和 pseudo-distributed 模式下一切正常。
Driver:
public class MyApp extends Configured implements Tool{
public static void main(String[] args) throws Exception{
if(args.length < 2) {
System.err.println("Usage: Myapp -files cache.txt <inputpath> <outputpath>");
System.exit(-1);
}
int res = ToolRunner.run(new Configuration(), new IDS(), args);
System.exit(res);
...
映射器:
public class IDSMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
@Override
protected void setup(Context context) throws IOException {
BufferedReader bfr = new BufferedReader(new FileReader(new File("cache.txt")));
开始:sudo bin/hadoop jar MyApp.jar -files cache.txt /input /output
现在我需要测量真实 Hadoop 集群上的执行时间。不幸的是,我有 Hadoop 1.2.1 版本的 Hadoop 集群供我使用。所以我创建了新的 Eclipse 项目,引用了适当的 Hadoop 1.2.1 jar 文件,并且在 stand-alone 模式下一切正常。但是,当尝试读取分布式缓存文件时,Hadoop 1.2.1 的 pseudo-distributed 模式失败并在 Mapper class(设置方法)中出现 FileNotFoundException。
我是否必须在 Hadoop 1.2.1 中以其他方式处理分布式缓存文件?
问题出在 运行 方法中。我用了Job.getInstance方法不带参数,应该这样用:
Job job = Job.getInstance(getConf());
我仍然不知道为什么 Hadoop 2.9.0 只适用于:
Job job = Job.getInstance();
但是 getConf 解决了我的问题。
我开发了一个使用分布式缓存的 Hadoop 应用程序。我使用的是 Hadoop 2.9.0。在 stand-alone 和 pseudo-distributed 模式下一切正常。
Driver:
public class MyApp extends Configured implements Tool{
public static void main(String[] args) throws Exception{
if(args.length < 2) {
System.err.println("Usage: Myapp -files cache.txt <inputpath> <outputpath>");
System.exit(-1);
}
int res = ToolRunner.run(new Configuration(), new IDS(), args);
System.exit(res);
...
映射器:
public class IDSMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
@Override
protected void setup(Context context) throws IOException {
BufferedReader bfr = new BufferedReader(new FileReader(new File("cache.txt")));
开始:sudo bin/hadoop jar MyApp.jar -files cache.txt /input /output
现在我需要测量真实 Hadoop 集群上的执行时间。不幸的是,我有 Hadoop 1.2.1 版本的 Hadoop 集群供我使用。所以我创建了新的 Eclipse 项目,引用了适当的 Hadoop 1.2.1 jar 文件,并且在 stand-alone 模式下一切正常。但是,当尝试读取分布式缓存文件时,Hadoop 1.2.1 的 pseudo-distributed 模式失败并在 Mapper class(设置方法)中出现 FileNotFoundException。
我是否必须在 Hadoop 1.2.1 中以其他方式处理分布式缓存文件?
问题出在 运行 方法中。我用了Job.getInstance方法不带参数,应该这样用:
Job job = Job.getInstance(getConf());
我仍然不知道为什么 Hadoop 2.9.0 只适用于:
Job job = Job.getInstance();
但是 getConf 解决了我的问题。