hadoop - Encontrar el número de puerto donde HDFS está escuchando
cloudera hortonworks-data-platform (5)
Quiero acceder a hdfs con nombres completos como:
hadoop fs -ls hdfs://machine-name:8020/user
También podría simplemente acceder a hdfs con
hadoop fs -ls /user
Sin embargo, estoy escribiendo casos de prueba que deberían funcionar en diferentes distribuciones (HDP, Cloudera, MapR ... etc) que involucran el acceso a archivos hdfs con nombres calificados.
Entiendo que hdfs://machine-name:8020
se define en core-site.xml como fs.default.name
. Pero esto parece ser diferente en diferentes distribuciones. Por ejemplo, hdfs es maprfs en MapR. IBM BigInsights ni siquiera tiene core-site.xml
en $HADOOP_HOME/conf
.
Parece que, de alguna manera, hadoop me dice lo que está definido en fs.default.name
con sus opciones de línea de comandos.
¿Cómo puedo obtener el valor definido en fs.default.name
forma confiable desde la línea de comandos?
La prueba siempre se ejecutará en namenode, por lo que el nombre de la máquina es fácil. Pero obtener el número de puerto (8020) es un poco difícil. Intenté lsof, netstat .. pero todavía no pude encontrar una manera confiable.
Bajo el comando disponible en Apache hadoop 2.7.0 en adelante, se puede usar para obtener los valores de las propiedades de configuración de hadoop. fs.default.name está en desuso en hadoop 2.0, fs.defaultFS es el valor actualizado. No estoy seguro de si esto funcionará en caso de maprfs.
hdfs getconf -confKey fs.defaultFS # ( new property )
o
hdfs getconf -confKey fs.default.name # ( old property )
No estoy seguro de si hay alguna utilidad de línea de comandos disponible para recuperar valores de propiedades de configuración en las versiones de hadoop Mapado o hadoop 0.20. En este caso, es mejor que intentes lo mismo en Java para recuperar el valor correspondiente a una propiedad de configuración.
Configuration hadoop conf = Configuration.getConf();
System.out.println(conf.get("fs.default.name"));
Encontré esta respuesta cuando estaba buscando URI de HDFS. En general, es una URL que apunta al namenode. Mientras que hdfs getconf -confKey fs.defaultFS
me da el nombre del servicio de nombres, pero no me ayudará a crear el URI de HDFS.
Intenté el siguiente comando para obtener una lista de los namenodes en su lugar
hdfs getconf -namenodes
Esto me dio una lista de todos los nombres de árbol, primero el primero y luego el secundario. Después de eso la construcción del URI HDFS fue simple
hdfs://<primarynamenode>/
Sí, hdfs getconf -namenodes mostrará la lista de namenodes.
fs.default.name está en desuso.
utilizar: hdfs getconf -confKey fs.defaultFS
puedes usar
hdfs getconf -confKey fs.default.name