Apache Spark - RDD
Conjuntos de datos distribuidos resistentes
Los conjuntos de datos distribuidos resistentes (RDD) son una estructura de datos fundamental de Spark. Es una colección distribuida inmutable de objetos. Cada conjunto de datos en RDD se divide en particiones lógicas, que se pueden calcular en diferentes nodos del clúster. Los RDD pueden contener cualquier tipo de objetos Python, Java o Scala, incluidas las clases definidas por el usuario.
Formalmente, un RDD es una colección de registros particionada de solo lectura. Los RDD se pueden crear mediante operaciones deterministas en datos en almacenamiento estable u otros RDD. RDD es una colección de elementos tolerantes a fallas que se pueden operar en paralelo.
Hay dos formas de crear RDD: parallelizing una colección existente en su programa de conductor, o referencing a dataset en un sistema de almacenamiento externo, como un sistema de archivos compartidos, HDFS, HBase o cualquier fuente de datos que ofrezca un formato de entrada Hadoop.
Spark hace uso del concepto de RDD para lograr operaciones MapReduce más rápidas y eficientes. Primero, analicemos cómo se llevan a cabo las operaciones de MapReduce y por qué no son tan eficientes.
El intercambio de datos es lento en MapReduce
MapReduce se adopta ampliamente para procesar y generar grandes conjuntos de datos con un algoritmo distribuido paralelo en un clúster. Permite a los usuarios escribir cálculos en paralelo, utilizando un conjunto de operadores de alto nivel, sin tener que preocuparse por la distribución del trabajo y la tolerancia a fallas.
Desafortunadamente, en la mayoría de los marcos actuales, la única forma de reutilizar datos entre cálculos (Ex - entre dos trabajos de MapReduce) es escribirlos en un sistema de almacenamiento estable externo (Ex - HDFS). Aunque este marco proporciona numerosas abstracciones para acceder a los recursos computacionales de un clúster, los usuarios aún quieren más.
Ambos Iterative y Interactivelas aplicaciones requieren un intercambio de datos más rápido en trabajos paralelos. El intercambio de datos es lento en MapReduce debido areplication, serializationy disk IO. En cuanto al sistema de almacenamiento, la mayoría de las aplicaciones de Hadoop pasan más del 90% del tiempo realizando operaciones de lectura y escritura HDFS.
Operaciones iterativas en MapReduce
Reutilice resultados intermedios en varios cálculos en aplicaciones de varias etapas. La siguiente ilustración explica cómo funciona el marco actual, mientras se realizan las operaciones iterativas en MapReduce. Esto genera gastos generales sustanciales debido a la replicación de datos, E / S de disco y serialización, lo que hace que el sistema sea lento.
Operaciones interactivas en MapReduce
El usuario ejecuta consultas ad-hoc en el mismo subconjunto de datos. Cada consulta realizará la E / S del disco en el almacenamiento estable, lo que puede dominar el tiempo de ejecución de la aplicación.
La siguiente ilustración explica cómo funciona el marco actual al realizar las consultas interactivas en MapReduce.
Uso compartido de datos con Spark RDD
El intercambio de datos es lento en MapReduce debido a replication, serializationy disk IO. La mayoría de las aplicaciones de Hadoop pasan más del 90% del tiempo realizando operaciones de lectura y escritura HDFS.
Al reconocer este problema, los investigadores desarrollaron un marco especializado llamado Apache Spark. La idea clave de la chispa esResiliente Datribuido Datasets (RDD); admite el cálculo de procesamiento en memoria. Esto significa que almacena el estado de la memoria como un objeto en los trabajos y el objeto se puede compartir entre esos trabajos. El intercambio de datos en la memoria es de 10 a 100 veces más rápido que la red y el disco.
Intentemos ahora descubrir cómo se llevan a cabo las operaciones iterativas e interactivas en Spark RDD.
Operaciones iterativas en Spark RDD
La ilustración que se muestra a continuación muestra las operaciones iterativas en Spark RDD. Almacenará los resultados intermedios en una memoria distribuida en lugar de almacenamiento estable (disco) y hará que el sistema sea más rápido.
Note - Si la memoria distribuida (RAM) no es suficiente para almacenar resultados intermedios (estado del trabajo), entonces almacenará esos resultados en el disco.
Operaciones interactivas en Spark RDD
Esta ilustración muestra operaciones interactivas en Spark RDD. Si se ejecutan diferentes consultas en el mismo conjunto de datos repetidamente, estos datos en particular se pueden mantener en la memoria para mejorar los tiempos de ejecución.
De forma predeterminada, cada RDD transformado se puede volver a calcular cada vez que ejecuta una acción en él. Sin embargo, también puedepersistun RDD en la memoria, en cuyo caso Spark mantendrá los elementos en el clúster para un acceso mucho más rápido, la próxima vez que lo consulte. También es compatible con RDD persistentes en disco o replicados en varios nodos.