Znajdź numer portu, na którym HDFS nasłuchuje

Chcę uzyskać dostęp do hdfs z w pełni kwalifikowanymi nazwami, takimi jak:

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

Mogę też po prostu uzyskać dostęp do hdfs za pomocą

hadoop fs -ls /user

Piszę jednak przypadki testowe, które powinny działać na różnych dystrybucjach (HDP, Cloudera, MapR...etc), która polega na dostępie do plików hdfs o kwalifikowanych nazwach.

Rozumiem, że hdfs://machine-name:8020 jest zdefiniowana w core-site.xml as fs.default.name. Ale to wydaje się być różne w różnych dystrybucjach. Na przykład, hdfs jest maprfs na MapR. IBM BigInsights nawet nie mieć core-site.xml w $HADOOP_HOME/conf.

Nie wydaje się, aby hadoop powiedział mi, co jest zdefiniowane w {[3] } z opcjami wiersza poleceń.

Jak mogę niezawodnie uzyskać wartość zdefiniowaną w fs.default.name z linii poleceń?

Test zawsze będzie uruchomiony na namenode, więc nazwa maszyny jest łatwa. Ale uzyskanie numeru portu (8020) jest trochę trudne. Próbowałem lsof, netstat.. ale wciąż nie mogłem znaleźć wiarygodnego sposobu.

Author: ernesto, 2014-10-06

5 answers

Poniżej polecenie dostępne w Apache hadoop 2.7.0, może być użyte do uzyskania wartości właściwości konfiguracji hadoop. fs.default.name jest przestarzały w hadoop 2.0, fs.defaultFS jest zaktualizowaną wartością. Nie wiem, czy to zadziała w przypadku maprfs.

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

Lub

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

Nie jestem pewien, czy dostępne są jakieś narzędzia wiersza poleceń do pobierania wartości właściwości konfiguracyjnych w wersjach Mapr lub hadoop 0.20 hadoop. W takiej sytuacji lepiej spróbuj tego samego w Javie, aby pobrać wartość odpowiadającą właściwości konfiguracyjnej.

Configuration hadoop conf = Configuration.getConf();
System.out.println(conf.get("fs.default.name"));
 41
Author: SachinJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 05:28:08

Fs.default.name jest przestarzały.

Użycie: hdfs getconf -confKey fs.defaultFS

 10
Author: vijayinani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-27 08:58:46

Natknąłem się na tę odpowiedź, gdy szukałem HDFS URI. Ogólnie jest to adres URL wskazujący na namenode. Podczas gdy hdfs getconf -confKey fs.defaultFS daje mi nazwę nameservice, ale nie pomoże mi to w budowaniu URI HDFS.

Wypróbowałem poniższe polecenie, aby zamiast tego uzyskać listę nazw

 hdfs getconf -namenodes

To dało mi listę wszystkich nazw, pierwszy pierwszy, a potem drugi. Następnie konstruowanie URI HDFS było proste

hdfs://<primarynamenode>/
 2
Author: terpinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 14:31:02

Możesz użyć

hdfs getconf -confKey fs.default.name
 0
Author: Shubham Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 13:11:35

Tak, hdfs getconf-namenodes wyświetli listę nazw.

 -1
Author: swathi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 14:43:59