访问hadoop文件系统中的文件



我必须访问hadoop文件系统中的几个文件,例如/user//data/somefile.txt我不知道如何访问这些文件。我有一个如下所示的代码,但这不起作用。所以我尝试了"hdfs://user/....","hdfs://localhost:50070/user/..."或者以某种方式使用URI(尽管我真的不知道这是怎么回事)

为我提供了用于此任务的hadoop 1.2.1版本,我正在虚拟机和eclipse中使用ubuntu(没有hadoop插件)。我以前从未使用过hadoop,所以如果你能帮助我就太好了。

     JobConf conf = new JobConf(TotalWordCount.class); 
     conf.setJobName("wordcount"); 
     conf.setOutputKeyClass(Text.class); 
     conf.setOutputValueClass(IntWritable.class); 
     conf.setMapperClass(Map.class); 
     conf.setCombinerClass(Reduce.class); 
     conf.setReducerClass(Reduce.class); 
     conf.setInputFormat(TextInputFormat.class); 
     conf.setOutputFormat(TextOutputFormat.class); 
     FileInputFormat.setInputPaths(conf, new Path("/user/.../data/textfile.txt")); 
    FileOutputFormat.setOutputPath(conf, new Path("/user/.../output"));
    LineProcessor.initializeStopWords();
    JobClient.runJob(conf); 

运行上面的代码,我得到一个类似这样的错误:

ERROR security.UserGroupInformation: PriviledgedActionException as:ds2013 cause:org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/user/.../data/textfile.txt
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/user/.../data/textfile.txt

我也试过类似的东西

 DistributedCache.addCacheFile((new Path("/user/.../data/textfile.txt")).toUri(), conf);
 Path[] paths = DistributedCache.getLocalCacheFiles(conf);
 Path cachePath = paths[0];
 BufferedReader stopListReader = new BufferedReader(new FileReader(cachePath.toString()));

但它找不到文件。

Exception in thread "main" java.io.FileNotFoundException: File /user/.../data/textfile.txt does not exist.

感谢大家的帮助。问题是,您根本无法像我那样在eclipse中运行该程序。当我使用终端运行jar时,它会找到路径。

原因:当您直接在eclipse中运行作业时,实际上,它以本地模式工作,这意味着应用程序将尝试在您的客户端机器中查找文件。

解决方案:为了确保应用程序能够很好地远程工作,您需要扩展java类:Configured.java并实现Tool如下:

public class SimpleMapperMain extends Configured implements Tool {
    public int run(String[] args) throws Exception {
        //your code here
    }
    public static void main(String[] args) throws Exception {
        int res = ToolRunner.run(new Configuration(), new SimpleMapperMain(),args);
        System.exit(res); 
    }
}

注意:
1.确保您的配置xml文件,如hdfs-site.xml、core-site.xml等都包含在类路径中,在您的情况下,它们应该放在maven项目的src/main/resources中
2.如果涉及到权限问题,请将您当前的用户更改为user:hdfs,然后再次运行应用程序,问题应该会消失

如果还有任何其他问题,请随时问我。

相关内容

  • 没有找到相关文章

最新更新