Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> MapReduce Service> Preguntas frecuentes> Desarrollo de servicios de big data> Se necesita mucho tiempo para que Spark SQL acceda a las tablas particionadas de Hive antes del inicio de Job
Actualización más reciente 2023-11-20 GMT+08:00

Se necesita mucho tiempo para que Spark SQL acceda a las tablas particionadas de Hive antes del inicio de Job

Síntoma

Cuando se utiliza Spark SQL para acceder a tablas particionadas de Hive almacenadas en OBS, la velocidad de acceso es lenta y se invoca a un gran número de API de consulta de OBS.

Ejemplo de SQL:

select a,b,c from test where b=xxx

Localización de fallas

De acuerdo con la configuración, la tarea debe analizar solo la partición cuya b sea xxx. Sin embargo, los registros de tareas muestran que la tarea analiza todas las particiones y luego calcula los datos cuya b es xxx. Como resultado, el cálculo de la tarea es lento. Además, se envía un gran número de solicitudes OBS porque todos los archivos necesitan ser analizados.

De forma predeterminada, la optimización del plan de ejecución basada en estadísticas de partición está habilitada en MRS, lo que equivale a la ejecución automática de Analyze Table. (El método de configuración predeterminado es establecer spark.sql.statistics.fallBackToHdfs en true. Puede establecer este parámetro en false.) Después de activar esta función, las estadísticas de partición de tabla se analizan durante la ejecución SQL y se utilizan como estimación de costos en el plan de ejecución. Por ejemplo, las pequeñas tablas identificadas durante la evaluación de costes se difunden a cada nodo en la memoria para operaciones de unión, reduciendo significativamente el tiempo de mezclado. Esta función optimiza enormemente el rendimiento en escenarios de unión, pero aumenta el número de invocaciones de OBS.

Procedimiento

Establezca el siguiente parámetro en Spark SQL y, a continuación, ejecute la sentencia SQL:

set spark.sql.statistics.fallBackToHdfs=false;

Alternativamente, ejecute el comando --conf para establecer este parámetro en false antes del inicio.

--conf spark.sql.statistics.fallBackToHdfs=false

Desarrollo de servicios de big data Preguntas frecuentes

more