我想访问具有完全限定名称的hdfs,例如:
hadoop fs -ls hdfs://machine-name:8020/user
我也可以使用
访问hdfshadoop 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 ..但仍然找不到可靠的方法。
答案 0 :(得分:44)
在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"));
答案 1 :(得分:10)
fs.default.name已弃用。
使用:hdfs getconf -confKey fs.defaultFS
答案 2 :(得分:2)
我在寻找HDFS URI时遇到了这个答案。通常,这是指向namenode的URL。虽然hdfs getconf -confKey fs.defaultFS
为我提供了名称服务的名称,但它无法帮助我构建HDFS URI。
我尝试了下面的命令来获取名称节点的列表
hdfs getconf -namenodes
这给了我一个所有名称节点的列表,主要是第一个,然后是次要的。之后构建HDFS URI很简单
hdfs://<primarynamenode>/
答案 3 :(得分:0)
你可以使用
hdfs getconf -confKey fs.default.name
答案 4 :(得分:-1)
是的,hdfs getconf -namenodes将显示名称节点列表。