java - 用 Java 读取 HDFS 和本地文件

标签 java hadoop mapreduce hdfs

我想读取文件路径,无论它们是 HDFS 还是本地文件。目前,我通过前缀为 file://的本地路径和前缀为 hdfs://的 HDFS 路径并编写如下代码

Configuration configuration = new Configuration();
FileSystem fileSystem = null;
if (filePath.startsWith("hdfs://")) {
  fileSystem = FileSystem.get(configuration);
} else if (filePath.startsWith("file://")) {
  fileSystem = FileSystem.getLocal(configuration).getRawFileSystem();
}

从这里我使用 FileSystem 的 API 来读取文件。

请告诉我是否有比这更好的方法?

最佳答案

这有意义吗,

public static void main(String[] args) throws IOException {

    Configuration conf = new Configuration();
    conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/core-site.xml"));
    conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/hdfs-site.xml"));

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter the file path...");
    String filePath = br.readLine();

    Path path = new Path(filePath);
    FileSystem fs = path.getFileSystem(conf);
    FSDataInputStream inputStream = fs.open(path);
    System.out.println(inputStream.available());
    fs.close();
}

如果你走这条路,你不必检查。直接从 Path 获取 FileSystem,然后随心所欲。

关于java - 用 Java 读取 HDFS 和本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072543/

相关文章:

hadoop - 作业conf.xml参数pig.mapPlan

java - 当必须接受许多连接时,客户端/服务器类型应用程序中的Java套接字出现问题

java - 需要在 Hibernate 中的@Formula 注释中使用表别名

sql - PIG - 如何按具有多个条目的字段分组

java - 使用旧版本运行 Apache Spark 最新版本的集群

hadoop - 高效地将大量数据迁移到 Elasticsearch-hadoop

Hadoop:如何选择reducer节点?

javascript - 按时间戳顺序从 couchDB 中获取选定的最新 10 个文档

java - 格式化 slf4j 以记录带有颜色的消息类型

java - 更新 Java 循环中的总计