Найти номер порта, где HDFS прослушивает

Я хочу получить доступ к hdfs с полными именами, такими как:

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

Я также мог бы просто получить доступ к hdfs с

hadoop fs -ls /user

однако я пишу тестовые примеры, которые должны работать на разных дистрибутивах(HDP, Cloudera, MapR...etc), который включает в себя доступ к файлам hdfs с квалифицированными именами.

Я понимаю, что hdfs://machine-name:8020 определяется в core-site.xml как fs.default.name. Но это, кажется, отличается в разных распределениях. Например, hdfs-это maprfs на Мапр. IBM BigInsights даже не имеют core-site.xml на $HADOOP_HOME/conf.

кажется, что hadoop не говорит мне, что определено в fs.default.name С его параметрами командной строки.

как я могу получить значение, определенное в fs.default.name надежно из командной строки?

тест всегда будет работать на namenode, поэтому имя машины легко. Но получить номер порта(8020) немного сложно. Я попытался как lsof, команды netstat.. но все равно не мог найти надежного способа.

5 ответов


ниже команда доступна в Apache hadoop 2.7.0 и далее, это может быть использовано для получения значений для свойств конфигурации hadoop. fs.по умолчанию.имя устарело в 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"));

fs.по умолчанию.имя устарело.

использование : hdfs getconf -confKey fs.defaultFS


я столкнулся с этим ответом, когда искал URI HDFS. Обычно это URL-адрес, указывающий на namenode. В то время как hdfs getconf -confKey fs.defaultFS получает мне имя nameservice, но это не поможет мне построить URI HDFS.

я попробовал команду ниже, чтобы получить список namenodes вместо

 hdfs getconf -namenodes

Это дало мне список всех namenodes, первичный первый, а затем вторичный. После этого построение URI HDFS было простым

hdfs://<primarynamenode>/

можно использовать

hdfs getconf -confKey fs.default.name

да, HDFS в getconf -namenodes покажет список namenodes.