SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle

SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle

Memoria de datos de gran tamaño anterior, memoria histórica de datos de gran tamaño
, como la imagen a continuación, consulte https://www.iteblog.com/archives/1964.html, o haga clic a continuación para leer el original .
Spark Shuffle se basa
en el marco MapReduce. Shuffle es un puente entre Map y Reduce. Reduce debe pasar por Shuffle para leer la salida de Map; y los procesos de Reducir y Map generalmente no están en el mismo nodo, lo que significa que la etapa Shuffle generalmente necesita para leer y escribir operaciones en la red y algunos discos, por lo que el rendimiento de Shuffle afecta directamente el rendimiento y el rendimiento de todo el programa.

Al igual que el marco informático MapReduce, los trabajos de Spark también tienen etapas Shuffle, que generalmente se dividen en etapas por Shuffle; y la interacción de datos entre etapas requiere que Shuffle se complete. El diagrama de proceso completo es el siguiente:

SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle
Si desea obtener información sobre Spark, Hadoop o artículos relacionados con Hbase a tiempo, preste atención a la cuenta pública de WeChat: iteblog_hadoop
De la breve introducción anterior, se pueden extraer las siguientes conclusiones:

  • Independientemente de si se trata de un trabajo MapReduce o Spark, la operación Shuffle consume recursos. Los recursos aquí incluyen: CPU, RAM, disco y red;
  • Necesitamos evitar las operaciones de Shuffle tanto como sea posible.
    En la actualidad, la última incorporación de Spark solo admite una implementación de Shuffle: org.apache.spark.shuffle.sort.SortShuffleManager, que se configura a través del parámetro spark.shuffle.manager. Esta es la implementación estándar de Spark Shuffle y su implementación interna se basa en el marco de Netty. Este artículo no pretende introducir en detalle cómo se implementa Shuffle en Spark. Aquí quiero presentar las mejoras de la comunidad a Shuffle.

Tecnología RDMA

Antes de continuar con la siguiente introducción, primero comprendamos algunos conocimientos básicos.

La transmisión de datos de TCP Socket tradicional requiere muchos pasos: los datos se copian primero desde la aplicación de origen al búfer de Sockets del host actual, luego se copian en el controlador de protocolo de transporte, luego en el controlador de NIC y, finalmente, la NIC envía los datos al host de destino a través de la red. NIC, el host de destino transfiere datos a la aplicación a través de los pasos anteriores. Todo el proceso es el siguiente:
SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle
Si desea obtener información sobre Spark, Hadoop o artículos relacionados con Hbase a tiempo, preste atención a los Cuenta pública de WeChat: iteblog_hadoop
Como se puede ver en la imagen de arriba, la transmisión de datos de la red ¡Una gran parte del tiempo se dedica a la copia de datos! Si los datos que se van a transferir son grandes, es probable que el tiempo empleado en esta etapa represente una gran parte del tiempo de ejecución de todo el trabajo. Entonces, ¿hay alguna manera de guardar directamente la copia de datos de diferentes capas, de modo que el host de destino pueda obtener datos directamente de la memoria del host de origen? Realmente, ¡esto es tecnología RDMA!

El nombre completo de la tecnología RDMA (Remote Direct Memory Access) es acceso remoto directo a la memoria, es una tecnología de acceso directo a la memoria que transfiere datos directamente desde la memoria de una computadora a otra sin la intervención de los sistemas operativos de ambas partes. Esto permite una comunicación de red de alto rendimiento y baja latencia, y es especialmente adecuado para su uso en clústeres de computadoras masivamente paralelos (este párrafo está extraído de Wikipedia-Remote Direct Memory Access). RDMA tiene las siguientes características:

  • Copia cero
  • Interfaz de hardware directa, sin pasar por el kernel y TCP / IP IO
  • Retraso de sub-microsegundos
  • El control de flujo y la confiabilidad se descargan en el hardware,
    por lo que la transmisión de datos mediante tecnología RDMA se ve así:

SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle
Si desea obtener información sobre los artículos relacionados con Spark, Hadoop o Hbase a tiempo, preste atención a la cuenta pública de WeChat: iteblog_hadoop
Se puede ver en lo anterior que después de usar la tecnología RDMA, aunque el host de origen y el host de destino están al otro lado la red, el intercambio de datos entre ellos se obtiene directamente de la memoria de la otra parte, lo que obviamente acelera todo el proceso de cálculo.

SparkRDMA

Ok, ahora que hemos adquirido los conocimientos básicos, ingresamos formalmente al tema de este artículo. SparkRDMA ShuffleManager (dirección de GitHub: https://github.com/Mellanox/SparkRDMA) , desarrollado y de código abierto por Mellanox Technologies, utiliza tecnología RDMA, por lo que los trabajos de Spark usan RDMA en lugar de TCP estándar cuando se mezclan datos. Lo siguiente se presenta en la Wiki oficial de SparkRDMA:


SparkRDMA is a high-performance, scalable and efficient ShuffleManager plugin for Apache Spark. It utilizes RDMA (Remote Direct Memory Access) technology to reduce CPU cycles needed for Shuffle data transfers. It reduces memory usage by reusing memory for transfers instead of copying data multiple times down the traditional TCP-stack.

Se puede ver que SparkRDMA extiende la interfaz ShuffleManager de Spark y usa tecnología RDMA. Los resultados de la prueba muestran que Shuffle data usando RDMA es 2,18 veces más rápido que el método estándar.

SparkRDMA: utilice la tecnología RDMA para mejorar el rendimiento de Spark Shuffle
Si desea obtener información sobre Spark, Hadoop o artículos relacionados con Hbase a tiempo, siga la cuenta pública de WeChat: iteblog_hadoop
Los desarrolladores de SparkRDMA han enviado un problema a la comunidad de Spark: [SPARK-22229] SPIP: RDMA Accelerated Shuffle Engine, diseño detallado documentos: aquí. Sin embargo, a juzgar por la respuesta de la comunidad, al menos no se integrará en el código Spark.

Instalar y usar

Si desea utilizar SparkRDMA, necesitamos Apache Spark 2.0.0 / 2.1.0 / 2.2.0, Java 8 y una red que admita la tecnología RDMA (como RoCE e Infiniband).

SparkRDMA precompila oficialmente los paquetes jar correspondientes para diferentes versiones de Spark, y podemos descargarlos aquí. Después de la descompresión, obtendrá los siguientes cuatro archivos:

  • spark-rdma-1.0-for-spark-2.0.0-jar-with-dependencies.jar
  • spark-rdma-1.0-para-spark-2.1.0-jar-con-dependencias.jar
  • spark-rdma-1.0-for-spark-2.2.0-jar-with-dependencies.jar
  • libdisni.so
    Además libdisni.so archivos en todos los nodos debe estar instalado para clúster de chispa, el otro paquete frasco sólo necesita ser seleccionados de acuerdo con nuestra versión de chispa. Una vez implementados los archivos relevantes, debemos agregar el módulo SparkRDMA al entorno operativo Spark y establecer la siguiente configuración:

spark.driver.extraClassPath   /path/to/SparkRDMA/spark-rdma-1.0-for-spark-2.0.0-jar-with-dependencies.jar
spark.executor.extraClassPath /path/to/SparkRDMA/spark-rdma-1.0-for-spark-2.0.0-jar-with-dependencies.jar

Para habilitar el complemento SparkRDMA Shuffle Manager, también necesitamos modificar el valor de spark.shuffle.manager, simplemente agregue la siguiente cooperación en $ SPARK_HOME / conf / spark-defaults.conf:

spark.shuffle.manager org.apache.spark.shuffle.rdma.RdmaShuffleManager
Otros son los mismos que usar Spark normalmente.

Supongo que te gusta

Origin blog.51cto.com/15127589/2679550
Recomendado
Clasificación