ern*_*sto 25 hadoop hdfs cloudera mapr hortonworks-data-platform
我想访问具有完全限定名称的hdfs,例如:
hadoop fs -ls hdfs://machine-name:8020/user
Run Code Online (Sandbox Code Playgroud)
我也可以简单地访问hdfs
hadoop fs -ls /user
Run Code Online (Sandbox Code Playgroud)
但是,我正在编写应该适用于不同发行版(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 ..但仍然找不到可靠的方法.
Sac*_*inJ 46
在Apache hadoop 2.7.0以后的命令下面,这可以用于获取hadoop配置属性的值.在hadoop 2.0中不推荐使用fs.default.name,fs.defaultFS是更新后的值.不确定这是否适用于maprfs.
hdfs getconf -confKey fs.defaultFS # ( new property )
Run Code Online (Sandbox Code Playgroud)
要么
hdfs getconf -confKey fs.default.name # ( old property )
Run Code Online (Sandbox Code Playgroud)
不确定是否有任何命令行实用程序可用于在Mapr或hadoop 0.20 hadoop版本中检索配置属性值.在这种情况下,您最好在Java中尝试相同的方法来检索与配置属性相对应的值.
Configuration hadoop conf = Configuration.getConf();
System.out.println(conf.get("fs.default.name"));
Run Code Online (Sandbox Code Playgroud)