Este tema cubre los problemas comunes que puede encontrar al ejecutar Apache Druid en E-MapReduce (EMR), incluidos los fallos de indexación y los errores de tiempo de ejecución frecuentes.
Solucionar fallos de indexación
Siga estos pasos para diagnosticar un fallo de indexación, comenzando desde la capa externa y avanzando hacia la interna.
Indexación por lotes
Ejecute el comando curl y compruebe su salida. Si la salida muestra un error o no muestra nada, compruebe el formato del archivo de entrada. Para inspeccionar la respuesta sin procesar de la API, agregue la opción
-val comando curl.Abra la página Overlord y compruebe el estado de ejecución del trabajo. Si el trabajo finalizó con errores, consulte los registros directamente en esa página.
Si no aparecen registros en la página Overlord, abra la página YARN y compruebe si se generó un trabajo de indexación. Este paso se aplica a los trabajos basados en Hadoop.
-
Si aún no puede identificar la causa, inicie sesión en el clúster EMR Druid y compruebe el registro de Overlord:
/mnt/disk1/log/druid/overlord-emr-header-1.cluster-xxxx.logEn un clúster de alta disponibilidad (HA), compruebe el Overlord que recibió el envío del trabajo.
-
Si el trabajo se envió a MiddleManager pero MiddleManager devolvió un error, busque en Overlord el nodo de trabajo asignado al trabajo, inicie sesión en ese nodo y compruebe el registro de MiddleManager:
/mnt/disk1/log/druid/middleManager-emr-header-1.cluster-xxxx.log
Indexación en tiempo real de Tranquility
Comience por comprobar el registro de Tranquility y confirme si los mensajes se recibieron o se descartaron. Después siga los pasos 2 a 5 del procedimiento de indexación por lotes anterior.
La mayoría de los errores de indexación se dividen en dos categorías:
Errores de configuración del clúster: parámetros de memoria de la JVM, conectividad entre clústeres, acceso en modo de alta seguridad y principales de Kerberos.
Errores del trabajo: formato del archivo de descripción del trabajo, análisis sintáctico de los datos de entrada y otras configuraciones del trabajo, como
ioConfig.
Errores comunes y soluciones
Error al iniciar el servicio
Causa: La memoria disponible de la máquina es insuficiente para los parámetros de la JVM configurados para el componente Druid. Por ejemplo, un tamaño del montón grande o una cantidad alta de hilos en una máquina con memoria limitada.
Solución: Compruebe los registros del componente para identificar qué parámetro está sobredimensionado. Después redúzcalo. La memoria de la JVM tiene dos partes: memoria del montón y memoria directa. Para obtener orientación sobre el ajuste, consulte Preguntas frecuentes sobre rendimiento de Apache Druid.
La tarea de YARN falla con un error de conflicto de JAR
Error:
Error: class com.fasterxml.jackson.datatype.guava.deser.HostAndPortDeserializer overrides final method deserialize.(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/lang/Object;
Causa: Las dependencias de Druid entran en conflicto con archivos JAR que ya están presentes en el clúster Hadoop.
Solución: Agregue una de las propiedades que se muestran a continuación a la sección tuningConfig de la configuración del trabajo de indexación:
|
Propiedad |
Efecto |
|
|
Permite que los trabajos de MapReduce usen cargadores de clases independientes |
|
|
Da prioridad a MapReduce para usar sus paquetes JAR |
Seleccione uno de estos dos elementos de configuración. Ejemplo:
"tuningConfig": {
"jobProperties": {
"mapreduce.job.classloader": "true"
}
}
Para obtener más información, consulte Apache Druid: trabajar con diferentes versiones de Hadoop.
La tarea Reduce no puede crear el directorio de segmentos
Solución: Compruebe la configuración de almacenamiento profundo, específicamente los campos type y directory:
**Si
typeeslocal**: Compruebe que el directorio existe y que la cuenta de EMR Druid tiene permiso de escritura.**Si
typeeshdfs**: Escriba la ruta como un URI HDFS completo; por ejemplo,hdfs://<hdfs_master>:9000/. Parahdfs_master, use la dirección IP. Si debe usar un nombre de host, use el nombre de host completo; por ejemplo,emr-header-1.cluster-xxxxxxxxen lugar deemr-header-1.
Para la indexación por lotes de Hadoop en un clúster EMR Druid independiente, establezca el almacenamiento profundo en "hdfs". Si usa "local", el trabajo de MapReduce entra en un estado indefinido porque el clúster YARN remoto no puede escribir en una ruta local en una máquina diferente.
La creación del directorio finalizó con errores después de 10,000 intentos
Causa: La ruta java.io.tmp especificada en la configuración de la JVM no existe.
Solución: Cree el directorio y asegúrese de que la cuenta de EMR Druid tenga permiso para acceder a él.
com.twitter.finagle.NoBrokersAvailableException: No hosts are available for disco!firehose:druid:overlord
Causa: La cadena de conexión de ZooKeeper de Druid no coincide con la de Tranquility.
Solución: Asegúrese de que ambos servicios usen la misma cadena de conexión de ZooKeeper.
La ruta predeterminada de ZooKeeper para EMR Druid es /druid, por lo que el valor zookeeper.connect de la configuración de Tranquility debe incluir /druid.
Si usa Tranquility con Kafka, existen dos configuraciones separadas de ZooKeeper:
|
Configuración |
Se conecta a |
|
|
ZooKeeper del clúster EMR Druid |
|
|
ZooKeeper del clúster de Kafka |
Estos dos clústeres de ZooKeeper pueden ser diferentes. Compruebe que cada configuración apunte al clúster correcto.
MiddleManager no puede encontrar com.hadoop.compression.lzo.LzoCodec
Causa: El clúster EMR Hadoop está configurado con compresión LZO, pero los archivos obligatorios no están en el directorio de dependencias de Druid.
Solución: Copie el JAR de LZO y su biblioteca nativa desde HADOOP_HOME/lib en el clúster EMR al druid.extensions.hadoopDependenciesDir de Druid (predeterminado: DRUID_HOME/hadoop-dependencies).
La indexación falla con GPLNativeCodeLoader IOException
Error:
2018-02-01T09:00:32,647 ERROR [task-runner-0-priority-0] com.hadoop.compression.lzo.GPLNativeCodeLoader - could not unpack the binaries
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[?:1.8.0_151]
at java.io.File.createTempFile(File.java:2024) ~[?:1.8.0_151]
at java.io.File.createTempFile(File.java:2070) ~[?:1.8.0_151]
at com.hadoop.compression.lzo.GPLNativeCodeLoader.unpackBinaries(GPLNativeCodeLoader.java:115) [hadoop-lzo-0.4.21-SNAPSHOT.jar:?]
Causa: La ruta java.io.tmp no existe.
Solución: Cree el directorio y asegúrese de que la cuenta de EMR Druid tenga permiso para acceder a él.