¿Dónde suele empezar a abordarse la asimetría de datos? Operadores comunes que activan la reproducción aleatoria: distinto, groupByKey, reduceByKey, añadióByKey, unirse, cogrupo, reparación, etc. Para resolver el problema de la asimetría de datos, primero debemos ubicar dónde ocurre la asimetría de datos y en qué etapa se encuentra. Simplemente mírelo directamente en la interfaz de usuario web y luego observe las tareas que requieren mucho tiempo para ver si los datos están sesgados. De acuerdo con esta tarea, basándose en el principio de división de etapas, calcule en qué operador de mezcla se produce el sesgo de datos. Examine la distribución de datos en busca de claves que provoquen sesgos en los datos. Hay muchas formas de comprobar la distribución de claves, según la operación: 1. Si la distorsión de datos se debe a declaraciones de agrupación y unión en Spark SQL, verifique la distribución de claves de las tablas utilizadas en SQL. 2. Si la desviación de datos se debe a que Spark RDD ejecuta el operador aleatorio, puede agregar código para verificar la distribución de claves en el trabajo de Spark, como RDD.countByKey(). Luego recopile y fotografíe el número de veces que aparece cada llave e imprímalo en el cliente, para que pueda ver la distribución de llaves. Por ejemplo, en el caso de wordCount, el último operador reduceByKey provoca un sesgo de datos: val pares muestreados = pares. sample (false, 0.1) //Pares de muestra 10% val sampledwardCounts = pares muestreados. Countbykey () sampledwardCounts. Solución uno de sesgo de datos de Foreach (println (_)): use Hive ETL para preprocesar los datos. Escenarios aplicables: la tabla de Hive es la causa del sesgo de datos y los datos en la tabla de Hive en sí son muy desiguales. Los escenarios empresariales requieren el uso frecuente de Spark para realizar algunas operaciones de análisis en tablas de Hive. Idea de implementación: realizar operaciones de unión y otras operaciones por adelantado y realizar ETL en la etapa de Hive. Prefijos desordenados que pueden provocar sesgos en los datos. Ventajas y desventajas: la implementación es simple y mejora el rendimiento del trabajo de Spark, pero aún se producirán sesgos de datos en Hive ETL, lo que hará que Hive ETL sea lento. Experiencia práctica: avance la inclinación de los datos hacia arriba de Hive ETL y ejecútelo una vez al día, por lo que es más lento. Opción 2: filtrar varios escenarios de aplicaciones clave que causan sesgo: si varias claves causan sesgo en los datos, tendrá poco impacto en el cálculo en sí. Idea de implementación: por ejemplo, en Spark SQL, use directamente la condición Where para filtrar estas claves. Si es un RDD, use el operador de filtro para filtrar estas claves. Si desea determinar dinámicamente qué claves tienen más datos y luego filtrarlas, puede usar un operador de muestreo para muestrear el RDD, luego calcular el número de cada clave y filtrar las claves con más datos. Ventajas y desventajas: Fácil de implementar y buen efecto. La desventaja es que generalmente hay muchas teclas que provocan inclinación, no sólo unas pocas. Solución 3: mejorar el paralelismo de las operaciones de barajado. Escenarios aplicables: una solución simple que enfrenta directamente el sesgo de datos. Idea de implementación: al ejecutar el operador aleatorio en RDD, se pasa un parámetro al operador aleatorio, como reduceByKey (1000). Este parámetro establece el número de tareas de lectura aleatoria ejecutadas por este operador aleatorio. Se utiliza para declaraciones aleatorias en Spark SQL, como agrupar por, unir, etc. , debe establecer un parámetro, spark.sql.shuffle.partitions. El valor predeterminado de este parámetro es 200, que es demasiado pequeño para muchos escenarios. Ventajas y desventajas: la simplicidad puede aliviar el problema, pero la desventaja es que el problema no se erradica y el efecto es limitado. Solución 4: agregación en dos etapas (agregación local + agregación global) Escenarios aplicables: esta solución es más adecuada cuando se ejecutan operadores aleatorios como reduceByKey y otras agregaciones en RDD, o cuando se utilizan declaraciones group by en Spark SQL para la agregación de grupos. Idea de implementación: primero, agregación local, asigne a cada clave un pequeño rango de números aleatorios, como un número aleatorio dentro de 10, que equivale a 10 copias, y una tarea se divide en 10 tareas.
Después de la agregación, elimine el prefijo de número aleatorio en las claves y vuelva a realizar la agregación global. Ventajas y desventajas: alivia en gran medida la distorsión de los datos, pero la desventaja es que solo es aplicable a operaciones aleatorias agregadas. Solución 5: convierta conexiones reducidas en conexiones de mapas.