1. Inicie el clúster Spark, que es ejecutar SBIN/Start-All.Sh, iniciar los nodos maestros y múltiples de trabajadores. El maestro se usa principalmente como gestión y monitoreo del clúster, y el nodo de trabajadores es el principal responsable de ejecutar diversas aplicaciones. El nodo maestro debe permitir que el nodo del trabajador informe su propio estado, como la CPU y cuán grande es la memoria. Este proceso se completa a través del mecanismo del corazón
2. Después de que el maestro reciba la información del informe del trabajador, le dará información al trabajador.
3. El controlador envía tareas para desencadenar el clúster [La comunicación entre el conductor y el maestro se realiza a través de Akkaactor, es decir, el maestro es un modelo de actor en el modelo de comunicación asincrónica de Akkaactor, y el controlador es el mismo. El controlador envía asíncronamente información de registro (registreApplication) asincrónicamente al maestro]
4. El nodo maestro estima que la aplicación, 7 g de memoria completa la tarea, asigna las tareas y cada nodo trabajador asigna 3.5 g de memoria para ejecutar las tareas. En el maestro, las tareas en cada trabajador son monitoreadas y programadas en su conjunto.
5. El nodo del trabajador recibe la tarea e inicia la ejecución. Inicia el proceso del ejecutor correspondiente en el nodo del trabajador para ejecutar. Cada ejecutor tiene un concepto de grupo de subprocesos, que contiene múltiples hilos de tareas.
6. El ejecutor eliminará la tarea del grupo de subprocesos para calcular los datos en las operaciones RDDPatition, transformar y las operaciones de acción.
7. El nodo del trabajador informa el estado de cálculo al nodo del controlador
Crear RDDS con colección de paralelización local
clase pública javalocalsumapp {public static void main (string [] args) {sparkconf conf = new SparkConf (). SetAppName ("JavalocalSumapp"); javasparkcontext sc = new javasparkContext (conf); list <ineger> list = arrays.aslist (1,3,4,5,6,7,8); sets <Integer> listrdd = sc.parallize (list); // sum integer sum = listrdd.reduce (new function2 <integer, integer, integer, integer> () {@override public Integer Call (Integer v1, Integer v2) Excepción {return v1+v2;}); System.out.Println (SUMS) La programación funcional en Java requiere configurar el compilador en 1.8listrdd.reduce ((v1, v2) => v1+v2)Operaciones de SparkTransformation and Action
RDD: el conjunto de datos distribuidos elásticos, es una colección que admite múltiples fuentes, tiene un mecanismo tolerante a fallas, se puede almacenar en caché y admite operaciones paralelas. Un RDD representa un conjunto de datos en una partición.
RDD tiene dos operadores operativos:
Transformación: la transformación es un cálculo de retraso. Cuando un RDD se convierte a otro RDD, no se convierte de inmediato. Recuerda las operaciones lógicas del conjunto de datos.
Acción: desencadena el funcionamiento de los trabajos de chispa y realmente desencadena el cálculo del operador de conversión.
El papel del operador de chispa
Esta figura describe que Spark convierte RDD a través de los operadores durante la conversión de ejecución. Los operadores son funciones definidas en RDD, que pueden convertir y operar datos en RDD.
Entrada: Durante el programa Spark en ejecución, los datos se ingresan para Spark desde el espacio de datos externos (como el almacenamiento distribuido: el archivo de texto para leer HDFS, etc., y el método de paralelización ingresa a la recopilación o datos de Scala) y los datos ingresan al espacio de datos de tiempo de ejecución de Spark, lo convierten en bloques de datos en Spark y se administra a través de Blockmanager.
Ejecutar: Después de que la entrada de datos de Spark se ingrese para formar RDD, se puede pasar a través de un operador de transformación, como Filter, etc. Opere los datos y convierta RDD en un nuevo RDD. A través del operador de acción, Spark presenta el trabajo. Si los datos deben ser multiplexados, los datos se pueden almacenar en caché a la memoria a través del operador de caché.
Salida: Los datos después de la ejecución del programa se emitirán para provocar el espacio de tiempo de ejecución y almacenarse en el almacenamiento distribuido (como la salida de SaveStextFile a HDFS), o Datos o recopilación de Scala (recopilación de salida a la recopilación de Scala, Count Devuelve los datos de tipo Scala int)
Transformación y acciones Operación general Descripción general
Transformación
MAP (FUNC): Devuelve un nuevo conjunto de datos distribuido, compuesto por cada elemento original después de ser convertido por función FUNC
Filtro (FUNC): Devuelve un nuevo conjunto de datos, pasada a través de la función FUNC
FlatMap (FUNC): similar al MAP, pero cada elemento de entrada se asignará a 0 a múltiples elementos de salida (por lo que el valor de retorno de la función FUNC es un SEQ, no un solo elemento)
Muestra (con reemplazo, FRAC, semilla): de acuerdo con la semilla aleatoria dada, los datos con una serie de FRAC se muestrean aleatoriamente.
Union (OTRODATASET): Devuelve un nuevo conjunto de datos, compuesto por el conjunto de datos original y los parámetros
RoupByKey ([numTasks]): llamado en un conjunto de datos compuesto por pares (k, v), devolviendo un conjunto de datos de (k, seq [v]) pares. Nota: Por defecto, se utilizan 8 tareas paralelas para agrupar. Puede pasar en parámetros opcionales de NumTask y establecer diferentes números de tareas de acuerdo con la cantidad de datos.
REDUCTYKEY (FUNC, [numTasks]): utilizado en un conjunto de datos de par (k, v), devolver un conjunto de datos de par (k, v), el mismo valor de la clave se agregue juntos utilizando la función de reducción especificada. Similar a GroupByKey, el número de tareas se puede configurar con el segundo parámetro opcional.
Únase a (OTRODATASET, [NUMTASKS]): llamó a un conjunto de datos de tipos (k, v) y (k, w), que devuelve un par (k, (v, w)), y todos los elementos en cada clave están juntos.
Groupwith (OtherDataset, [numTasks]): llamó a un conjunto de datos de tipos (k, v) y (k, w) y devuelve un conjunto de datos con los componentes (k, seq [v], seq [w]) tuples. Esta operación se encuentra en otros marcos llamados CoGroup
Cartesian (OtherDataset): producto cartesiano. Pero cuando se les pide en los conjuntos de datos T y U, se devuelve un conjunto de datos del par (t, u) y todos los elementos interactúan con el producto cartesiano.
Comportamiento
Reducir (FUNC): agregue todos los elementos en el conjunto de datos a través de funciones func. La función FUNC acepta 2 parámetros y devuelve un valor. Esta función debe asociarse para garantizar que se pueda ejecutar de manera correcta y simultánea
Collect (): En el programa del conductor, devuelva todos los elementos del conjunto de datos como una matriz. Esto generalmente devuelve un subconjunto de datos lo suficientemente pequeño después de usar Filter u otras operaciones, y devuelve directamente todo el conjunto RDD Collection, lo que probablemente haga que el programa del controlador OOM
Count (): Devuelve el número de elementos en el conjunto de datos
Take (n): Devuelve una matriz que consta de los primeros n elementos del conjunto de datos. Tenga en cuenta que esta operación no se ejecuta actualmente en paralelo en múltiples nodos, pero es la máquina donde se encuentra el programa del controlador, y todos los elementos son calculados por una sola máquina (la presión de memoria de la puerta de enlace aumentará y debe usarse con precaución)
First (): Devuelve el primer elemento del conjunto de datos (similar a Take (1))
saveSextFile (ruta): guarde los elementos del conjunto de datos en forma de un archivo de texto al sistema de archivos local, HDFS o cualquier otro sistema de archivos compatible con Hadoop. Spark llamará al método de tostración de cada elemento y lo convertirá en una línea de texto en el archivo.
SaveAsSECHENCEFILE (ruta): guarde los elementos del conjunto de datos en el formato de secuencefile al directorio especificado, el sistema local, HDFS o cualquier otro sistema de archivos compatible con Hadoop. Los elementos de RDD deben estar compuestos por pares de valor clave, y todos implementan la interfaz de escritura de Hadoop, o pueden convertirse en escritura implícitamente (Spark incluye conversiones de tipos básicos, como int, doble, cadena, etc.)
foreach (func): ejecute la función func en cada elemento del conjunto de datos. Esto generalmente se usa para actualizar una variable de acumulador o para interactuar con un sistema de almacenamiento externo
Proceso de ejecución de WordCount
Resumir
Lo anterior es todo el contenido de este artículo sobre los principios de la arquitectura de programación de chispa. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!