hadoop hive apache-pig bigdata

hadoop - ¿Cuál es la diferencia entre Apache Pig y Apache Hive?



apache-pig bigdata (5)

¿Cuál es la diferencia exacta entre el cerdo y la colmena? Descubrí que ambos tienen el mismo significado funcional porque se usan para hacer el mismo trabajo.

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

Puntajes de Hive sobre 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. Colmena utilizada para informes y PIG para programación.

  3. Hive usado como un declarativo SQL y PIG usado 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 la base de datos y PIG no tiene metadatos dedicados de la base de datos

  7. Hive no soporta Avro pero PIG no

  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

Entonces, ¿cuándo usar y qué tecnología?

Por encima de la diferencia aclara su consulta.

HIVE : datos estructurados, consultas de tipo SQL y se utilizan para fines de informes

PIG : datos semiestructurados, programa un flujo de trabajo que involucra una secuencia de actividades para los trabajos de Map Reduce.

En lo que respecta al desempeño del trabajo, tanto HIVE como PIG son lentos en comparación con el trabajo tradicional Map Reduce. Reason : Finalmente, las secuencias de comandos Hive o PIG se deben convertir en una serie de trabajos de Map Reduce.

Echa un vistazo a la pregunta de SE relacionada:

Mapa de cerdo vs Hive vs Reducir

¿Cuál es la diferencia exacta entre el cerdo y la colmena? Descubrí que ambos tienen el mismo significado funcional porque se usan para hacer el mismo trabajo. Lo único es la implementación que es diferente para ambos. Entonces, ¿cuándo usar y qué tecnología? ¿Hay alguna especificación para ambos que muestre claramente la diferencia entre ambos en términos de aplicabilidad y rendimiento?


Apache Pig es una plataforma para analizar grandes conjuntos de datos. El lenguaje de Pig, Pig Latin, es un álgebra de consulta simple que le permite expresar transformaciones de datos como la combinación de conjuntos de datos, filtrarlos y aplicar funciones a registros o grupos de registros. Los usuarios pueden crear sus propias funciones para realizar un procesamiento especial.

Las consultas de Pig Latin se ejecutan de forma distribuida en un cluster. Nuestra implementación actual compila los programas Pig Latin en trabajos Map-Reduce, y los ejecuta utilizando el clúster Hadoop.

https://cwiki.apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hive es un sistema de almacenamiento de datos para Hadoop que facilita el resumen sencillo de los datos, las consultas ad hoc y el análisis de grandes conjuntos de datos almacenados en sistemas de archivos compatibles con Hadoop. Hive proporciona un mecanismo para proyectar la estructura en estos datos y consultar los datos utilizando un lenguaje similar a SQL llamado HiveQL. Al mismo tiempo, este lenguaje también permite que los programadores de mapas / reductores tradicionales conecten sus cartógrafos y reductores personalizados cuando sea inconveniente o ineficiente expresar esta lógica en HiveQL.

https://cwiki.apache.org/Hive/


Apache Pig y Hive son dos proyectos que se superponen a Hadoop y proporcionan un lenguaje de nivel superior para usar la biblioteca MapReduce de Hadoop. Apache Pig proporciona un lenguaje de scripting para describir operaciones como leer, filtrar, transformar, unir y escribir datos, exactamente las operaciones para las que se diseñó originalmente MapReduce. En lugar de expresar estas operaciones en miles de líneas de código Java que usa MapReduce directamente, Pig permite que los usuarios las expresen en un lenguaje que no sea diferente de un script de bash o perl. Pig es excelente para la creación de prototipos y el rápido desarrollo de trabajos basados ​​en MapReduce, en lugar de codificar los trabajos de MapReduce en Java.

Si Pig es "scripting para Hadoop", Hive es "consultas SQL para Hadoop". Apache Hive ofrece un lenguaje aún más específico y de mayor nivel, para consultar datos mediante la ejecución de trabajos de Hadoop, en lugar de secuencias de comandos directamente, paso a paso, el funcionamiento de varios trabajos de MapReduce en Hadoop. El lenguaje es, por diseño, extremadamente similar a SQL. Hive aún está pensado como una herramienta para consultas de larga duración orientadas por lotes sobre datos masivos; No es "tiempo real" en ningún sentido. Hive es una excelente herramienta para analistas y tipos de desarrollo de negocios que están acostumbrados a consultas similares a SQL y sistemas de Business Intelligence; les permitirá aprovechar fácilmente su nuevo clúster Hadoop para realizar consultas ad hoc o generar datos de informes a través de los datos almacenados en los sistemas de almacenamiento mencionados anteriormente.


Desde un punto de vista puramente de ingeniería, creo que PIG es más fácil de escribir y mantener que los lenguajes similares a SQL. Es de procedimiento, por lo que aplica una serie de relaciones a sus datos una por una, y si algo falla, puede depurar fácilmente en pasos intermedios, e incluso tener un comando llamado "ilustrar" que utiliza un algoritmo para muestrear algunos datos coincidentes. tu relacion Yo diría que para trabajos con lógica compleja, esto es definitivamente mucho más conveniente que Hive, pero para cosas simples, la ganancia es probablemente mínima.

En cuanto a la interfaz, encuentro que PIG ofrece mucha flexibilidad en comparación con Hive. No tiene una noción de tabla en PIG, por lo que manipula los archivos directamente, y puede definir el cargador para cargarlo en casi cualquier formato muy fácilmente con los UDF del cargador, sin tener que pasar por la etapa de carga de la tabla antes de poder hacer su transformaciones. Tienen una buena característica en las versiones recientes de PIG, donde puedes usar invocadores dinámicos, es decir, usar prácticamente cualquier método Java directamente en tu script PIG, sin tener que escribir un UDF.

Para rendimiento / optimización, por lo que he visto, puede controlar directamente en PIG el tipo de algoritmo de agrupación y agrupación que desea utilizar (creo que 3 o 4 algoritmos diferentes para cada una). Personalmente, nunca lo he usado, pero mientras escribe algoritmos exigentes, probablemente sea útil poder decidir qué hacer en lugar de confiar en el optimizador, como es el caso en Hive. Por lo tanto, no diría que necesariamente se desempeña mejor que Hive, pero en los casos en que el optimizador toma la decisión equivocada, tiene la opción de elegir qué algoritmo usar y tener más control sobre lo que sucede.

Una de las cosas geniales que hice últimamente fueron las divisiones: puede dividir su flujo de ejecución y aplicar diferentes relaciones a cada división. Por lo tanto, puede tener un conjunto de datos no lineal, dividirlo en función de un campo y aplicar un procesamiento diferente a cada parte, y tal vez unir los resultados al final, todo esto en el mismo script. No creo que puedas hacer esto en Hive, tendrías que escribir consultas diferentes para cada caso, pero puedo estar equivocado.

Una cosa a tener en cuenta también es que puedes incrementar los contadores en PIG. Sin embargo, actualmente solo puedes hacer esto en UDF PIG. No creo que puedas usar contadores en Hive.

Y hay algunos proyectos agradables que le permiten interconectar PIG también con Hive (como HCatalog), así que básicamente puede leer datos de una tabla de Hive, o escribir datos en una tabla de Hive (o ambos) simplemente cambiando su cargador en el guión. Soporta particiones dinámicas también.


La principal diferencia es que PIG es un lenguaje de flujo de datos y Hive es un almacén de datos. Como PIG se puede utilizar de forma similar como un lenguaje de procedimiento paso a paso. Pero el HIVE se usa como lenguaje declarativo. PIG se puede utilizar para obtener en línea la transmisión de datos no estructurados. Pero HIVE solo puede acceder a datos estructurados y también puede acceder a datos de bases de datos RDBMS como SQL, NOSQL mediante el uso de controladores JDBC y ODBC. PIG puede convertir datos en formato Avro pero PIG no puede. PIG no puede crear particiones pero HIVE puede hacerlo. Dado que HIVE es lo más importante de PIG, esa es la razón por la que HIVE solo puede acceder a los datos una vez que PIG los procesa. Depende de cuándo tengamos que usar PIG y HIVE si está trabajando con datos relacionales estructurados, entonces podemos usar HIVE o podemos usar PIG. Por PIG podemos comunicarnos con las herramientas de ETL, pero lleva más tiempo en comparación con la colmena. Pero es fácil en PIG en lugar de HIVE porque en HIVE tenemos que crear una tabla antes de procesar los datos.