chispa caracteristicas tecnicas

1. ¿Qué es Hadoop?, ¿Cuál es la diferencia entre Hadoop y Spark?

¿Qué es Hadoop?

  • Hadoop es un marco de código abierto que puede escribir y ejecutar aplicaciones distribuidas para procesar datos a gran escala. Está diseñado para el análisis de datos fuera de línea y a gran escala . No es adecuado para el modo de procesamiento de transacciones en línea de lectura y escritura aleatoria de varios registros. . Hadoop=HDFS (sistema de archivos, relacionado con la tecnología de almacenamiento de datos) + Mapreduce (procesamiento de datos) , la fuente de datos de Hadoop puede tener cualquier forma y tiene un mejor rendimiento en comparación con la base de datos relacional en el procesamiento de datos semiestructurados y no estructurados, con Capacidades de procesamiento más flexibles, independientemente de cualquier forma de datos que eventualmente se convierta en clave/valor, clave/valor es la unidad básica de datos . Use programación funcional Mapreduce en lugar de SQL . SQL es una declaración de consulta, mientras que Mapreduce usa scripts y códigos. Para bases de datos relacionales, Hadoop, que se usa para SQL, puede ser reemplazado por la herramienta de código abierto.

  • Spark es una solución informática distribuida.

La diferencia entre Hadoop y Spark

1. Diferentes niveles de resolución de problemas

  • Hadoop es esencialmente una infraestructura de datos distribuidos, que distribuye grandes conjuntos de datos a múltiples nodos en un clúster compuesto por computadoras ordinarias para el almacenamiento; al mismo tiempo, Hadoop también puede hacer computación fuera de línea

  • Spark es una herramienta especialmente diseñada para procesar big data que se almacena de forma distribuida, no almacena datos distribuidos.

2. La velocidad de procesamiento de datos de Spark supera a MapReduce en segundos

  • El mapreduce de Hadoop necesita operar una gran cantidad de E/S de disco. MapReduce procesa los datos paso a paso: "Lee los datos del clúster, realiza un procesamiento, escribe el resultado en el clúster, lee los datos actualizados del clúster y realiza el siguiente procesamiento , escribir resultados en el clúster , etc..."

  • Spark, que realiza todos los análisis de datos en la memoria casi en "tiempo real": "Lee los datos del clúster, realiza todo el procesamiento analítico necesario, vuelve a escribir los resultados en el clúster y listo".

3. Recuperación ante desastres

  • Hadoop escribe cada dato procesado en el disco, por lo que es intrínsecamente resistente a los errores del sistema.

  • Los objetos de datos de Spark se almacenan en lo que se denomina un conjunto de datos distribuido resistente (RDD: conjunto de datos distribuido resistente) distribuido en el clúster de datos . "Estos objetos de datos se pueden colocar en la memoria o en el disco, por lo que RDD también puede proporcionar funciones completas de recuperación ante desastres".

3. Procesamiento de datos

  • Hadoop es adecuado para procesar datos estáticos, pero tiene una capacidad de procesamiento deficiente para datos de transmisión iterativos;

  • Spark mejora el rendimiento del procesamiento de datos de transmisión y datos iterativos al almacenar en caché los datos procesados ​​en la memoria;

4. Resultados intermedios

  • Los resultados intermedios en Hadoop se almacenan en HDFS, y cada MR debe escribirse y llamarse;

  • Los resultados intermedios de Spark se almacenan primero en la memoria y, si la memoria no es suficiente, se almacenan en el disco en lugar de HDFS, lo que evita una gran cantidad de operaciones de IO, flasheo y lectura.

2. Chispa características técnicas e ideas arquitectónicas.

1. Spark tiene cuatro características técnicas

Simple (simple), Rápido (rápido), Escalable (¿escalable?), Unificado (unificado, universal)

Aquí hay un complemento del motivo de la generación de chispa, basado en los defectos de MRv1 y MRv2, a través de cinco aspectos de optimización, se forma el motor de computación chispa, que es la base de estas cuatro características.

(1) Defectos de MRv1: Ya en la versión Hadoop1.x, se adoptó el modelo de programación MapReduce de la versión MRv1 en ese momento. MRv1 incluye tres partes: entorno de tiempo de ejecución (JobTracker y TaskTracker), modelo de programación (MapReduce), motor de procesamiento de datos (MapTask y ReduceTask). Tiene las siguientes deficiencias: ① Escalabilidad deficiente. JobTracker es responsable tanto de la administración de recursos como de la programación de tareas. Cuando el clúster está ocupado, JobTracker puede convertirse fácilmente en un cuello de botella. ② Disponibilidad deficiente. Cuando el clúster está ocupado, JobTracker puede convertirse fácilmente en un cuello de botella. ③ Baja utilización de recursos TaskTracker Use "slot" para dividir equitativamente la cantidad de recursos en este nodo ④ La utilización de recursos es baja

(2) Defectos de MRv2: En MRv2, el modelo de programación y el motor de procesamiento de datos en MRv1 se reutilizan. Pero el entorno de tiempo de ejecución fue refactorizado. Hay deficiencias: la E/S del disco se convierte en el cuello de botella del rendimiento del sistema, por lo que solo es adecuado para el procesamiento de datos sin conexión o el procesamiento por lotes, pero no puede admitir el procesamiento de datos iterativo, interactivo y de transmisión.

(3) Spark nació y se optimizó a partir de cinco aspectos: ①Reducir la E/S del disco; ②Aumentar el paralelismo; ③Evitar el recálculo; ④Mezcla y clasificación opcionales; ⑤Estrategia de administración de memoria flexible

2. Características clave

①Datos por lotes/transmisión (datos por lotes/transmisión)

Unifica el procesamiento de tus datos en lotes y streaming en tiempo real, utilizando tu lenguaje preferido: Python, SQL, Scala, Java o R.

Procesamiento unificado de datos por lotes y transmisión de datos en tiempo real, utilizando su lenguaje favorito: Python, SQL, Scala, Java o R.

②Análisis SQL (análisis SQL)

Ejecute consultas ANSI SQL rápidas y distribuidas para paneles e informes ad-hoc. Se ejecuta más rápido que la mayoría de los almacenes de datos.

Ejecute consultas ANSI SQL rápidas y distribuidas para paneles e informes ad-hoc. Se ejecuta más rápido que la mayoría de los almacenes de datos.

③Ciencia de datos a escala (ciencia de datos a gran escala)

Realice análisis de datos exploratorios (EDA) en datos a escala de petabytes sin tener que recurrir a la reducción de muestreo

Realice análisis de datos exploratorios (EDA) en petabytes de datos sin emplear técnicas de reducción de dimensionalidad

④Aprendizaje automático (aprendizaje automático)

Entrene algoritmos de aprendizaje automático en una computadora portátil y use el mismo código para escalar a clústeres tolerantes a fallas de miles de máquinas.

Entrene algoritmos de aprendizaje automático en una computadora portátil y escale a clústeres tolerantes a fallas de miles de máquinas que usan el mismo código.

3. La arquitectura técnica de chispa

Spark es un motor informático basado en el sistema de archivos distribuido Hadoop HDFS. Los módulos principales del marco son:

Spark Core: contiene las funciones básicas de Spark, incluidos módulos como la programación de tareas, la gestión de la memoria, la recuperación de errores y la interacción del sistema de almacenamiento, así como la definición de la API para RDD de conjuntos de datos distribuidos elásticos.

Spark SQL: es un paquete para operar datos estructurados, a través de Spark SQL, SQL o HQL se puede utilizar para consultar varias fuentes de datos, como tablas Hive, Parquet y JSON.

Spark Streaming: es un componente para la transmisión informática de datos en tiempo real, lo que permite que los programas procesen datos en tiempo real como los RDD ordinarios.

Spark MLlib: es una biblioteca de funciones de aprendizaje automático, que incluye operaciones como clasificación, regresión, agrupación y filtrado colaborativo. También proporciona funciones de soporte adicionales, como evaluación de modelos e importación de datos.

GraphX: una colección de algoritmos y herramientas para controlar gráficos, operaciones de gráficos paralelos y computación. GraphX ​​amplía la API de RDD para incluir operaciones para manipular gráficos, crear subgráficos y acceder a todos los vértices a lo largo de una ruta.

4. El mecanismo de trabajo de la chispa.

El proceso de ejecución de Spark es el siguiente:

1. Cuando se envía una aplicación al clúster de Spark, se creará un proceso de controlador. El controlador inicializa el entorno de tiempo de ejecución de la aplicación, inicia SparkContext y construye DAGScheduler y TaskScheduler;

2. SparkContext registra y se aplica al administrador de recursos (Independiente, Mesos o Yarn) para los recursos del Ejecutor ejecutados por la Aplicación, y el Ejecutor inicia StandaloneExecutorbackend, se registra con SparkContext y se aplica a las tareas de la Tarea;

3. El controlador ejecuta la aplicación, lee la fuente de datos y genera un RDD a partir de los datos que se van a procesar.Cada vez que se ejecuta una acción, se crea un trabajo y se envía al DAGScheduler;

4. DAGScheduler dividirá varias etapas para cada trabajo. Cada etapa determina la cantidad de tareas de acuerdo con la partición del RDD. Luego, cada etapa crea un TaskSet y envía el TaskSet al TaskScheduler. TaskScheduler enviará la tarea en cada TaskSet a Executor para su ejecución;

5. Cada vez que el Ejecutor acepte una Tarea, se encapsulará con un TaskRunner y se obtendrá un hilo del grupo de hilos para su ejecución.Después de ejecutar la ResultTask de la última Etapa, se liberarán todos los recursos.

5. Diferentes modos de despliegue de chispa.

Cuando Spark se implementa en un clúster distribuido, puede confiar en un marco de programación de recursos externo (Mesos, yarn o EC2) o utilizar el marco de programación de recursos integrado. De acuerdo con diferentes programadores de recursos, los tres modos de implementación principales son:

El modo independiente es un modo de administración de clústeres con su propio marco de programación de recursos, es decir, el modo independiente. Standalone es el modo más simple y fácil de implementar sin depender de ningún otro sistema de administración de recursos. Sus nodos principales son el nodo controlador, el nodo maestro y el nodo trabajador.

El modo Spark on YARN es un modo que se ejecuta en el marco Hadoop YARN El uso de YARN para proporcionar una gestión y programación de recursos unificados para aplicaciones de capa superior se ha convertido en el estándar para los sistemas de gestión de recursos de clústeres de big data. Actualmente, solo se admite el modo de granularidad gruesa. Los recursos del contenedor en YARN no se pueden escalar dinámicamente. Una vez que se inicia el contenedor, los recursos disponibles no cambiarán.

El modo Spark on Mesos es un modo que se ejecuta en el marco Apache Mesos y es el modo recomendado oficialmente. Apache Mesos es un marco de administración de recursos distribuidos más poderoso que es responsable de la asignación de recursos de clúster. Spark que se ejecuta en Mesos es más flexible que ejecutar en YARN. No solo admite el modo de granularidad gruesa, sino que también proporciona un modo de programación de granularidad fina para darse cuenta de la utilización de los recursos Asignar según sea necesario.

6. Iluminación de la tecnología de chispa

Una de las características más distintivas del proyecto Spark es que utiliza una idea en capas. No intenta completarlas todas. Todavía usa HDFS para el almacenamiento. En su lugar, extrae y mejora la capa de cálculo por separado y luego usa RDD. Para completar el proceso de almacenar y llamar, un punto importante de esta idea es dividir adecuadamente el proceso y realizar un procesamiento jerárquico.Cada proyecto se enfoca en resolver un problema.

6. Arquitectura básica de Spark

Desde la perspectiva de la implementación del clúster, un clúster de Spark consta de las siguientes partes:

  • Cluster Manager

  • Obrero

  • Ejecutor

  • Conductor

  • Solicitud

Cluster Manager

  • El administrador del clúster es el principal responsable de la asignación y gestión de todos los recursos del clúster;

  • Los recursos asignados por el Administrador de clústeres pertenecen a la asignación de primer nivel, que asigna la memoria y la CPU de cada trabajador a la aplicación, pero no es responsable de la asignación de los recursos del ejecutor.

  • ResourceManager en modo de implementación YARN

Obrero

  • Nodos de trabajo, reemplazados por NodeManager en el modo de implementación YARN;

  • Responsable de las siguientes tareas:

    • Informar a ClusterManger de su memoria, CPU y otros recursos a través del mecanismo de registro

    • Crear ejecutores

    • Además, asigne recursos y tareas a los ejecutores.

    • Sincronice la información de recursos y la información de estado del Ejecutor con el Administrador de clústeres

Ejecutor

  • Componentes de primera línea que realizan tareas

  • Responsable principal de:

    • ejecución de tareas

    • Sincronización con información de Trabajador y Conductor

Conductor

  • Controlador de la aplicación, la aplicación se comunica con el administrador de clústeres y el ejecutor a través del controlador;

  • El Controlador puede ejecutarse en la Aplicación, o la Aplicación puede enviarlo al Administrador de clústeres y el Administrador de clústeres organiza al Trabajador para que lo ejecute;

3. ¿Cuáles son los mecanismos centrales de Spark?

1, RDD

1.1 Descripción general de los DDR

  • RDD es la piedra angular de Spark y la abstracción central para el procesamiento de datos de Spark . Entonces, ¿por qué se genera RDD?

  • Este método de MapReduce no es muy eficiente para dos operaciones comunes en el campo de datos. El primero es un algoritmo iterativo. Por ejemplo, ALS en aprendizaje automático, descenso de gradiente de optimización convexa, etc. Todos estos requieren consultas repetidas y operaciones repetidas basadas en conjuntos de datos o datos derivados de conjuntos de datos. Este modelo de MapReduce no es adecuado Incluso si se procesan varios procesos de MapReduce en serie, el rendimiento y el tiempo siguen siendo un problema. El intercambio de datos depende de los discos. El otro es la minería de datos interactiva, en la que MapReduce obviamente no es bueno.

  • Necesitamos un modelo muy rápido que pueda admitir la computación iterativa y el intercambio efectivo de datos, y Spark nació. RDD es un modelo de trabajo basado en conjuntos de trabajo, más orientado al flujo de trabajo.

  • Pero tanto MapReduce como RDD deberían tener características como reconocimiento de ubicación, tolerancia a fallas y equilibrio de carga .

1.2 ¿Qué es RDD?

  • RDD (Resilient Distributed Dataset) se denomina conjunto de datos distribuidos, que es la abstracción de datos más básica en Spark . Representa una colección inmutable y particionable cuyos elementos se pueden calcular en paralelo .

  • En Spark, todas las operaciones sobre datos no son más que crear RDD, convertir RDD existentes y llamar a operaciones de RDD para su evaluación .

Puede entenderse desde tres aspectos:

  • Conjunto de datos de solo lectura Conjunto de datos: RDD es de solo lectura. Si desea cambiar los datos en RDD, solo puede crear un nuevo RDD basado en el RDD existente.

  • Distribuido Distribuido/Partición: los datos de RDD pueden almacenarse físicamente en el disco o en la memoria de varios nodos, lo que se conoce como almacenamiento de varios niveles.

  • Resiliente: Aunque los datos almacenados en RDD son de solo lectura, podemos modificar el número de particiones.

La elasticidad del RDD de Spark:

  • Elasticidad de almacenamiento: cambio automático entre memoria y disco

  • Resiliencia tolerante a fallas: la pérdida de datos se puede recuperar automáticamente

  • Elasticidad informática: mecanismo de reintento de error de cálculo

  • Resiliencia de fragmentos: volver a fragmentar según sea necesario

Dependencias entre RDD: en función de las dependencias entre RDD, los RDD formarán un DAG de gráfico acíclico dirigido, que describe todo el proceso de computación de flujo. la partición se puede reconstruir a través de la relación de sangre,

Linaje: los RDD solo admiten transformaciones de grano grueso, es decir, una sola operación realizada en una gran cantidad de registros. Grabe una serie de Linajes (es decir, linajes) que crean RDD para recuperar particiones perdidas. El linaje de RDD registrará la información de metadatos y el comportamiento de conversión de RDD. Cuando se pierden algunos datos de partición de RDD, puede volver a calcular y restaurar la partición de datos perdidos en función de esta información.

Generación de DAG: DAG (Gráfico acíclico dirigido) se denomina gráfico acíclico dirigido. El RDD original forma un DAG a través de una serie de transformaciones. El DAG se divide en diferentes etapas según las diferentes dependencias entre los RDD.

1.3 Caché RDD

Una de las razones por las que Spark es tan rápido es la capacidad de conservar o almacenar en caché conjuntos de datos en la memoria entre operaciones. Después de persistir un determinado RDD, cada nodo guardará los resultados de fragmentación calculados en la memoria y los reutilizará en otras acciones realizadas en este RDD o RDD derivados. Esto hace que las acciones posteriores sean mucho más rápidas. La persistencia y el almacenamiento en caché relacionados con RDD son una de las características más importantes de Spark. Se puede decir que el almacenamiento en caché es la clave para que Spark construya algoritmos iterativos y consultas interactivas rápidas.

Control

  • Además de la operación de persistencia, Spark también proporciona un mecanismo de punto de control para el almacenamiento de datos. Los puntos de control (esencialmente escribir RDD en el disco para puntos de control) son para asistencia tolerante a fallas a través del linaje. El linaje es demasiado largo. Hará que el costo de la tolerancia a fallas sea demasiado alto, por lo que es mejor hacer la tolerancia a fallas del punto de control en la etapa intermedia. Si hay un problema de nodo más tarde y la partición se pierde, comenzar desde el RDD del punto de control para rehacer el linaje reducirá la sobrecarga. Checkpoint implementa la función de punto de control de RDD al escribir datos en el sistema de archivos HDFS.

  • Hay una diferencia significativa entre el caché y el punto de control. El caché calcula el RDD y lo coloca en la memoria , pero la cadena de dependencia del RDD (equivalente al registro de rehacer en la base de datos) no se puede perder. Cuando un determinado ejecutor falla en un determinado punto, el anterior El RDD del caché se perderá, lo que debe calcularse reproduciendo la cadena de dependencia. La diferencia es que el punto de control guarda el RDD en HDFS , que es un almacenamiento confiable de copias múltiples, por lo que la cadena de dependencia puede ser se pierde, y la cadena de dependencia se corta.Se logra una alta tolerancia a fallas a través de la replicación.

2, reproducción aleatoria

Barajar, traducido al chino es barajar. La razón por la que se necesita Shuffle es porque un tipo de datos con ciertas características comunes deben agregarse a un nodo informático para el cálculo. Estos datos se distribuyen en varios nodos de almacenamiento y son procesados ​​por unidades informáticas de diferentes nodos.

2.1.Gestor aleatorio

Descripción general del desarrollo:

  • Antes de Spark 1.2, el motor de cálculo aleatorio predeterminado era HashShuffleManager. ShuffleManager y HashShuffleManager tienen una desventaja muy seria, es decir, se generará una gran cantidad de archivos de disco intermedios y el rendimiento se verá afectado por una gran cantidad de operaciones de E/S de disco.

  • Por lo tanto, en las versiones posteriores a Spark 1.2, el ShuffleManager predeterminado se cambió a SortShuffleManager. Comparado con HashShuffleManager, SortShuffleManager tiene algunas mejoras. La razón principal es que aunque cada Tarea generará más archivos de disco temporales durante la operación aleatoria, todos los archivos temporales se combinarán en un archivo de disco al final, por lo que cada Tarea tiene solo un archivo de disco. Cuando la tarea de lectura aleatoria de la siguiente etapa extrae sus propios datos, solo necesita leer parte de los datos en cada archivo de disco de acuerdo con el índice.

El principio de funcionamiento de HashShuffleManager:

HashShuffleManager no optimizado:

  • La etapa de escritura aleatoria es principalmente para "clasificar" los datos procesados ​​por cada tarea de acuerdo con la clave para que la siguiente etapa ejecute el operador aleatorio (como reduceByKey) después de completar el cálculo de una etapa. La llamada "clasificación" consiste en ejecutar el algoritmo hash en la misma clave, de modo que la misma clave se escriba en el mismo archivo de disco , y cada archivo de disco pertenezca a una sola tarea de la etapa posterior . Antes de escribir los datos en el disco, los datos se escribirán primero en el búfer de memoria y, cuando el búfer de memoria esté lleno, se desbordará en el archivo del disco. La cantidad de archivos de disco generados por operaciones de escritura aleatoria no optimizadas es extremadamente asombrosa.

  • El proceso de extracción de la lectura aleatoria consiste en agregar mientras se extrae. Cada tarea de lectura aleatoria tendrá su propio búfer de búfer, y cada vez solo puede extraer datos del mismo tamaño que el búfer de búfer y luego realizar la agregación y otras operaciones a través de un mapa en la memoria.

HashShuffleManager optimizado:

  • Una vez habilitado el mecanismo de consolidación, durante el proceso de escritura aleatoria, la tarea no crea un archivo de disco para cada tarea de la etapa descendente. En este momento, aparecerá el concepto de shuffleFileGroup. Cada shuffleFileGroup corresponderá a un lote de archivos de disco. La cantidad de archivos de disco es la misma que la cantidad de tareas en la etapa posterior. Cuantos núcleos de CPU hay en un Ejecutor, cuántas tareas se pueden ejecutar en paralelo. Cada tarea ejecutada en paralelo en el primer lote creará un shuffleFileGroup y escribirá los datos en el archivo de disco correspondiente.

  • Cuando el núcleo de la CPU del Ejecutor ejecuta un lote de tareas y luego ejecuta el siguiente lote de tareas, el siguiente lote de tareas reutilizará el shuffleFileGroup previamente existente, incluidos los archivos de disco que contiene. Es decir, en este momento, la tarea escribirá los datos en el archivo de disco existente, pero no en el nuevo archivo de disco. Por lo tanto, el mecanismo de consolidación permite que diferentes tareas reutilicen el mismo lote de archivos de disco, de modo que los archivos de disco de varias tareas se puedan fusionar efectivamente hasta cierto punto, lo que reduce en gran medida la cantidad de archivos de disco y mejora el rendimiento de shufflewrite.

SortShuffleManager ejecuta:

  • El modo de orden aleatorio basado en clasificación es: cada tarea de mapa aleatorio no generará un archivo separado para cada reductor, sino que escribirá todos los resultados en un archivo y generará un archivo de índice al mismo tiempo.

Cuatro Resumen

La tecnología Spark es un marco muy destacado en el campo distribuido. Además de los patrones de diseño a nivel de código, también puede aprender de las ideas a nivel de arquitectura. Ya sea dividiendo el poder de cómputo o usando RDD para abstraer conceptos de datos, todo refleja un punto Cuando Cuando la complejidad de un campo alcanza un cierto nivel, es una buena práctica resolver problemas muy complejos subdividiendo el flujo de trabajo según la importancia y la necesidad y diseñando nuevos conceptos lógicos.

contenido de referencia

1. Enlace de libro breve: arquitectura técnica de chispa, mecanismo de trabajo e instalación y uso - libro breve

2. Spark官网: Apache Spark™: motor unificado para análisis de datos a gran escala

3. Explicación detallada de shuffle: Explicación detallada de Spark Shuffle

Supongo que te gusta

Origin blog.csdn.net/qq_22059611/article/details/128218216
Recomendado
Clasificación