Big Data con Apache Spark y Scala

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

Big Data se caracteriza a menudo por: –

a) Volumen: – El volumen significa una enorme y enorme cantidad de datos que deben procesarse.

B) Velocidad: – La velocidad con la que llegan los datos como procesamiento en tiempo real.

C) Veracidad: – Veracidad significa la calidad de los datos (que en realidad debe ser excelente para generar informes de análisis, etc.)

D) Variedad: – Significa los diferentes tipos de datos como

* Datos estructurados: – Datos en formato de tabla.

* Datos no estructurados: – Datos no en formato de tabla

* Datos semiestructurados: – Mezcla de datos estructurados y no estructurados.

Para trabajar con grandes bytes de datos, primero necesitamos almacenar o volcar los datos en algún lugar. Por tanto, la solución a esto es HDFS (sistema de archivos distribuido Hadoop).

99428hdfs-architecture-with-default-data-placement-policy-6635668

Soportes de Hadoop Arquitectura maestro-esclavo. Es un tipo de sistema distribuido donde se realiza el procesamiento paralelo de datos. Hadoop consta de 1 maestro y varios esclavos.

Nodo de regla de nombre: – Por cada bloque de datos que se almacena, hay 2 copias presentes. Uno en diferentes nodos de datos y una segunda copia en otro nodo de datos. De esta forma, se soluciona el problema de la tolerancia a fallos.

El nodo de nombre contiene la siguiente información: –

1) Información de metadatos de los archivos almacenados en los nodos de datos. Los metadatos constan de 2 archivos: FsImage y EditLogs. FsImage consiste en el estado completo del sistema de archivos desde el inicio del Name Node. EditLogs contiene modificaciones recientes que se realizan en el sistema de archivos.

2) ubicación del bloque de archivos almacenado en el nodo de datos.

3) Tamaño de los archivos.

El nodo de datos contiene los datos reales.

Por lo tanto, HDFS admite integridad de los datos. Los datos que se almacenan se verifican si son correctos o no al comparar los datos con su suma de verificación. Si se detectan fallas, se informa al nodo de nombres. Por lo tanto, crea copias adicionales de los mismos datos y elimina las copias dañadas.

HDFS consta de Nodo de nombre secundario que funciona al mismo tiempo que el Name Node principal como demonio auxiliar. No es un nodo de nombre de respaldo. Lee constantemente todos los sistemas de archivos y metadatos de la RAM del Name Node al disco duro. Es responsable de combinar EditLogs con FSImage de Name Node.

Por lo tanto, HDFS es como un almacén de datos donde podemos volcar cualquier tipo de datos. El procesamiento de estos datos requiere herramientas de Hadoop como Hive (para el manejo de datos estructurados), HBase (para el manejo de datos no estructurados), etc. Hadoop admite el concepto «Escribir una vez, listo para muchos».

Entonces, tomemos un ejemplo y entendamos cómo podemos procesar una enorme cantidad de datos y realizar muchas transformaciones usando Scala Language.

A) Configuración de Eclipse IDE con la configuración de Scala.

Enlace para descargar eclipse IDE – https://www.eclipse.org/downloads/

Debe descargar el IDE de Eclipse teniendo en cuenta los requisitos de su computadora. Al iniciar el IDE de eclipse, verá este tipo de pantalla.

44693eclipse_1-5536478

Ir a Ayudar -> Eclipse Marketplace -> Buscar -> Scala-Ide -> Instalar en pc

34897scala-5206914

Después de eso en Eclipse IDE – seleccione Perspectiva abierta -> Scala, obtendrá todos los componentes de scala en el ide para usar.

32272open20perspective-2951911

Cree un nuevo proyecto en eclipse y actualice el archivo pom con los siguientes pasos:https://medium.com/@manojkumardhakad/how-to-create-maven-project-for-spark-and-scala-in-scala-ide-1a97ac003883

Cambie la versión de la biblioteca scala haciendo clic derecho en Proyecto -> Construir camino -> Configurar ruta de compilación.

Actualice el proyecto haciendo clic derecho en Proyecto -> Maven -> Actualizar proyecto Maven -> Forzar actualización de instantáneas / versiones. Por lo tanto, el archivo pom se guarda y todas las dependencias requeridas se descargan para el proyecto.

Después de eso, descargue la versión Spark con Hadoop winutils colocadas en la ruta bin. Siga este camino para completar la configuración: https://stackoverflow.com/questions/25481325/how-to-set-up-spark-on-windows

B) Creación de sesiones de Spark – 2 tipos.

Spark Session es el punto de entrada o el comienzo para crear RDD’S, Dataframe, Datasets. Para crear cualquier aplicación de chispa, primero necesitamos una sesión de chispa.

Spark Session puede ser de 2 tipos: –

a) Sesión normal de Spark: –

13880spark-session201-4656380

La salida se mostrará como: –

24326spark20session20created-4506853

b) Sesión de Spark para el entorno de Hive: –

Para crear un entorno de colmena a escala, necesitamos la misma sesión de chispa con una línea adicional agregada. enableHiveSupport () – habilita el soporte de Hive, incluida la conectividad con el metastore de Hive persistente, el soporte para serdes de Hive y las funciones definidas por el usuario de Hive.

52138hive20support-5582673

C) Creación de RDD (Resilient Distributed Dataset) y transformación de RDD en DataFrame: –

Entonces, después del primer paso de crear Spark-Session, somos libres de crear RDD, conjuntos de datos o marcos de datos. Estas son las estructuras de datos en las que podemos almacenar grandes cantidades de datos.

Elástico:- significa tolerancia a fallas para que puedan volver a calcular las particiones faltantes o dañadas debido a fallas en los nodos.

Repartido:- significa que los datos se distribuyen en varios nodos (poder del paralelismo).

Conjuntos de datos: – Datos que se pueden cargar externamente y que pueden ser de cualquier forma, es decir, JSON, CSV o archivo de texto.

Las características de los RDD incluyen: –

a) Cálculo en memoria: – Después de realizar transformaciones en datos, los resultados se almacenan en la RAM en lugar de en un disco. Por lo tanto, RDD no puede utilizar grandes conjuntos de datos. La solución a esto es, en lugar de utilizar RDD, se considera el uso de DataFrame / Dataset.

B) Evaluaciones perezosas: – Significa que las acciones de las transformaciones realizadas se evalúan solo cuando se necesita el valor.

39080features-of-rdd-in-spark202-6810382

C) Tolerancia a fallos: – Los RDD de Spark son tolerantes a fallas ya que rastrean la información del linaje de datos para reconstruir los datos perdidos automáticamente en caso de falla.

D) Inmutabilidad: – Los datos inmutables (no modificables) siempre son seguros para compartir en múltiples procesos. Podemos recrear el RDD en cualquier momento.

mi) Fraccionamiento: – Significa dividir los datos, por lo que cada partición puede ser ejecutada por diferentes nodos, por lo que el procesamiento de datos se vuelve más rápido.

F) Persistencia:- Los usuarios pueden elegir qué RDD necesitan usar y elegir una estrategia de almacenamiento para ellos.

gramo) Operaciones de grano grueso: – Significa que cuando los datos se dividen en diferentes clústeres para diferentes operaciones, podemos aplicar transformaciones una vez para todo el clúster y no para diferentes particiones por separado.

D) Uso del marco de datos y realización de transformaciones: –

Al convertir RDD en marcos de datos, debe agregar import spark.implicits._ después de la chispa sesión.

El marco de datos se puede crear de muchas formas. Veamos las diferentes transformaciones que se pueden aplicar al marco de datos.

Paso 1:- Creando marco de datos: –

571491-7081897

Paso 2:- Realización de diferentes tipos de transformaciones en un marco de datos: –

a) Seleccione:- Selecciona las columnas requeridas del marco de datos que requiere el usuario.

Input1.select («arrg_id», «da_proc_id»). Show ()

39981select-9988946

B) selectExpr: – Selecciona las columnas requeridas y también cambia el nombre de las columnas.

Input2.selectExpr («arrg_id11», «prd_src_sys_id11 como prd_src_new», «da_proc_id11»). Show ()

99377selectexp-1320093

C) con Columna: – withColumns ayuda a agregar una nueva columna con el valor particular que el usuario desea en el marco de datos seleccionado.

Input1.withColumn («New_col», iluminado (nulo))

36560withcolumn-5137029

D) withColumnRenamed: – Cambia el nombre de las columnas del marco de datos particular que requiere el usuario.

Input1.withColumnRenamed («da_proc_id», «da_proc_id_newname»)

88744withcolumn20renamed-9628908

mi) soltar:- Elimina las columnas que el usuario no quiere.

Input2.drop («arrg_id11 ″,» prd_src_sys_id11 ″, «da_proc_id11»)

46048drop-8664125

F) Entrar:- Une 2 marcos de datos junto con claves de unión de ambos marcos de datos.

Input1.join (Input2, Input1.col («arrg_id») === Input2.col («arrg_id11 ″),» right «)

.withColumn («prd_src_sys_id», iluminado (nulo))

94582join-3084600

gramo) Funciones agregadas:- Algunas de las funciones agregadas incluyen

* Contar:- Da el recuento de una columna en particular o el recuento del marco de datos como un todo.

println (Input1.count ())

42627count-9386655

* Máx .: – Da el valor máximo de la columna según una condición particular.

input2.groupBy («da_proc_id»). max («arrg_id»). withColumnRenamed («max (arrg_id)»,
«Arrg_id_max»)

93270max-5414698

* Min: – Da un valor mínimo de la columna del marco de datos.

83162min-5753036

h) filtrar: – Filtra las columnas de un marco de datos ejecutando una condición particular.

58433filter-2863035

I) printSchema: – Proporciona detalles como nombres de columna, tipos de datos de columnas y si las columnas pueden ser anulables o no.

99549printschema-6469355

j) Unión: – Combina los valores de 2 marcos de datos siempre que los nombres de columna de ambos marcos de datos sean iguales.

85162union-9027829

MI) Colmena:-

Hive es una de las bases de datos más utilizadas en Big Data. Es una especie de base de datos relacional donde los datos se almacenan en formato tabular. La base de datos predeterminada de la colmena es la derby. Procesos de colmena estructurado y semiestructurado datos. En caso de datos no estructurados, primero cree una tabla en la colmena y cargue los datos en la tabla, así estructurada. Hive admite todos los tipos de datos primitivos de SQL.

Hive admite 2 tipos de tablas: –

a) Tablas gestionadas: – Es la tabla predeterminada en Hive. Cuando el usuario crea una tabla en Hive sin especificarla como externa, de forma predeterminada, se crea una tabla interna en una ubicación específica en HDFS.

De forma predeterminada, se creará una tabla interna en una ruta de carpeta similar a / usuario / colmena / almacén directorio de HDFS. Podemos anular la ubicación predeterminada por la propiedad de ubicación durante la creación de la tabla.

Si descartamos la tabla o partición administrada, los datos de la tabla y los metadatos asociados con esa tabla se eliminarán del HDFS.

B) Mesa externa: – Las tablas externas se almacenan fuera del directorio del almacén. Pueden acceder a los datos almacenados en fuentes como ubicaciones HDFS remotas o volúmenes de almacenamiento de Azure.

Siempre que dejamos caer la tabla externa, solo se eliminarán los metadatos asociados con la tabla, los datos de la tabla permanecen intactos por Hive.

Podemos crear la tabla externa especificando el EXTERNO palabra clave en la instrucción de tabla de creación de Hive.

Comando para crear una tabla externa.

94763create20table-7512342

Comando para comprobar si la tabla creada es externa o no: –

desc con formato

46379desc20formatted-8577196

F) Creando un entorno de colmena en scala eclipse: –

Paso 1: – Añadiendo dependencia de maven de colmena al archivo pom del eclipse.

81007hive20dependency-4174738

Paso 2:- Añadiendo Spark-Session con enableHiveSupport al generador de sesiones.

Paso 3:- Comando para crear base de datos

Spark.sqlContext.sql (“” ”crear base de datos gfrrtnsg_staging“ ””)

Este comando cuando se ejecuta crea una base de datos en el directorio de colmena del sistema local.

83828jidnasa_database-9918764

Paso 4:- Comando para crear una tabla en eclipse

La ejecución de este comando crea una tabla en la carpeta de la base de datos en el directorio local.

30664hive1-3942431

Después de crear una tabla, obtendrá una tabla creada dentro de la carpeta de la base de datos en su sistema informático.

23497jidnasa_table-5602946

Paso 5: – Carga de datos en tablas: –

spark.sqlContext.sql (“” ”CARGAR DATOS ENTRADA ‘C: sampledata SOBRESCRIBIR EN TABLA frzn_arrg_link“ ””)

77667jidnasa_inside_table-5068983

Al ejecutar este comando, los datos se cargan en tablas y, por lo tanto, dan la salida anterior.

Por lo tanto, de esta manera los datos se pueden almacenar en tablas de colmena y cargar en marcos de datos y ejecutar sus programas.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.