hadoop hive apache-pig

hadoop - ¿Diferencia entre cerdo y colmena? ¿Por qué tienen ambos?



hive apache-pig (19)

  1. Pig-latin es un estilo de flujo de datos, es más adecuado para ingenieros de software. Mientras que sql es más adecuado para la persona analítica que se acostumbra a sql. Para tareas complejas, para Hive, debe crear manualmente una tabla temporal para almacenar datos intermedios, pero no es necesario para pig.

  2. Pig-latin es adecuado para una estructura de datos complicada (como un pequeño gráfico). Hay una estructura de datos en pig llamada DataBag que es una colección de Tuple. A veces necesitas calcular métricas que involucren múltiples tuplas (hay un enlace oculto entre tuplas, en este caso lo llamaría gráfico). En este caso, es muy fácil escribir un UDF para calcular las métricas que involucran múltiples tuplas. Por supuesto, podría hacerse en colmena, pero no es tan conveniente como en cerdo.

  3. Escribir UDF en cerdo es mucho más fácil que en Hive en mi opinión.

  4. Pig no tiene soporte de metadatos (o es opcional, en el futuro puede integrar hcatalog). Hive tiene metadatos de tablas almacenados en la base de datos.

  5. Puede depurar el script de cerdo en el entorno local, pero sería difícil que Hive lo hiciera. El motivo es el punto 3. Debe configurar metadatos de colmena en su entorno local, lo que requiere mucho tiempo.

Mis antecedentes - 4 semanas de edad en el mundo Hadoop. Se incursionó un poco en Hive, Pig y Hadoop usando Hadoop VM de Cloudera. He leído el artículo de Google en Map-Reduce y GFS ( enlace PDF ).

Entiendo que-

  • El lenguaje Pig de Pig es un cambio desde (de acuerdo con la forma en que piensan los programadores) el estilo declarativo de programación de SQL y el lenguaje de consulta de Hive se parece mucho a SQL.

  • El cerdo se sienta encima de Hadoop y, en principio, también puede sentarse encima de Dryad. Puede que me equivoque, pero Hive está muy unido a Hadoop.

  • Los comandos de Pig Latin y Hive se compilan para Mapear y Reducir trabajos.

Mi pregunta: ¿Cuál es el objetivo de tener ambos cuando uno (por ejemplo, Cerdo) podría servir al propósito? ¿Es solo porque el cerdo es evangelizado por Yahoo! y Hive por Facebook?


¡El cerdo come cualquier cosa! Lo que significa que puede consumir datos no estructurados.

La colmena requiere un esquema.



Creo que la respuesta real a su pregunta es que son proyectos independientes y no hubo una meta coordinada centralmente. Estaban en diferentes espacios desde el principio y han crecido hasta superponerse con el tiempo a medida que ambos proyectos se expanden.

Parafraseado del libro de Hadoop O''Reilly:

Pig: un lenguaje y entorno de flujo de datos para explorar conjuntos de datos muy grandes.

Colmena: un almacén de datos distribuido.


Cuando utilizamos Hadoop en el sentido, significa que estamos intentando un gran procesamiento de datos. El objetivo final del procesamiento de datos sería generar contenido / informes a partir de él.

Por lo tanto, se compone internamente de 2 actividades principales 1) Carga de procesamiento de datos 2) Genere contenido y utilícelo para los informes / etc.

Carga / Procesamiento de datos -> Pig sería útil en ello. Esto ayuda como un ETL (podemos realizar operaciones de etl utilizando scripts de cerdo). Una vez que se procesa el resultado, podemos usar hive para generar los informes basados ​​en el resultado procesado.

Hive: Está construido sobre hdfs para procesamiento de almacén. NOSOTROS podemos geenerar informes adhoc utilizando fácilmente la sección del contenido procesado generado por cerdo.


Desde el enlace: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

Hive no es una base de datos completa. Las restricciones de diseño y las limitaciones de Hadoop y HDFS imponen límites a lo que Hive puede hacer.

Hive es más adecuado para aplicaciones de almacenamiento de datos, donde

1) Se analizan datos relativamente estáticos,

2) No se requieren tiempos de respuesta rápidos, y

3) Cuando los datos no cambian rápidamente.

Hive no proporciona las funciones esenciales requeridas para OLTP, el procesamiento de transacciones en línea. Está más cerca de ser una herramienta OLAP, procesamiento analítico en línea. Por lo tanto, Hive es el más adecuado para aplicaciones de almacenamiento de datos, donde se mantiene y se extrae un gran conjunto de datos para obtener información, informes, etc.


Echa un vistazo a esta post de Alan Gates, arquitecto de Pig en Yahoo !, que compara cuándo utilizaría un SQL como Hive en lugar de Pig. Presenta un caso muy convincente en cuanto a la utilidad de un lenguaje de procedimiento como Pig (vs. SQL declarativo) y su utilidad para los diseñadores de flujo de datos.


Eche un vistazo a Pig Vs Hive Comparison en una cáscara de nuez de un artículo "dezyre"

Hive es mejor que PIG en: particiones, servidor, interfaz web y compatibilidad con JDBC / ODBC.

Algunas diferencias:

  1. Hive es mejor para datos estructurados y PIG es mejor para datos semi estructurados

  2. Hive se utiliza para informes y PIG para la programación.

  3. Hive se utiliza como SQL declarativo y PIG como lenguaje de procedimiento.

  4. Hive soporta particiones y PIG no.

  5. Hive puede iniciar un servidor basado en el ahorro opcional y PIG no puede

  6. Hive define las tablas de antemano ( esquema ) + almacena la información del esquema en una base de datos y PIG no tiene metadatos dedicados a la base de datos

  7. Hive no soporta Avro pero PIG sí. EDITAR: Hive admite Avro, especifique la publicación como org.apache.hadoop.hive.serde2.avro

  8. Pig también admite la función COGROUP adicional para realizar uniones externas, pero la sección no lo hace. Pero tanto Hive como PIG pueden unirse, ordenar y ordenar dinámicamente.


En palabras más simples, Pig es una plataforma de alto nivel para crear programas MapReduce utilizados con Hadoop. Utilizando scripts de cerdo, procesaremos la gran cantidad de datos en el formato deseado.

Una vez que se obtienen los datos procesados, estos datos procesados ​​se guardan en HDFS para su procesamiento posterior para obtener los resultados deseados.

Además de los datos procesados ​​almacenados, aplicaremos los comandos SQL de HIVE para obtener los resultados deseados, estos comandos de hive sql ejecutan internamente los programas MAP Reduce.



Encontré esto lo más útil (sin embargo, es un año) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Habla específicamente sobre Pig vs Hive y cuándo y dónde están empleados en Yahoo. Me pareció muy perspicaz. Algunas notas interesantes:

En cambios / actualizaciones incrementales a conjuntos de datos:

En su lugar, unirse al nuevo incremento de datos y utilizar los resultados junto con los resultados de la combinación completa anterior es el enfoque correcto. Esto tomará sólo unos minutos. Las operaciones de base de datos estándar se pueden implementar de esta manera incremental en Pig Latin, haciendo de Pig una buena herramienta para este caso de uso.

Sobre el uso de otras herramientas a través de streaming:

La integración de Pig con el streaming también facilita a los investigadores tomar un script de Perl o Python que ya han depurado en un pequeño conjunto de datos y ejecutarlo contra un gran conjunto de datos.

Sobre el uso de Hive para el almacenamiento de datos:

En ambos casos, el modelo relacional y SQL son los que mejor se adaptan. De hecho, el almacenamiento de datos ha sido uno de los casos de uso principales para SQL a lo largo de gran parte de su historia. Tiene las construcciones adecuadas para admitir los tipos de consultas y herramientas que los analistas desean utilizar. Y ya está en uso por las herramientas y los usuarios en el campo.

El subproyecto Hadoop Hive proporciona una interfaz SQL y un modelo relacional para Hadoop. El equipo de Hive ha comenzado a trabajar para integrarse con las herramientas de BI a través de interfaces como ODBC.


Hive Vs Pig-

Hive es una interfaz SQL que permite a los usuarios con conocimientos de SQL u otras herramientas como Tableu / Microstrategy / cualquier otra herramienta o idioma que tenga interfaz de SQL.

PIG es más como un canal de ETL ... con comandos paso a paso como declarar variables, bucles, iteraciones, sentencias condicionales, etc.

Prefiero escribir secuencias de comandos de Pig en lugar de QL cuando quiero escribir una lógica paso a paso compleja. Cuando me siento cómodo escribiendo un solo sql para extraer los datos, quiero usar Hive. para Hive, deberá definir la tabla antes de consultar (como lo hace en RDBMS)

El propósito de ambos es diferente pero bajo el capó, ambos hacen lo mismo, se convierten para mapear programas reducidos. Además, la comunidad de código abierto de Apache es agregar más y más características a los dos proyectos existentes.


Hive fue diseñado para atraer a una comunidad cómoda con SQL. Su filosofía era que no necesitamos otro lenguaje de scripting. Hive admite la asignación y reducción de secuencias de comandos de transformación en el idioma que elija el usuario (que se puede incrustar en cláusulas de SQL). Es ampliamente utilizado en Facebook por analistas que se sienten cómodos con SQL, así como por la programación de mineros de datos en Python. Los esfuerzos de compatibilidad de SQL en Pig se han abandonado AFAIK, por lo que la diferencia entre los dos proyectos es muy clara.

El soporte de la sintaxis SQL también significa que es posible integrarlo con herramientas de BI existentes como Microstrategy. Hive tiene un controlador ODBC / JDBC (que es un trabajo en progreso) que debería permitir que esto ocurra en el futuro cercano. También está comenzando a agregar soporte para índices que deberían permitir soporte para consultas detalladas en tales entornos.

Finalmente, esto no es pertinente a la pregunta directamente. Hive es un marco para realizar consultas analíticas. Si bien su uso predominante es consultar archivos planos, no hay razón para que no pueda consultar otras tiendas. Actualmente, Hive se puede usar para consultar datos almacenados en Hbase (que es un almacén de valores clave como los que se encuentran en las entrañas de la mayoría de los RDBMS), y el proyecto HadoopDB usó Hive para consultar un nivel federado de RDBMS.



Para dar un resumen de muy alto nivel de ambos, en resumen:

1) El cerdo es un álgebra relacional sobre hadoop

2) Hive es un SQL sobre hadoop (un nivel por encima de Pig)


Pig es útil para el tipo de cargas de trabajo de ETL en general. Por ejemplo, el conjunto de transformaciones que debe hacer a sus datos todos los días.

Hive brilla cuando necesita ejecutar consultas adhoc o simplemente desea explorar datos. A veces puede actuar como interfaz para la capa de visualización (Tableau / Qlikview).

Ambos son esenciales y sirven para diferentes propósitos.


Pig permite cargar datos y códigos de usuario en cualquier punto de la tubería. Esto puede ser particularmente importante si los datos son datos de transmisión, por ejemplo, datos de satélites o instrumentos.

Hive, que se basa en RDBMS, necesita que los datos se importen primero (o se carguen) y luego se puede trabajar en ellos. Entonces, si estuviera usando Hive en la transmisión de datos, tendría que seguir llenando los cubos (o archivos) y usar la colmena en cada cubo lleno , mientras usa otros compartimientos para seguir almacenando los datos recién llegados.

El cerdo también usa la evaluación perezosa. Permite una mayor facilidad de programación y se puede usar para analizar datos de diferentes maneras con más libertad que en un lenguaje similar a SQL como Hive. Entonces, si realmente quería analizar matrices o patrones en algunos datos no estructurados que tenía, y quería hacer cálculos interesantes con Pig, puede recorrer una buena distancia, mientras que con Hive necesita algo más para jugar con los resultados.

Pig es más rápido en la importación de datos pero más lento en la ejecución real que un lenguaje amigable con RDBMS como Hive.

Pig está bien adaptado para la paralelización y, por lo tanto, posiblemente tenga una ventaja para los sistemas donde los conjuntos de datos son enormes, es decir, en los sistemas en los que está más preocupado por el rendimiento de sus resultados que por la latencia (el tiempo para obtener un dato de resultados en particular).


Puede lograr resultados similares con consultas de cerdo / colmena. La principal diferencia radica en el enfoque para comprender / escribir / crear consultas.

Pig tiende a crear un flujo de datos: pequeños pasos donde en cada uno haces un procesamiento
Hive le brinda un lenguaje similar al SQL para operar con sus datos, por lo que la transformación desde RDBMS es mucho más fácil (Pig puede ser más fácil para alguien que no tenía experiencia previa con SQL)

También vale la pena señalar que, para Hive, puede ser una buena interfaz para trabajar con estos datos (Beeswax for HUE, o interfaz web de Hive), y también le proporciona metástasis para obtener información sobre sus datos (esquema, etc.) que es útil como Información central sobre sus datos.

Utilizo Hive y Pig, para diferentes consultas (utilizo esa en la que puedo escribir consultas más rápido / más fácil, lo hago de esta manera principalmente consultas ad hoc) - pueden usar los mismos datos como una entrada. Pero actualmente estoy haciendo gran parte de mi trabajo a través de Beeswax.


¿Qué puede hacer HIVE que no es posible en PIG?

La partición se puede hacer usando HIVE pero no en PIG, es una forma de omitir la salida.

¿Qué PIG puede hacer que no es posible en HIVE?

Referencias de posición: incluso cuando no tiene nombres de campo, podemos hacer referencia usando la posición como $ 0 - para el primer campo, $ 1 para el segundo y así sucesivamente.

Y otra diferencia fundamental es que PIG no necesita un esquema para escribir los valores, pero HIVE sí necesita un esquema.

Puede conectarse desde cualquier aplicación externa a HIVE utilizando JDBC y otros, pero no con PIG.

Nota: Ambos se ejecutan sobre HDFS (sistema de archivos distribuidos de hadoop) y las declaraciones se convierten en programas Map Reduce.