Sesgo de datos de Big Data

¿Qué es el sesgo de datos?

Cuando usamos Hive para obtener datos, a veces solo ejecutamos una simple declaración de unión, pero se ejecuta durante mucho tiempo. A veces creemos que es causada por recursos insuficientes del clúster, pero en la mayoría de los casos parece Situación de "sesgo de datos".

Generalmente hay dos casos de sesgo de datos:

Hay pocos valores variables: un solo valor variable representa una gran proporción de campos comunes como el género, la educación y la edad.

Hay muchos valores variables: la proporción de un valor variable único es extremadamente pequeña, y los campos comunes como los ingresos y el monto de la orden son similares.

El sesgo de datos , que es muy común en el modelo de programación MapReduce, es que la partición asigna una gran cantidad de claves idénticas a una partición, lo que resulta en la situación de "una está agotada, otras están inactivas" , lo que viola la intención original de la computación paralela La eficiencia es muy baja.

Razones para sesgo de datos

Cuando observamos el progreso de la tarea para mantener el 99% (o el 100%) durante mucho tiempo, al mirar la página de monitoreo de la tarea, encontraremos que solo un pequeño número (1 o unos pocos) de las subtareas de reducción no están completadas. Debido a que la cantidad de datos que procesa es demasiado diferente de otra reducción, esta es la manifestación directa del sesgo de datos.

Las razones para esto se pueden dividir aproximadamente en los siguientes puntos:

1) distribución desigual de claves

2) Características de los datos comerciales en sí

3) Pobres consideraciones al construir el reloj

4) Algunas instrucciones SQL tienen inherentemente sesgo de datos

Se puede incorporar en las siguientes operaciones comunes:

 

 

Características del marco informático de Hadoop

Antes de que comprendamos cómo evitar el sesgo de datos, echemos un vistazo a las características del marco Hadoop:

El gran volumen de datos no es un gran problema, la inclinación de datos es un gran problema;

La eficiencia de los trabajos con una gran cantidad de trabajos es relativamente baja, por ejemplo, incluso si hay millones de tablas, si se realizan varias asociaciones varias veces, se generan una docena de trabajos, lo que lleva mucho tiempo. La razón es que el mapa reduce el tiempo de inicialización del trabajo es relativamente largo;

UDAF (función agregada definida por el usuario), como sum, count, max, min, no teme el sesgo de datos. Hadoop agrega y optimiza en el lado del mapa para que el sesgo de datos no sea un problema

Recuento (distinto), en el caso de una gran cantidad de datos, la eficiencia es menor, si es más recuento (distinto), la eficiencia es menor, porque el recuento (distinto) se agrupa por grupo por campo, ordenado por campo distinto, generalmente este tipo de distribución Es muy inclinado, como el uv masculino, el uv femenino, Taobao 3 mil millones de pv al día, si se agrupan por género, se asignan 2 reducciones, y cada reducción procesa 1,5 mil millones de datos.

Medios comunes de optimización

En primer lugar, debemos comprender la distribución de datos. Es una buena opción resolver el problema de inclinación de datos usted mismo;

Aumente la memoria jvm (Java Virtual Machine: Java virtual machine), que es adecuada para el caso en el que el valor de la variable es muy pequeño, en este caso, a menudo solo se puede ajustar mediante hardware, aumentando la memoria jvm puede mejorar significativamente la eficiencia operativa;

Aumente el número de reducción, que es aplicable al caso donde hay muchos valores variables. En este caso, el resultado más probable es que una gran cantidad de la misma clave se divide en una partición, de modo que una reducción realiza mucho trabajo;

Para rediseñar la clave, hay una solución para agregar un número aleatorio a la clave durante la fase del mapa. La clave con el número aleatorio no se asignará al mismo nodo en grandes números (pequeña probabilidad), y el número aleatorio se eliminará después de la reducción Solo

Usa el combinador para fusionar. El combinner está en la etapa de mapa, una etapa intermedia antes de la reducción. En esta etapa, una gran cantidad de los mismos datos clave se pueden fusionar selectivamente primero, lo que se puede considerar como reducción local, y luego se entregan para reducir para reducir el lado del mapa. La cantidad de datos enviados al extremo reducido (ancho de banda de red reducido), y también redujo el número de extracciones de datos en la fase aleatoria entre el extremo del mapa y el extremo reducido (velocidad de E / S del disco localizada); (hive.map.aggr = true)

Establecer un número razonable de tareas de reducción de mapas puede mejorar efectivamente el rendimiento. (Por ejemplo, cálculo de nivel 10w +, usando 160 reduce, eso es bastante derrochador, 1 es suficiente);

Cuando la cantidad de datos es grande, use el conteo (distinto) con precaución, y el conteo (distinto) es propenso a problemas de inclinación;

hive.groupby.skewindata = true;

El equilibrio de carga se realiza cuando hay datos asimétricos. Cuando la opción se establece en verdadero, el plan de consulta generado tendrá dos trabajos MR. En el primer trabajo MR, el conjunto de resultados de salida del Mapa se distribuirá aleatoriamente para Reducir. Cada Reducción realizará una operación de agregación parcial y generará el resultado. De esta manera, el resultado procesado es el mismo Agrupar por clave puede distribuirse a Reducir diferente , Para lograr el propósito del equilibrio de carga; el segundo trabajo de MR luego se distribuye en Reducir de acuerdo con el resultado de los datos preprocesados ​​de acuerdo con Agrupar por clave (este proceso puede garantizar que el mismo Agrupar por clave se distribuya al mismo Reducir), y finalmente completar el final Operación agregada.

 

Supongo que te gusta

Origin www.cnblogs.com/songyuejie/p/12730983.html
Recomendado
Clasificación