¿Diferencia entre cerdo y colmena? ¿Por qué tener ambos? [cerrado]

256

Mi experiencia: 4 semanas en el mundo de Hadoop. Se metió un poco en Hive, Pig y Hadoop usando la máquina virtual Hadoop de Cloudera. He leído el documento de Google sobre Map-Reduce y GFS ( enlace PDF ).

Entiendo que-

  • Lenguaje de Pig Pig Latin es un cambio de (se adapta a la forma en que los programadores piensan) SQL como un estilo de programación declarativo 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. Podría estar equivocado, pero Hive está estrechamente relacionado con Hadoop.

  • Los comandos Pig Latin y Hive compilan para asignar y reducir trabajos.

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

Arnkrishn
fuente
24
La colmena es para datos estructurados. Pig es para datos no estructurados.
Programador muerto el

Respuestas:

151

Mira esta publicación de Alan Gates, arquitecto de Pig en Yahoo !, que compara cuándo usaría un SQL como Hive en lugar de Pig. Él 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.

Jakob Homan
fuente
Alan también hace un artículo sobre Hive específicamente, como se comparte j03m a continuación. ¡Buenas cosas de él!
Dolan Antenucci
14
La colmena es para datos estructurados. Pig es para datos sin construir.
Programador muerto el
77
Estoy confundido. ¿Quiso decir "utilidad [...] de un lenguaje de procedimiento como Pig"? Porque el artículo afirma repetidamente que "Pig Latin es de procedimiento".
Matt Fenwick
44
No estoy seguro de si es temporal, pero el artículo parece haberse ido. ¿Puedes actualizar el enlace (no pude encontrarlo con una búsqueda rápida)?
Peter Klipfel
1
La publicación de Alan Gates está aquí ... por favor
revísela
57

Hive fue diseñado para atraer a una comunidad cómoda con SQL. Su filosofía era que no necesitamos otro lenguaje de secuencias de comandos. Hive admite el mapeo y reduce los scripts de transformación en el lenguaje que elija el usuario (que se puede incrustar dentro de las cláusulas 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.

La compatibilidad con la sintaxis SQL también significa que es posible integrarse 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 suceda en el futuro cercano. También está comenzando a agregar soporte para índices, lo que debería permitir el soporte de 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 dominante 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 ha usado Hive para consultar un nivel de RDBMS federado.

Joydeep Sen Sarma
fuente
37

Esto me pareció lo más útil (aunque tiene 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. Esto me pareció muy perspicaz. Algunas notas interesantes:

En cambios / actualizaciones incrementales a conjuntos de datos:

En cambio, unir los nuevos datos incrementales y usar los resultados junto con los resultados de la unión completa anterior es el enfoque correcto. Esto tomará solo unos minutos. Las operaciones estándar de la base de datos 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 la transmisión:

La integración de Pig con la transmisión 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 en un gran conjunto de datos.

Sobre el uso de Hive para el almacenamiento de datos:

En ambos casos, el modelo relacional y SQL son la mejor opción. De hecho, el almacenamiento de datos ha sido uno de los principales casos de uso de SQL en gran parte de su historia. Tiene las construcciones correctas para admitir los tipos de consultas y herramientas que los analistas quieren usar. Y ya está en uso tanto por las herramientas como por los usuarios en el campo.

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

j03m
fuente
1
Es genial ver una comparación de Yahoo, que es, por lo que entiendo, el creador original de Pig, o al menos un gran defensor. Editar: desde Jakob arriba, veo que el autor (Alan Gates) es el Arquitecto del Cerdo en Yahoo - tan genial compartir :)
Dolan Antenucci
3
El enlace está muerto. Creo que la URL correcta en este momento es: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie
1
Enlace actualizado por arriba
j03m
Los 2 enlaces compartidos anteriormente ya no se encuentran.
Keshav Pradeep Ramanath
28

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 soporte JDBC / ODBC.

Algunas diferencias:

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

  2. Hive se usa para informar y PIG para programar

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

  4. La colmena admite particiones y PIG no

  5. Hive puede iniciar un servidor opcional basado en ahorro 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 de base de datos dedicados

  7. Hive no es compatible con Avro pero PIG sí. EDITAR: Hive admite Avro, especifique el serde como org.apache.hadoop.hive.serde2.avro

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

Ravindra babu
fuente
17

Creo que la verdadera respuesta a su pregunta es que son / fueron proyectos independientes y no había un objetivo coordinado centralmente. Al principio estaban en diferentes espacios 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

GRAMO__
fuente
22
La colmena no se parece en nada a un RDBMS. Procesa archivos planos al igual que Pig. Ambos básicamente hacen lo mismo. Mire los optimizadores que usan cuando compilan el trabajo, ya que esa es la mayor diferencia real.
Steve Severance
12

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 en los que cada uno de los procesamientos de
Hive le proporciona un lenguaje similar a SQL para operar sus datos, por lo que la transformación de 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 tener una interfaz agradable para trabajar con estos datos (Beeswax for HUE, o la interfaz web de Hive), y también le ofrece metastore 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 (uso aquella 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 entrada. Pero actualmente estoy haciendo gran parte de mi trabajo a través de Beeswax.

wlk
fuente
12

Pig le permite a uno cargar datos y código 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 carguen) y luego se pueda trabajar. Entonces, si estaba usando Hive en la transmisión de datos, tendría que seguir llenando cubos (o archivos) y usar la colmena en cada cubo lleno , mientras usa otros cubos para seguir almacenando los datos recién llegados.

El cerdo también usa una 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 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 sobre ellos, con Pig puede recorrer una distancia considerable, 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 RDBMS como Hive.

Pig se adapta bien a la paralelización y, por lo tanto, posiblemente tiene una ventaja para los sistemas donde los conjuntos de datos son enormes, es decir, en los sistemas en los que le preocupa más el rendimiento de sus resultados que la latencia (el tiempo para obtener un dato de resultado particular).

enjambre
fuente
10

Colmena Vs Cerdo

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

PIG es más como una tubería ETL ... con comandos paso a paso como declarar variables, bucles, iteraciones, declaraciones condicionales, etc.

Prefiero escribir scripts de Pig sobre QL de colmena cuando quiero escribir una lógica compleja paso a paso. Cuando me siento cómodo escribiendo un único sql para extraer los datos que quiero, uso Hive. para colmena necesitará 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 en programas de reducción de mapas. También la comunidad de código abierto de Apache agrega más y más funciones a ambos proyectos

Ashwin Aravind
fuente
7
  1. Pig-latin es un estilo de flujo de datos, es más adecuado para el ingeniero de software. Mientras que sql es más adecuado para personas analíticas que se acostumbran a sql. Para tareas complejas, para colmena, 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 gráfico pequeño). Hay una estructura de datos en cerdo llamada DataBag que es una colección de Tuple. A veces necesitas calcular métricas que involucran 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 script de cerdo en el entorno local, pero sería difícil para la colmena hacerlo. La razón es el punto 3. Debe configurar metadatos de colmena en su entorno local, lo que consume mucho tiempo.

zjffdu
fuente
4

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 limitaciones y limitaciones de diseño 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 características cruciales necesarias para OLTP, 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 extrae un gran conjunto de datos para obtener información, informes, etc.

Margon
fuente
4

En palabras más simples, Pig es una plataforma de alto nivel para crear programas MapReduce utilizados con Hadoop, utilizando scripts de pig 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 posterior procesamiento para obtener los resultados deseados.

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

usuario3167459
fuente
Esto no es realmente una adición significativa a la base de conocimiento. intente agregar más información
agconti
4

Para dar una visión general de 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)

exAres
fuente
La comparación de álgebra es interesante
Ravindra babu
3

¿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 evitar el resultado.

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

Referencia 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 distribuido hadoop) y las declaraciones se convierten en programas Map Reduce.

221B
fuente
3

Cuando lo estamos utilizando Hadoopen el sentido, significa que estamos tratando de procesar grandes cantidades de datos. El objetivo final del procesamiento de datos sería generar contenido / informes a partir de ellos.

Por lo tanto, consta internamente de 2 actividades principales:

1) Procesamiento de datos de carga

2) Generar contenido y utilizarlo para la presentación de informes / etc.

Carga / Procesamiento de datos -> Pig sería útil en ello.

Esto ayuda como ETL (podemos realizar operaciones etl usando scripts de pig).

Una vez que se procesa el resultado, podemos usar la colmena para generar los informes basados ​​en el resultado procesado.

Colmena: está construida sobre hdfs para el procesamiento del almacén.

Podemos generar informes adhoc fácilmente usando la colmena del contenido procesado generado a partir de cerdo.

shyamshyre
fuente
1

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

La colmena requiere un esquema.

rbanikaz
fuente
1

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

La colmena brilla cuando necesita ejecutar consultas ad hoc o simplemente desea explorar datos. A veces puede actuar como interfaz para su capa de visualización (Tableau / Qlikview).

Ambos son esenciales y tienen un propósito diferente.

Krishna Kalyan
fuente