创建可用于读取/写入 HDFS 的文件系统对象的正确方法是什么?在我发现的一些例子中,他们会做这样的事情:
final Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/etc/hadoop/core-site.xml"));
conf.addResource(new Path("/usr/local/hadoop/etc/hadoop/hdfs-site.xml"));
final FileSystem fs = FileSystem.get(conf);
从配置类的文档来看,如果该文件位于类路径中,那么在创建对象时似乎会自动加载 core-site.xml 中的属性,因此无需再次设置。
我没有找到任何说明为什么需要添加 hdfs-site.xml 的内容,没有它似乎也能正常工作。
将 core-site.xml 放在类路径中并跳过 hdfs-site.xml 是否安全,或者我是否应该像我在示例中看到的那样设置两者?在什么情况下需要 hdfs-site.xml 中的属性?
最佳答案
FileSystem
只需一个配置 key 即可成功连接到 HDFS。以前是 fs.default.name
。从 yarn
开始,它更改为 fs.defaultFS
。因此,以下代码片段足以进行连接。
Configuration conf = new Configuration();
conf.set(key, "hdfs://host:port"); // where key="fs.default.name"|"fs.defaultFS"
FileSystem fs = FileSystem.get(conf);
提示:检查 core-site.xml
中存在哪个键。在 conf
中设置与之关联的相同值。如果您运行代码的机器没有主机名映射,请输入其 IP。在 mapR
中,簇值将具有类似 maprfs://
的前缀。
关于java - 获取可用于读取/写入 HDFS 的 Hadoop FileSystem 对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536886/