Por ahora, tengo un trabajo de Hadoop que crea contadores con un nombre bastante grande.
Por ejemplo, la siguiente: stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Este contador se trunca en la interfaz web y en la getName()
llamada al método. Descubrí que Hadoop tiene limitaciones en el nombre máximo del contador y esta identificación de configuración mapreduce.job.counters.counter.name.max
es para configurar este límite. Así que incrementé esto 500
y la interfaz web ahora muestra el nombre completo del contador. Pero getName()
del contador todavía devuelve el nombre truncado.
¿Podría alguien, por favor, explicarme esto o señalarme mis errores? Gracias.
EDITAR 1
La configuración de mi servidor Hadoop consiste en un servidor único con HDFS, YARN y map-reduce en él. Durante map-reduce, hay algunos incrementos de contador y después de que se completa el trabajo, en ToolRunner
I recupero contadores con el uso de org.apache.hadoop.mapreduce.Job#getCounters
.
EDITAR 2
La versión de Hadoop es la siguiente:
Hadoop 2.6.0-cdh5.8.0
Subversion http://github.com/cloudera/hadoop -r 042da8b868a212c843bcbf3594519dd26e816e79
Compiled by jenkins on 2016-07-12T22:55Z
Compiled with protoc 2.5.0
From source with checksum 2b6c319ecc19f118d6e1c823175717b5
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.8.0.jar
Hice una investigación adicional y parece que este problema describe una situación similar a la mía. Pero es bastante confuso porque puedo aumentar el número de contadores pero no la longitud del nombre del contador ...
EDITAR 3
Hoy, dediqué bastante tiempo a depurar los componentes internos de Hadoop. Algunas cosas interesantes:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
El método devuelve un montón de contadores de hilo con nombres TRUNCADOS y nombres de visualización COMPLETOS .- No pudo depurar mapas y reductores en sí, pero con la ayuda del registro, parece que el
org.apache.hadoop.mapreduce.Counter#getName
método funciona correctamente durante la ejecución del reductor.
getName()
llamada que aún devuelve el nombre truncado? ¿Es esto iterando sobre los contadores devueltos desdeJob#getCounters()
el cliente que envía después de esperar a que se complete el trabajo, o es una aplicación separada que consulta los contadores del servidor del historial de trabajos, o es algo completamente diferente? Espero que su configuración sea suficiente. La interfaz de usuario web utiliza la mismagetName()
llamada. (No sería retroactiva fix truncado nombres de contador de los trabajos presentados antes del cambio de configuración sin embargo.)