Hadoop存储文件的地方,以便以编程方式通过HDFS读取和写入



我正在我的机器上使用伪分发模式设置,并在我的 eclipse IDE 中创建以下程序:

该程序只是将输入文件合并到 HDFS 中的单个文件中。

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class PutMerge {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        FileSystem local = FileSystem.getLocal(conf);
        Path inputDir = new Path("/home/temp/input");
        Path hdfsFile = new Path("MyMergeFile.txt");
        try {
            FileStatus[] inputFiles = local.listStatus(inputDir);
            FSDataOutputStream out = hdfs.create(hdfsFile);
            for (int i = 0; i < inputFiles.length; i++) {
                System.out.println(inputFiles[i].getPath().getName());
                FSDataInputStream in =
                local.open(inputFiles[i].getPath());
                byte buffer[] = new byte[256];
                int bytesRead = 0;
                while ((bytesRead = in.read(buffer)) > 0) {
                    out.write(buffer, 0, bytesRead);
                }
                in.close();
            }
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

程序运行成功,但MyMergeFile.txt在哪里生成?

我尝试使用命令 ./hadoop fs -lsr / 进行检查,但此命令的输出中不存在该文件。

更新:

尝试签入 HDFS 时,我收到错误消息:

./hadoop fs -ls hdfs://localhost:50070/MyMergeFile.txt
ls: Call to localhost/127.0.0.8:50070 failed on local exception: java.io.EOFException
./hadoop fs -ls hdfs://localhost:50030/MyMergeFile.txt
ls: Call to localhost/127.0.0.8:50030 failed on local exception: java.io.EOFException
FileSystem hdfs = FileSystem.get(conf);

此行不返回 HDFS,而是返回配置的 FS。这可能是HDFS。但是你说你从 Eclipse 运行,你似乎没有在 50070 上运行 NM。我怀疑您不是在伪分布式模式下运行,而是在独立模式下运行。您的 FS 可能是锚定在 /tmp 中的本地原始文件系统。

如果在伪分布式模式下运行,您会记住配置 NM 名称目录 (dfs.namenode.name.dir ) 和 DN 数据目录 (dfs.datanode.data.dir ) 的步骤。