JindoTable utiliza un motor nativo para acelerar las consultas sobre archivos ORC o Parquet en Spark, Hive o Presto. En este tema se explica cómo habilitar la aceleración nativa de consultas para mejorar el rendimiento de Spark, Hive y Presto.
Requisitos previos
Debe contar con un clúster de E-MapReduce que tenga sus archivos ORC o Parquet almacenados en JindoFS u OSS. Para obtener más información, consulte Create a cluster.
Limitaciones
No es posible acelerar los archivos de tipo binario.
Las tablas particionadas no son compatibles si los valores de sus columnas de clave de partición están almacenados en los archivos de datos.
Los clústeres de E-MapReduce de la versión EMR-5.X y posteriores no son compatibles.
El uso de
spark.read.schema(userDefinedSchema)no es compatible.Los tipos de fecha solo son compatibles dentro del rango de 1400-01-01 a 9999-12-31.
No se admiten las tablas que contienen nombres de columna que difieren únicamente en mayúsculas y minúsculas (por ejemplo,
NAMEyname). Durante la aceleración nativa de consultas, los nombres de columna se tratan sin distinguir entre mayúsculas y minúsculas.-
A continuación se muestran los motores y formatos de almacenamiento compatibles con Spark, Hive y Presto.
Motor
ORC
Parquet
Spark2
Compatible
Compatible
Spark3
Compatible
Compatible
Presto
Compatible
Compatible
Hive2
No compatible
Compatible
Hive3
No compatible
Compatible
-
A continuación se muestran los motores y sistemas de archivos de almacenamiento compatibles con Spark, Hive y Presto.
Motor
OSS
JindoFS
HDFS
Spark2
Compatible
Compatible
Compatible
Presto
Compatible
Compatible
Compatible
Hive2
Compatible
Compatible
No compatible
Hive3
Compatible
Compatible
No compatible
Mejorar el rendimiento de Spark
-
Habilite la aceleración de ORC o Parquet en JindoTable.
NotaLa aceleración nativa de consultas utiliza memoria fuera del heap. Se recomienda agregar la configuración
--conf spark.executor.memoryOverhead=4ga su trabajo de Spark para asignar recursos adicionales a la aceleración.Para leer archivos ORC o Parquet en Spark, debe utilizar la API de DataFrame o Spark SQL.
-
Configuración global
-
Vaya a la página de detalles del clúster.
Inicie sesión en la consola de E-MapReduce.
En la barra de navegación superior, seleccione una región y un resource group según sea necesario.
Haga clic en la pestaña Clusters.
En la página Clusters, busque el clúster y haga clic en Details en la columna Actions.
-
Modifique la configuración.
En el panel de navegación izquierdo, elija .
En la página del servicio Spark, haga clic en la pestaña Configure.
En el cuadro de búsqueda, localice el parámetro spark.sql.extensions y establezca su valor en io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension.
-
Guarde la configuración.
Haga clic en Save.
En el cuadro de diálogo Confirm, introduzca un Execution Reason y haga clic en OK.
-
Reinicie ThriftServer.
En la esquina superior derecha, elija .
En el cuadro de diálogo Cluster Activities, introduzca un Execution Reason y haga clic en OK.
En el cuadro de diálogo Confirm, haga clic en OK.
-
-
Configuración a nivel de trabajo
Cuando ejecute spark-shell o spark-sql, agregue el siguiente parámetro de inicio de Spark:
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtensionPara obtener más información sobre los trabajos, consulte Configure a Spark Shell job o Configure a Spark SQL job.
-
Compruebe que la aceleración esté habilitada.
Inicie sesión en la interfaz de usuario de Spark History Server.
-
En la página SQL de la interfaz de usuario de Spark, consulte el trabajo de ejecución.
Si aparece
JindoDataSourceV2Scan, la aceleración está habilitada. De lo contrario, compruebe las configuraciones en Step 1. En la página Details for Query 10, el grafo acíclico dirigido (DAG) muestra el plan de ejecución. Por ejemplo, JindoDataSourceV2Scan puede analizar 15.6 GB de datos (aproximadamente 14 mil millones de filas), que luego se filtran hasta quedar en 2.7 mil millones de filas. Una operación final de HashAggregate genera 4,722 filas y la consulta total toma 2.3 minutos.
Mejorar el rendimiento de Presto
Las consultas de Presto tienen una alta concurrencia y la aceleración nativa de consultas utiliza memoria fuera del heap. Por lo tanto, debe asignar más de 10 GB de memoria para la aceleración de consultas.
Presto incluye un catálogo integrado para la aceleración nativa de JindoTable denominado hive-acc. Puede utilizar el catálogo hive-acc para habilitar la aceleración nativa de consultas.
Ejemplo:
presto --server emr-header-1:9090 --catalog hive-acc --schema default
Actualmente, la aceleración nativa de consultas para Presto no admite la lectura de tipos de datos complejos como Map, Struct o Array.
Mejorar el rendimiento de Hive
Si se requiere una estabilidad estricta en los trabajos, se recomienda no habilitar la aceleración nativa de consultas.
Puede mejorar el rendimiento de Hive mediante uno de los siguientes métodos:
-
Uso de la consola
En la consola, vaya a la página Configure del servicio Hive. Localice el parámetro personalizado hive.jindotable.native.enabled y establezca su valor en true. Guarde la configuración y reinicie el servicio para aplicar el cambio. Este método aplica tanto para Hive on MR como para Hive on Tez.
-
Uso de la CLI
En la CLI, establezca
hive.jindotable.native.enabledentruepara habilitar la aceleración nativa de consultas. Dado que E-MapReduce V3.35.0 y versiones posteriores incluyen el complemento de aceleración de Parquet de JindoTable, puede configurar este parámetro directamente.set hive.jindotable.native.enabled=true;
Actualmente, la aceleración nativa de consultas para Hive no admite la lectura de tipos de datos complejos como Map, Struct o Array.