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