Hola, me llamo Miguel y hoy les traigo otro tutorial.
Índice
Cómo admitir consultas ad hoc
en datos de Hadoop
Los almacenes de datos construidos sobre Spark y los almacenes de columnas a menudo no realizan consultas ad hoc
, rangos o incluso se unen bien debido a su naturaleza orientada a OLAP.
Hiperespacio de Microsoft, un subsistema de indexación construido sobre Apache Spark, le permite crear Ãndices para admitir consultas ad hoc
como una base de datos tradicional.
¿Qué es el hiperespacio?
El hiperespacio es un conjunto simple de API en el modelo de programación Spark que le permite crear y administrar fácilmente Ãndices en su DataFrame.
Inyecta su ejecución más rápida en el plan de ejecución original de Spark para aprovechar al máximo el aumento de rendimiento proporcionado por los Ãndices.
Su relación con Spark se puede ilustrar asÃ:
Hagamos una demostración
Al momento de escribir estas lÃneas, Hyperspace es compatible con Apache Spark 2.4, con las versiones de Scala de 2.11 y 2.12. En esta demostración, usaré Spark 2.4.6
, con la versión Scala de 2.11.12
(Java 1.8.0_222
).
Porque Hyperspace no está realmente listo para producción todavÃa y ahora solo es compatible con la creación de Ãndices basados ​​en HDFS.
Por lo tanto, cuando lo ejecutamos en un entorno local, HDFS se ejecuta en localhost:9000
es necesario para que Hyperspace pueda funcionar correctamente.
1.1 Descarga y ejecuta un HDFS local
Ir al Hadoop oficial página de descarga y descarga Hadoop
2.9.2
. Extraiga el tarball en su ubicación preferida. Editar archivo $HADOOP_HOME/etc/hadoop/hdfs-site.xml
y haz que se vea asÃ:
Entonces en el directorio $HADOOP_HOME/bin
, ejecute:
./hdfs namenode -format
para formatear su HDFS por primera vez antes de usarlo.
Ir al directorio $HADOOP_HOME/sbin
 y ejecutar start-dfs.sh
. Cuando se le soliciten preguntas sobre SSH, asegúrese de tener todos los permisos y claves SSH configurados para permitir que Hadoop acceda a SSH en su máquina local para actuar como un HDFS pseudodistribuido.
Como resultado, deberÃa haber tres procesos Java ejecutándose para actuar como NameNode
, DataNode
y SecondaryNameNode
respectivamente.
¡Ya ha configurado su HDFS local!
1.2 Crear un archivo de muestra CSV
Crea un archivo CSV como este:
y colóquelo en su HDFS local ejecutando:
$HADOOP_HOME/bin/hdfs dfs -put /path/to/csv/file.csv /hyperspace_test
dónde /hyperspace_test
es el directorio de destino en HDFS.
2.1 Inicie su carcasa Spark
Para incluir Hyperspace como dependencia, ejecute:
$SPARK_HOME/bin/spark-shell \ --packages=com.microsoft.hyperspace:hyperspace-core_2.11:0.1.0
Elija diferentes versiones y paquetes si está ejecutando una versión de Scala diferente (2.11
o 2.12
).
2.2 Cargar datos y crear un Ãndice
Para cargar datos, ejecute:
Importar hiperespacio en el shell de Spark:
A continuación, queremos crear un Ãndice en la columna. id
, que incluye una columna de datos llamada name
, de manera que la columna name
 se puede recuperar rápidamente utilizando el id
:
Esto creará un Ãndice en la columna. id
y mostrar información de Ãndice como esta:
A continuación, aprovechemos el Ãndice que acabamos de crear y veamos cómo puede cambiar su plan de ejecución y mejorar el rendimiento. Escriba la consulta como lo harÃa normalmente:
val query = df.filter(df("id") === 1).select("name")
Utilice Hyperspace para explicar cómo se interpretará esta consulta:
hs.explain(query, verbose = true)
Generará resultados como:
Puede ver claramente que con Hyperspace, FileScan
leerá el Ãndice archivo Parquet en lugar del archivo CSV original de HDFS.
Aunque este pequeño ejemplo no es lo suficientemente complejo como para mostrar la gran ventaja de él, es obvio que crear un Ãndice a partir del archivo CSV original y guardarlo en un archivo Parquet ordenado y gestionado basado en el id
la columna será omitir la fase de reproducción aleatoria y, por lo tanto, aumentar el rendimiento de forma espectacular.
Finalmente, habilitemos Hyperspace y ejecutemos la consulta:
Corramos query.explain()
para ver qué se ejecuta bajo el capó:
El plan fÃsico es reconfigurado por Hyperspace. Durante la ejecución del plan fÃsico, el Ãndice creado se analiza en su lugar. En comparación con el CSV original, el archivo de Ãndice de parquet está preordenado por columna id
por Hyperspace.
Por lo tanto, consulta de búsqueda como WHERE id = 123
es más rápido durante la ejecución presionando el Ãndice directamente.
Además de esta funcionalidad de API central, Hyperspace también incluye API de administración de Ãndices como:
Cuando usar el hiperespacio
Si tiene consultas frecuentes que:
- Busque un valor especÃfico (
WHERE col = 'abcd'
). - LÃmite los datos a un rango muy pequeño (
WHERE num > 4 AND num < 7
). - O une dos tablas en una columna común (
JOIN table2 ON table1.value = table2.value
).
Entonces definitivamente puede crear Ãndices sobre esas columnas necesarias para acelerar sus consultas.
TodavÃa está en desarrollo, asà que por favor úsalo con precaución en su implementación de producción.
Gracias por leer este tutorial
Añadir comentario