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.
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"));
fs.default.name est obsolète.
utilisation : hdfs getconf -confKey fs.defaultFS
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>/
vous pouvez utiliser
hdfs getconf -confKey fs.default.name