2014-10-06 29 views
18

Chcę uzyskać dostęp HDFS w pełni kwalifikowanych nazw, takich jak:Znajdź numer portu, gdzie HDFS nasłuchuje

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

mogę też po prostu dostęp HDFS z

hadoop fs -ls /user 

Jednak piszę przypadków testowych to powinno działać na różnych dystrybucjach (HDP, Cloudera, MapR ... itd.), co wiąże się z dostępem do plików hdfs z kwalifikowanymi nazwami.

Rozumiem, że hdfs://machine-name:8020 jest zdefiniowany w core-site.xml jako fs.default.name. Ale wydaje się, że jest inaczej w różnych dystrybucjach. Na przykład, hdfs jest maprfs na MapR. IBM BigInsights nie ma nawet core-site.xml w $HADOOP_HOME/conf.

Wygląda na to, że hadoop nie mówi mi, co jest zdefiniowane w fs.default.name z opcjami wiersza poleceń.

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

Test zawsze będzie wykonywany na podstawie nazwy, więc nazwa maszyny jest łatwa. Ale uzyskanie numeru portu (8020) jest nieco trudne. Próbowałem lsof, netstat .. ale nadal nie mogłem znaleźć wiarygodnego sposobu.

Odpowiedz

30

Pod komendą dostępną w Apache hadoop 2.7.0 można użyć do uzyskania wartości właściwości konfiguracji sztyftu. fs.default.name jest przestarzałe w hadoop 2.0, fs.defaultFS jest zaktualizowaną wartością. Nie jestem pewien, czy zadziała to w przypadku maprfs.

hdfs getconf -confKey fs.default.name 

Nie jestem pewien, czy dostępne są jakiekolwiek narzędzia wiersza poleceń do pobierania wartości właściwości konfiguracji w Mapr lub w wersji 0,20 mufów wg. W takiej sytuacji lepiej wypróbuj to samo w Javie, aby pobrać wartość odpowiadającą właściwości konfiguracji.

Configuration hadoop conf = Configuration.getConf(); 
System.out.println(conf.get("fs.default.name")); 
+0

linia użytkowych komenda „HDFS” nie jest dostępna w wersji wcześniejszej Hadoop? – ernesto

+0

Komenda hdfs wprowadzona do hadoop od 2.X, tego polecenia nie ma w 1.X, Możesz wypróbować drugą opcję w tym przypadku: – sachin

+0

Użyj hasoop conf -key fs.default.name dla wersji 2.x. –

8

fs.default.name jest przestarzałe.

zastosowanie: hdfs getconf -confKey fs.defaultFS

+0

Otrzymuję getconf: Nieznane polecenie, gdy próbuję. –

1

ja spotkałem tę odpowiedź, kiedy szukałem HDFS URI. Ogólnie jest to adres URL wskazujący na namenode. Podczas gdy hdfs getconf -confKey fs.defaultFS dostaje mi nazwę usługi name, ale to nie pomoże mi budować URI HDFS.

Próbowałem polecenia poniżej, aby uzyskać listę namenodes zamiast

hdfs getconf -namenodes 

To dało mi listę wszystkich namenodes, pierwotnych pierwszy następnie wtórny. Po tym skonstruowanie URI HDFS było proste:

hdfs://<primarynamenode>/ 
+0

Otrzymuję getconf: Nieznane polecenie, gdy próbuję. –

-1

Tak, pliki hdfs getconf -namenodes pokaże listę namenod.

0

można użyć

hdfs getconf -confKey fs.default.name