gpt4 book ai didi

java - 从本地 spark-submit 检查远程 HDFS 上是否存在文件

转载 作者:行者123 更新时间:2023-12-02 18:34:26 25 4
gpt4 key购买 nike

我正在开发一个 Java 程序,专门用于在 HDFS 文件系统(位于 HDFS_IP )上使用 Spark。
我的目标之一是检查 HDFS 上路径 hdfs://HDFS_IP:HDFS_PORT/path/to/file.json 上是否存在文件。 .在本地调试我的程序时,我发现我无法使用以下代码访问此远程文件

private boolean existsOnHDFS(String path) {
Configuration conf = new Configuration();
FileSystem fs;
Boolean fileDoesExist = false ;
try {
fs = FileSystem.get(conf);
fileDoesExist = fs.exists(new Path(path)) ;
} catch (IOException e) {
e.printStackTrace();
}
return fileDoesExist ;
}

其实, fs.exists尝试查找文件 hdfs://HDFS_IP:HDFS_PORT/path/to/file.json在我的本地 FS 中而不是在 HDFS 上。 BTW 让 hdfs://HDFS_IP:HDFS_PORT前缀使 fs.exists崩溃并抑制它的答案 false因为 /path/to/file.json本地不存在。
fs 的适当配置是什么?使事情在本地和从 Hadoop 集群执行 Java 程序时正常工作?

编辑:我终于放弃了并将错误修复传递给我团队中的其他人。感谢那些试图帮助我的人!

最佳答案

问题是您向 FileSystem 传递了一个空的 conf 文件。

您应该像这样创建文件系统:

FileSystem.get(spark.sparkContext().hadoopConfiguration());

当 spark 是 SparkSession 对象时。

正如你在 FileSystem 的代码中看到的:
 /**
* Returns the configured filesystem implementation.
* @param conf the configuration to use
*/
public static FileSystem get(Configuration conf) throws IOException {
return get(getDefaultUri(conf), conf);
}

/** Get the default filesystem URI from a configuration.
* @param conf the configuration to use
* @return the uri of the default filesystem
*/
public static URI getDefaultUri(Configuration conf) {
return URI.create(fixName(conf.get(FS_DEFAULT_NAME_KEY, DEFAULT_FS)));
}

它根据作为参数传递的配置创建 URI,当 DEFAULT_FS 为:
  public static final String  FS_DEFAULT_NAME_DEFAULT = "file:///";

关于java - 从本地 spark-submit 检查远程 HDFS 上是否存在文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com