hadoop mapreduce打开文件传递参数时出错

tpgth1q7  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(470)

我试图打开一个文件,将文件中读取的一些参数传递给作业mapreduce。这段代码在本地模式下工作,但是当我尝试攻击hdfs时,它就不工作了。
这是我的密码:

Path tmpPath = new Path(tmpFile);
    try {
        InputStream ips = new FileInputStream(tmpFile);
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader br = new BufferedReader(ipsr);

        String[] minMax = br.readLine().split("-");
        min = minMax[0];
        max = minMax[1];
        br.close();
    } catch (Exception e) {
        System.out.println(e.toString());
        System.exit(-1);
    }

这是出现的代码错误:
“java.io.filenotfoundexception:hdfs:/quickstart。cloudera:8020/user/cloudera/dataout/tmp/part-r-00000 (没有这样的文件或目录)
这是我在上一个作业中写入文件的位置:

Path tmp = new Path("dataOut/tmp");
    FileOutputFormat.setOutputPath(job, tmp);

作为mapreduce作业,这将写入文件part-r-00000。
可能你们都会说,“试试分布式缓存”。我已经试过了,但我是java、hadoop和mapreduce的新手。我不能让它工作。。。
谢谢

bgtovc5b

bgtovc5b1#

我终于明白了。我用了这个代码:

Configuration conf = new Configuration();
    Path file = new Path(DEFAULT_FS + "/user/cloudera/dataOut/tmp/part-r-00000");
    FileSystem hdfs = FileSystem.get(file.toUri(), conf);
    FSDataInputStream in = hdfs.open(file);
    byte[] content = new byte[(int) hdfs.getFileStatus(file).getLen()];
    in.readFully(content);
    String maxMin = new String(content);
raogr8fs

raogr8fs2#

查看错误代码“java.io.filenotfoundexception:hdfs:/quickstart”。cloudera:8020/user/cloudera/dataout/tmp/part-r-00000 (没有这样的文件或目录)
您的输出路径似乎不在给定的目录中。尝试运行以下命令以检查是否能够超出路径。
hadoop fs-text hdfs:/quickstart。cloudera:8020/user/cloudera/dataout/tmp/part-r-00000

相关问题