30

我想访问具有完全限定名称的 hdfs,例如:

hadoop fs -ls hdfs://machine-name:8020/user

我也可以简单地访问 hdfs

hadoop fs -ls /user

但是,我正在编写应该适用于不同发行版(HDP、Cloudera、MapR...等)的测试用例,其中涉及使用限定名称访问 hdfs 文件。

我知道hdfs://machine-name:8020在 core-site.xml 中定义为fs.default.name. 但这似乎在不同的发行版上有所不同。例如,hdfs 是 MapR 上的 maprfs。IBM BigInsights甚至没有core-site.xml.$HADOOP_HOME/conf

hadoop 似乎没有办法告诉我fs.default.name它的命令行选项定义了什么。

如何fs.default.name从命令行可靠地获取定义的值?

测试将始终在 namenode 上运行,因此机器名称很容易。但是获取端口号(8020)有点困难。我尝试了 lsof、netstat.. 但仍然找不到可靠的方法。

4

5 回答 5

55

以下命令在 Apache hadoop 2.7.0 及以后版本中可用,可用于获取 hadoop 配置属性的值。fs.default.name 在 hadoop 2.0 中已弃用, fs.defaultFS 是更新后的值。不确定这是否适用于maprfs。

hdfs getconf -confKey fs.defaultFS  # ( new property ) 

或者

hdfs getconf -confKey fs.default.name    # ( old property ) 

不确定是否有任何命令行实用程序可用于在 Mapr 或 hadoop 0.20 hadoop 版本中检索配置属性值。在这种情况下,您最好在 Java 中尝试相同的方法来检索与配置属性对应的值。

Configuration hadoop conf = Configuration.getConf();
System.out.println(conf.get("fs.default.name"));
于 2014-10-07T04:55:47.490 回答
12

fs.default.name 已弃用。

利用 :hdfs getconf -confKey fs.defaultFS

于 2016-03-27T08:58:46.480 回答
3

我在寻找 HDFS URI 时遇到了这个答案。通常这是一个指向名称节点的 URL。虽然hdfs getconf -confKey fs.defaultFS让我知道名称服务的名称,但它不会帮助我构建 HDFS URI。

我尝试了下面的命令来获取名称节点列表

 hdfs getconf -namenodes

这给了我所有名称节点的列表,首先是主要的,然后是次要的。之后构建 HDFS URI 很简单

hdfs://<primarynamenode>/
于 2016-09-27T14:31:02.357 回答
0

您可以使用

hdfs getconf -confKey fs.default.name
于 2017-09-07T13:11:35.917 回答
-1

是的,hdfs getconf -namenodes 将显示名称节点列表。

于 2017-03-20T14:43:59.720 回答