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?
fuente
Respuestas:
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.
fuente
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.
fuente
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:
Sobre el uso de otras herramientas a través de la transmisión:
Sobre el uso de Hive para el almacenamiento de datos:
fuente
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:
Hive es mejor para datos estructurados y PIG es mejor para datos semiestructurados
Hive se usa para informar y PIG para programar
Hive se usa como SQL declarativo y PIG como lenguaje de procedimiento
La colmena admite particiones y PIG no
Hive puede iniciar un servidor opcional basado en ahorro y PIG no puede
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
Hive no es compatible con Avro pero PIG sí. EDITAR: Hive admite Avro, especifique el serde como org.apache.hadoop.hive.serde2.avro
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.
fuente
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:
fuente
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.
fuente
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).
fuente
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
fuente
Lea la diferencia entre PIG y HIVE en este enlace.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
Todos los aspectos están dados. Si está confundido sobre cuál elegir, debe ver esa página web.
fuente
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.
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.
Escribir UDF en cerdo es mucho más fácil que en Hive en mi opinión.
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.
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.
fuente
A continuación encontré un enlace útil para explorar cómo y cuándo usar HIVE y PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
fuente
Aquí hay algunos enlaces adicionales para usar Pig o Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
fuente
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.
fuente
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.
fuente
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)
fuente
¿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.
fuente
Cuando lo estamos utilizando
Hadoop
en 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.
fuente
¡El cerdo come cualquier cosa! Lo que significa que puede consumir datos no estructurados.
La colmena requiere un esquema.
fuente
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.
fuente