Hadoop 查找HDFS正在侦听的端口号

Hadoop 查找HDFS正在侦听的端口号,hadoop,hdfs,cloudera,hortonworks-data-platform,mapr,Hadoop,Hdfs,Cloudera,Hortonworks Data Platform,Mapr,我想使用完全限定的名称访问hdfs,例如: hadoop fs -ls hdfs://machine-name:8020/user 我也可以简单地使用 hadoop fs -ls /user 然而,我正在编写测试用例,这些测试用例应该在不同的发行版(HDP、Cloudera、MapR…等等)上工作,这些发行版涉及使用限定名称访问hdfs文件 我理解hdfs://machine-name:8020在core-site.xml中定义为fs.default.name。但这在不同的分布上似乎是不同的

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

hadoop fs -ls hdfs://machine-name:8020/user
我也可以简单地使用

hadoop fs -ls /user
然而,我正在编写测试用例,这些测试用例应该在不同的发行版(HDP、Cloudera、MapR…等等)上工作,这些发行版涉及使用限定名称访问hdfs文件

我理解
hdfs://machine-name:8020
在core-site.xml中定义为
fs.default.name
。但这在不同的分布上似乎是不同的。例如,hdfs是MapR上的maprfs。IBMBigInsights甚至在
$HADOOP\u HOME/conf
中没有
core site.xml

hadoop似乎没有办法告诉我在
fs.default.name
中使用命令行选项定义了什么

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


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

下面的命令在Apache hadoop 2.7.0以后的版本中可用,该命令可用于获取hadoop配置属性的值。hadoop 2.0中不推荐使用fs.default.name,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"));

不推荐使用fs.default.name


用法:
hdfs getconf-confKey fs.defaultFS

我在查找hdfs URI时遇到了这个答案。通常,这是一个指向namenode的URL。虽然
hdfs getconf-confKey fs.defaultFS
获取名称服务的名称,但它不会帮助我构建hdfs URI

我尝试了下面的命令来获取namenodes的列表

 hdfs getconf -namenodes
这给了我一个所有namenodes的列表,第一个是primary,第二个是secondary。之后,构建hdfsuri就很简单了

hdfs://<primarynamenode>/
hdfs:///

是,hdfs getconf-namenodes将显示namenodes的列表。

您可以使用

hdfs getconf -confKey fs.default.name

命令行实用程序“hdfs”在早期的hadoop版本中不可用?从2.X引入hadoop的hdfs命令,该命令在1.X中不存在,在这种情况下,您可以尝试第二个选项使用hadoop conf-key fs.default.name作为2.X之前的版本。@eiram_mahera。。hdfs getconf子命令仅在Hadoop-2.7.0中添加,此子命令在较旧的Hadoop版本中不可用,您使用的是哪个Hadoop版本?@sachin,噢!我正在使用hadoop 2.6.5。在这个版本中有没有办法找到名称节点和端口号?