web-dev-qa-db-fra.com

Trouver le numéro de port où HDFS écoute

Je souhaite accéder à hdfs avec des noms complets tels que:

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

Je pourrais aussi accéder simplement à hdfs avec

hadoop fs -ls /user

Cependant, j'écris des cas de test qui devraient fonctionner sur différentes distributions (HDP, Cloudera, MapR ... etc) ce qui implique d'accéder à des fichiers hdfs avec des noms qualifiés.

Je comprends que hdfs://machine-name:8020 est défini dans core-site.xml comme fs.default.name. Mais cela semble être différent sur différentes distributions. Par exemple, hdfs est maprfs sur MapR. IBM BigInsights n'a même pas core-site.xml dans $HADOOP_HOME/conf.

Il ne semble pas que hadoop me dise ce qui est défini dans fs.default.name avec ses options de ligne de commande.

Comment obtenir la valeur définie dans fs.default.name fiable à partir de la ligne de commande?

Le test sera toujours exécuté sur namenode, donc le nom de la machine est facile. Mais obtenir le numéro de port (8020) est un peu difficile. J'ai essayé lsof, netstat .. mais je n'ai toujours pas trouvé de moyen fiable.

24
ernesto

Ci-dessous la commande disponible dans Apache hadoop 2.7.0 et suivantes, elle peut être utilisée pour obtenir les valeurs des propriétés de configuration de hadoop. fs.default.name est déconseillé dans hadoop 2.0, fs.defaultFS est la valeur mise à jour. Je ne sais pas si cela fonctionnera en cas de maprfs.

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

ou

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

Je ne sais pas si des utilitaires de ligne de commande sont disponibles pour récupérer les valeurs des propriétés de configuration dans les versions Mapr ou hadoop 0.20 hadoop. Dans le cas de cette situation, il vaut mieux essayer la même chose dans Java pour récupérer la valeur correspondant à une propriété de configuration.

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

fs.default.name est obsolète.

utilisation : hdfs getconf -confKey fs.defaultFS

10
vijayinani

J'ai rencontré cette réponse lorsque je cherchais l'URI HDFS. Il s'agit généralement d'une URL pointant vers le namenode. Tandis que hdfs getconf -confKey fs.defaultFS me donne le nom du service de noms mais cela ne m'aidera pas à construire l'URI HDFS.

J'ai essayé la commande ci-dessous pour obtenir une liste des namenodes à la place

 hdfs getconf -namenodes

Cela m'a donné une liste de tous les namenodes, primaire en premier, puis secondaire. Après cela, la construction de l'URI HDFS était simple

hdfs://<primarynamenode>/
3
terpinator

vous pouvez utiliser

hdfs getconf -confKey fs.default.name
0
Shubham Sharma