hadoop - que - ¿Cómo proporciona impala una respuesta de consulta más rápida en comparación con la colmena?
impala vs hive (3)
Debería ver Impala como "SQL en HDFS", mientras que Hive es más "SQL en Hadoop".
En otras palabras, Impala ni siquiera usa Hadoop en absoluto. Simplemente tiene daemons ejecutándose en todos sus nodos que almacenan en caché algunos de los datos que están en HDFS, para que estos daemons puedan devolver datos rápidamente sin tener que pasar por un trabajo de Map / Reduce completo.
La razón de esto es que hay una cierta sobrecarga involucrada en la ejecución de un trabajo de Mapa / Reducir, por lo que al cortocircuitar el Mapa / Reducir por completo puede obtener una gran ganancia en el tiempo de ejecución.
Dicho esto, Impala no reemplaza a Hive, es bueno para casos de uso muy diferentes. Impala no proporciona tolerancia a fallas en comparación con Hive, por lo que si hay un problema durante su consulta, entonces se ha ido. Definitivamente para trabajos tipo ETL donde la falla de un trabajo sería costosa, recomendaría Hive, pero Impala puede ser increíble para pequeñas consultas ad-hoc, por ejemplo, para científicos de datos o analistas de negocios que solo quieran ver y analizar algunos datos sin construir trabajos robustos. También desde mi experiencia personal, Impala aún no es muy maduro, y he visto algunos bloqueos a veces cuando la cantidad de datos es mayor que la memoria disponible.
Recientemente comencé a buscar en consultas grandes conjuntos de datos CSV en HDFS usando Hive e Impala. Como estaba esperando, obtengo un mejor tiempo de respuesta con Impala en comparación con Hive por las consultas que he utilizado hasta ahora.
Me pregunto si hay algunos tipos de consultas / casos de uso que todavía necesitan Hive y donde Impala no es una buena opción.
¿Cómo proporciona Impala una respuesta de consulta más rápida en comparación con Hive para los mismos datos en HDFS?
En mi humilde opinión, SQL en HDFS y SQL en Hadoop son lo mismo. Después de todo, Hadoop es HDFS (y también MapReduce). Entonces, cuando decimos SQL en HDFS, se entiende que es SQL en Hadoop (podría ser con o sin MapReduce).
Volviendo a la pregunta real, Impala proporciona una respuesta más rápida, ya que utiliza MPP
(procesamiento paralelo masivo) a diferencia de Hive, que utiliza MapReduce bajo el capó, lo que implica algunos gastos generales iniciales (como Charles ha especificado). El procesamiento paralelo masivo es un tipo de computación que usa muchas CPU separadas que se ejecutan en paralelo para ejecutar un único programa donde cada CPU tiene su propia memoria dedicada. El solo hecho de que Impala, al estar basado en MPP, no involucra los gastos generales de un trabajo de MapReduce . la configuración y creación de trabajos, la asignación de ranuras, la creación de divisiones, la generación de mapas, etc., lo hacen tremendamente rápido.
Pero eso no significa que Impala sea la solución a todos sus problemas. Al ser altamente intensivo en memoria (MPP), no es adecuado para tareas que requieren operaciones de datos pesados como uniones, etc., ya que simplemente no se puede incluir todo en la memoria. Aquí es donde Hive se adapta mejor.
Por lo tanto, si necesita tiempo real, las consultas ad-hoc sobre un subconjunto de sus datos van para Impala. Y si tiene un procesamiento por lotes que necesita un poco sobre Big Data, vaya a Hive.
HTH
Hay algunas características clave en impala que hacen que sea rápido.
No usa map / reduce, que son muy caros de bifurcar en jvms por separado. Se ejecuta Impala Daemon por separado, que divide la consulta y los ejecuta en paralelo y combina el resultado final al final.
Hace la mayor parte de su operación en memoria.
Utiliza hdfs para su almacenamiento, que es rápido para archivos de gran tamaño. Almacena en la mayor cantidad posible desde consultas hasta resultados y datos.
Admite un nuevo formato de archivo, como el parquet, que es un formato de archivo en columnas. Por lo tanto, si utiliza este formato, será más rápido para las consultas en las que solo tiene acceso a algunas columnas la mayor parte del tiempo.