hadoop mapreduce hive apache-pig

hadoop - Pig vs Hive vs Native Map Reduce



mapreduce apache-pig (7)

Tengo una comprensión básica de lo que son las abstracciones de Pig, Hive. Pero no tengo una idea clara sobre los escenarios que requieren Hive, Pig o map map reduction.

Revisé algunos artículos que básicamente señalan que Hive es para procesamiento estructurado y Pig es para procesamiento no estructurado. ¿Cuándo necesitamos reducir el mapa nativo? ¿Puedes señalar algunos escenarios que no se pueden resolver usando Cerdo o Colmena pero en el mapa nativo reducir?


Colmena

Pros:

Sql les gusta a los chicos de base de datos les encanta eso. Buen soporte para datos estructurados. Actualmente admite el esquema de base de datos y las vistas como la estructura. Admite múltiples usuarios simultáneos, escenarios de sesiones múltiples. Mayor apoyo de la comunidad. Hive, servidor de Hiver, Hiver Server2, Impala, Centry ya

Contras: el rendimiento se degrada a medida que los datos crecen, no hay mucho que hacer, problemas de memoria sobre el flujo. no puedo hacer mucho con eso. La información jerárquica es un desafío. Los datos no estructurados requieren udf como componente La combinación de múltiples técnicas podría ser una pesadilla de porciones dinámicas con UTDF en caso de big data, etc.

Pig: Pros: un gran lenguaje de flujo de datos basado en script.

Contras:

Los datos no estructurados requieren udf como componente No es un gran apoyo de la comunidad

MapReudce: Pros: no está de acuerdo con la "funcionalidad para unirse difícil de lograr", si comprende qué tipo de unión quiere implementar puede implementar con pocas líneas de código. La mayoría de las veces MR produce un mejor rendimiento. El soporte de MR para datos jerárquicos es excelente especialmente para implementar estructuras tipo árbol. Mejor control al particionar / indexar los datos. Cadena de trabajo

Contras: necesita saber muy bien api para obtener un mejor rendimiento, etc. Código / depurar / mantener


La compleja lógica de bifurcación que tiene muchas estructuras anidadas si ... else .. es más fácil y más rápida de implementar en Standard MapReduce, para procesar datos estructurados se puede usar Pangool , también simplifica cosas como JOIN. Además, Standard MapReduce le brinda control total para minimizar el número de trabajos de MapReduce que requiere su flujo de procesamiento de datos, lo que se traduce en rendimiento. Pero requiere más tiempo para codificar e introducir cambios.

Apache Pig también es bueno para datos estructurados, pero su ventaja es la capacidad de trabajar con BAG de datos (todas las filas que están agrupadas en una clave), es más sencillo implementar cosas como:

  1. Obtenga los mejores N elementos para cada grupo;
  2. Calcule el total por cada grupo y luego ponga ese total contra cada fila en el grupo;
  3. Use los filtros Bloom para las optimizaciones de JOIN;
  4. Soporte Multiquery (es cuando PIG intenta minimizar el número en MapReduce Jobs haciendo más cosas en un solo trabajo)

Hive es más adecuado para consultas ad-hoc, pero su principal ventaja es que tiene un motor que almacena datos de particiones. Pero sus tablas se pueden leer desde Pig o Standard MapReduce.

Una cosa más, Hive and Pig no son adecuados para trabajar con datos jerárquicos.


Respuesta corta: necesitamos MapReduce cuando necesitamos un nivel muy profundo y un control detallado sobre la forma en que queremos procesar nuestros datos. A veces, no es muy conveniente expresar lo que necesitamos exactamente en términos de consultas de Pig y Hive.

No debería ser totalmente imposible de hacer, lo que se puede hacer usando MapReduce, a través de Pig o Hive. Con el nivel de flexibilidad proporcionado por Pig y Hive, de alguna manera puedes lograr tu objetivo, pero puede que no sea tan fácil. Podrías escribir UDF o hacer algo y lograr eso.

No existe una distinción clara como tal entre el uso de estas herramientas. Depende totalmente de su caso de uso particular. Con base en sus datos y el tipo de procesamiento que necesita para decidir qué herramienta se ajusta mejor a sus necesidades.

Editar:

Hace algún tiempo tuve un caso de uso en el que tuve que recopilar datos sísmicos y ejecutar algunos análisis en él. El formato de los archivos que contienen esta información era algo extraño. Alguna parte de los datos estaba codificada con EBCDIC , mientras que el resto de los datos estaba en formato binario. Básicamente era un archivo binario plano sin delimitadores como / n o algo así. Me costó encontrar la manera de procesar estos archivos usando Pig o Hive. Como resultado, tuve que establecerme con MR. Inicialmente tomó tiempo, pero gradualmente se volvió más suave ya que MR es realmente rápido una vez que tienes la plantilla básica lista para ti.

Entonces, como dije antes, básicamente depende de tu caso de uso. Por ejemplo, iterar sobre cada registro de su conjunto de datos es realmente fácil en Pig (solo un foreach), pero ¿qué pasa si necesita foreach n ? Entonces, cuando necesita "ese" nivel de control sobre la forma en que necesita procesar sus datos, MR es más adecuado.

Otra situación podría ser cuando sus datos son jerárquicos en lugar de basados ​​en filas o si sus datos están altamente desestructurados.

El problema de los metapateles que involucra el encadenamiento de trabajos y la fusión de trabajos es más fácil de resolver usando MR directamente en lugar de usar Pig / Hive.

Y a veces es muy conveniente realizar una tarea en particular usando alguna herramienta xyz en comparación con hacerlo usando Pig / hive. En mi humilde opinión, MR resulta ser mejor en tales situaciones también. Por ejemplo, si necesita realizar algunos análisis estadísticos en su BigData, R utilizado con la transmisión de Hadoop es probablemente la mejor opción.

HTH


Todas las cosas que podemos hacer usando PIG y HIVE se pueden lograr usando MR (aunque a veces llevará mucho tiempo). PIG y HIVE usan MR / SPARK / TEZ debajo. Entonces, todo lo que MR puede hacer puede o no ser posible en Hive y PIG.


Here está la gran comparación. Especifica todos los escenarios de casos de uso.


Scenarios donde Hadoop Map Reduce es preferible a Hive o PIG

  1. Cuando necesita un control definido del programa del controlador

  2. Siempre que el trabajo requiera la implementación de un particionador personalizado

  3. Si ya existe una biblioteca predefinida de Java Mappers o Reductores para un trabajo

  4. Si necesita una buena cantidad de comprobabilidad al combinar muchos conjuntos de datos grandes
  5. Si la aplicación exige requisitos de código heredados que ordenan la estructura física
  6. Si el trabajo requiere optimización en una etapa particular de procesamiento haciendo el mejor uso de trucos como la combinación en el mapeador
  7. Si el trabajo tiene un uso complicado de la memoria caché distribuida (combinación replicada), cruce de productos, agrupaciones o uniones

Pros de Pig / Hive:

  1. Hadoop MapReduce requiere más esfuerzo de desarrollo que Pig y Hive.
  2. Los enfoques de codificación Pig y Hive son más lentos que un programa Hadoop MapReduce totalmente sintonizado.
  3. Al utilizar Pig y Hive para ejecutar trabajos, los desarrolladores de Hadoop no tienen que preocuparse por ninguna discrepancia de versión.
  4. Hay una posibilidad muy limitada para el desarrollador de escribir errores de nivel Java al codificar en Pig o Hive.

Eche un vistazo a esta publicación para la comparación de Pig Vs Hive .


Mapa reducido:

Strengths: works both on structured and unstructured data. good for writing complex business logic. Weakness: long development type hard to achieve join functionality

Colmena:

Strengths: less development time. suitable for adhoc analysis. easy for joins Weakness : not easy for complex business logic. deals only structured data.

Cerdo

Strengths : Structured and unstructured data. joins are easily written. Weakness: new language to learn. converted into mapreduce.