es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spark SQL no puede leer de forma recursiva las subcarpetas de HDFS de una tabla de Hive (Spark – 2.4.6)

Estamos intentando leer una tabla de Hive usando Spark-SQL, pero no se muestra ningún registro (da 0 registros en la salida). Al verificar, encontramos que los archivos de HDFS de la tabla se almacenan en varios subdirectorios como este:

hive> [hadoop@ip-10-37-195-106 CDPJobs]$ hdfs dfs -ls /its/cdp/refn/cot_tbl_cnt_hive/
Encontrados 18 elementos
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/1
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/10
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/11
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/12
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/13
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/14
drwxrwxr-x+ – hadoop hadoop 0 2021-12-19 20:17 /its/cdp/refn/cot_tbl_cnt_hive/15

Intentamos configurar las siguientes propiedades en el archivo spark-defaults.conf, pero el problema persiste.

set spark.hadoop.hive.supports.subdirectories = true;
set spark.hadoop.hive.mapred.supports.subdirectories = true;
set spark.hadoop.hive.input.dir.recursive=true;
set mapreduce.input.fileinputformat.input.dir.recursive=true;
set recursiveFileLookup=true;
set spark.hive.mapred.supports.subdirectories=true;
set spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive=true;

¿Alguien conoce alguna solución para esto? Estamos utilizando la versión 2.4.6 de Spark.

Actualización (Resolución encontrada) –

He cambiado esta propiedad a false y ahora Spark puede leer datos de los subdirectorios.

set spark.sql.hive.convertMetastoreOrc=false;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para leer datos de una tabla Hive desde múltiples subdirectorios utilizando Spark-SQL

    En este escenario, estamos intentando leer datos de una tabla Hive utilizando Spark-SQL. Sin embargo, no podemos ver ningún registro en la salida. Al hacer una verificación, encontramos que los archivos de HDFS de la tabla se almacenan en múltiples subdirectorios, y hemos configurado varias propiedades en el archivo spark-defaults.conf, pero el problema persiste.

    Para resolver este problema, necesitamos configurar la propiedad spark.sql.hive.convertMetastoreOrc en false. Por defecto, esta propiedad está configurada en true, lo que permite que el Hive Metastore utilice el formato ORC para el almacenamiento de datos. Sin embargo, cuando los datos se almacenan en múltiples subdirectorios, este formato parece causar problemas al leer los datos utilizando Spark-SQL.

    Al establecer spark.sql.hive.convertMetastoreOrc en false, Spark-SQL utilizará el formato de almacenamiento predeterminado, lo que le permite leer datos almacenados en múltiples subdirectorios sin problemas.

    Por lo tanto, al establecer la propiedad spark.sql.hive.convertMetastoreOrc=false, podemos resolver el problema de que Spark-SQL no muestre ningún registro al leer datos de una tabla Hive almacenada en múltiples subdirectorios.

Comments are closed.