Big Data com Apache Spark e Scala

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon.

Introdução

O Big Data é frequentemente caracterizado por: –

uma) Volume: – Volume significa uma enorme, enorme quantidade de dados que precisam ser processados.

B) Velocidade: – A velocidade com que os dados chegam como processamento em tempo real.

C) Veracidade: – Veracidade significa a qualidade dos dados (o que deve ser ótimo para gerar relatórios de análise, etc.)

D) Variedade: – Isso significa que os diferentes tipos de dados, como

* Dados estruturados: – Dados em formato de tabela.

* Dados não estruturados: – Dados não em formato de tabela

* Dados semiestruturados: – Mistura de dados estruturados e não estruturados.

Para trabalhar com grandes bytes de dados, primeiro precisamos armazenar ou despejar os dados em algum lugar. Por tanto, a solução para isso é HDFS (Sistema de arquivos distribuído Hadoop).

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

Suporte para Hadoop Arquitetura mestre-escravo. É um tipo de sistema distribuído onde o processamento de dados paralelo é realizado.. O Hadoop consiste em 1 mestre e vários escravos.

Nó de regra de nome: – Para cada bloco de dados armazenado, existem 2 cópias presentes. Uma em diferentes nós de dados e uma segunda cópia em outro nó de dados. Desta forma, problema de tolerância a falhas corrigido.

O nó de nome contém as seguintes informações: –

1) Informações de metadados para arquivos armazenados em nós de dados. Os metadados consistem em 2 registros: FsImage e EditLogs. FsImage consiste no estado completo do sistema de arquivos desde o início do Name Node. EditLogs contém modificações recentes feitas no sistema de arquivos.

2) localização do bloco de arquivos armazenados no nó de dados.

3) tamanho do arquivo.

O nó de dados contém os dados reais.

Portanto, Suporta HDFS integridade de dados. Os dados armazenados são verificados se estão corretos ou não, comparando os dados com sua soma de verificação. Se forem detectadas falhas, o nó de nomes é informado. Portanto, cria cópias adicionais dos mesmos dados e exclui cópias danificadas.

O HDFS consiste em nó de nome secundário que funciona ao mesmo tempo que o Name Node principal como um daemon auxiliar. Não é um nó de nome de backup. Lê constantemente todos os sistemas de arquivos e metadados da RAM do Name Node para o disco rígido. É responsável por combinar EditLogs com FSImage de Name Node.

Portanto, O HDFS é como um data warehouse onde podemos despejar qualquer tipo de dados. O processamento desses dados requer ferramentas Hadoop como Hive (para lidar com dados estruturados), HBase (para lidar com dados não estruturados), etc. O Hadoop suporta o conceito “escreva uma vez, pronto para muitos”.

Então, vamos dar um exemplo e entender como podemos processar uma enorme quantidade de dados e realizar muitas transformações usando a linguagem Scala.

UMA) Configurando o Eclipse IDE com configuração Scala.

Link para baixar o Eclipse IDE – https://www.eclipse.org/downloads/

Você deve baixar o Eclipse IDE considerando os requisitos do seu computador. Ao iniciar o Eclipse IDE, você verá esse tipo de tela.

44693eclipse_1-5536478

Vamos para Ajudar -> Mercado Eclipse -> Olhe para -> Scala-Ide -> Instalar no pc

34897escala-5206914

Depois disso no Eclipse IDE – selecionar perspectiva aberta -> Scala, você obterá todos os componentes scala no ide para usar.

32272open20perspective-2951911

Crie um novo projeto no eclipse e atualize o arquivo pom com as seguintes etapas:https://medium.com/@manojkumardhakad/how-to-create-maven-project-for-spark-and-scala-in-scala-ide-1a97ac003883

Altere a versão da biblioteca scala clicando com o botão direito do mouse em Projeto -> caminho de construção -> Configurar caminho de compilação.

Atualize o projeto clicando com o botão direito do mouse em Projeto -> Especialista -> Atualizar projeto maven -> Forçar atualização de instantâneo / versões. Portanto, o arquivo pom é salvo e todas as dependências necessárias são baixadas para o projeto.

Depois disso, baixe a versão do Spark com os winutils do Hadoop colocados no caminho da lixeira. Siga este caminho para concluir a configuração: https://stackoverflow.com/questions/25481325/how-to-set-up-spark-on-windows

B) Criar sessões do Spark – 2 tipos.

Spark Session é o ponto de entrada ou o começo para criar RDD'S, Quadro de dados, Conjuntos de dados. Para criar qualquer aplicativo Spark, primeiro precisamos de uma sessão de faísca.

A Sessão Spark pode ser de 2 tipos: –

uma) Iniciar sessão normal: –

13880sessão de faísca201-4656380

A saída será exibida como: –

24326spark20session20created-4506853

b) Sessão do Spark para o ambiente Hive: –

Para criar um ambiente de colmeia em escala, precisamos da mesma sessão de faísca com uma linha extra adicionada. enableHiveSupport () – ativar suporte de colmeia, incluindo conectividade com o metastore Hive persistente, suporte para serdes Hive e funções definidas pelo usuário Hive.

52138hive20support-5582673

C) Criação de RDD (Conjunto de dados distribuído resiliente) e transformação de RDD em DataFrame: –

Então, após a primeira etapa de criação da Spark-Session, somos livres para criar RDD, conjuntos de dados ou dataframes. Estas são as estruturas de dados nas quais podemos armazenar grandes quantidades de dados.

Elástico:- significa tolerância a falhas para que eles possam recalcular partições ausentes ou danificadas devido a falhas de nó.

Distribuído:- significa que os dados são distribuídos por vários nós (poder do paralelismo).

Conjuntos de dados: – Dados carregáveis ​​externamente que podem estar em qualquer formato, quer dizer, JSON, CSV ou arquivo de texto.

Os recursos dos RDDs incluem: –

uma) Cálculo na memória: – Depois de realizar transformações nos dados, os resultados são armazenados na RAM em vez de no disco. Portanto, RDD não pode usar grandes conjuntos de dados. A solução para isso é, em vez de usar RDD, o uso do DataFrame é considerado / Conjunto de dados.

B) avaliações preguiçosas: – Isso significa que as ações das transformações realizadas são avaliadas apenas quando o valor é necessário.

39080características-de-rdd-in-spark202-6810382

C) Tolerância ao erro: – Spark RDDs são tolerantes a falhas, pois rastreiam informações de linhagem de dados para reconstruir automaticamente dados perdidos em caso de falha.

D) Imutabilidade: – dados imutáveis (não modificáveis) são sempre seguros para compartilhar em vários processos. Podemos recriar o RDD a qualquer momento.

mim) Divisão: – Significa dividir os dados, para que cada partição possa ser executada por nós diferentes, para que o processamento de dados se torne mais rápido.

F) Persistência:- Os usuários podem escolher qual RDD eles precisam usar e escolher uma estratégia de armazenamento para eles.

grama) Operações grosseiras: – Isso significa que quando os dados são divididos em diferentes clusters para diferentes operações, podemos aplicar transformações uma vez para todo o cluster e não para diferentes partições separadamente.

D) Usando o quadro de dados e realizando transformações: –

Ao converter RDD em dataframes, deve adicionar import spark.implicits._ depois da faísca sessão.

O quadro de dados pode ser criado de várias maneiras. Vejamos as diferentes transformações que podem ser aplicadas ao quadro de dados.

Paso 1:- Criando quadro de dados: –

571491-7081897

Paso 2:- Executando diferentes tipos de transformações em um quadro de dados: –

uma) Por favor selecione:- Selecione as colunas necessárias do quadro de dados que o usuário requer.

Entrada1.selecionar (“arrg_id”, “da_proc_id”). Mostrar ()

39981selecione-9988946

B) selecioneExpr: – Selecione as colunas necessárias e também renomeie as colunas.

Input2.selectExpr (“arrg_id11”, “prd_src_sys_id11 como prd_src_new”, “da_proc_id11”). Mostrar ()

99377selectexp-1320093

C) com coluna: – withColumns ajuda a adicionar uma nova coluna com o valor específico que o usuário deseja no dataframe selecionado.

Entrada1.comColuna (“Nova_coluna”, iluminado (nulo))

36560com coluna-5137029

D) withColumnRenamed: – Renomeia as colunas do dataframe específico que o usuário requer.

Input1.withColumnRenamed (“da_proc_id”, “da_proc_id_newname”)

88744withcolumn20renamed-9628908

mim) soltar:- Remova as colunas que o usuário não deseja.

Input2.drop (“arrg_id11 ″,” prd_src_sys_id11 ″, “da_proc_id11”)

46048drop-8664125

F) Entrar:- UMA 2 dataframes junto com chaves de junção de ambos os dataframes.

Entrada1.junção (Entrada2, Entrada1.col (“arrg_id”) === Entrada2.col (“arrg_id11 ″),” direito “)

.withColumn (“prd_src_sys_id”, iluminado (nulo))

94582join-3084600

grama) Recursos adicionados:- Alguns dos recursos adicionados incluem

* Contar:- Dá a contagem de uma coluna específica ou a contagem do dataframe como um todo.

println (Entrada1.contagem ())

42627contagem-9386655

* Máx .: – Dá o valor máximo da coluna de acordo com uma condição particular.

entrada2.grupopor (“da_proc_id”). max (“arrg_id”). withColumnRenamed (“max (arrg_id)”,
“Arrg_id_max”)

93270max-5414698

* Mín.: – Fornece um valor mínimo da coluna do dataframe.

83162min-5753036

h) filtro: – Filtre as colunas de um quadro de dados executando uma condição específica.

58433filtro-2863035

eu) printSchema: – Forneça detalhes como nomes de colunas, tipos de dados de coluna e se as colunas podem ser anuláveis ​​ou não.

99549esquema de impressão-6469355

j) União: – Combine os valores de 2 dataframes, desde que os nomes das colunas de ambos os dataframes sejam os mesmos.

85162sindicato-9027829

MIM) Colmeia:-

Hive é um dos bancos de dados mais usados ​​em Big Data. É um tipo de banco de dados relacional onde os dados são armazenados em formato tabular. O banco de dados padrão da colmeia é o clássico. processos de colmeia estruturada e semiestruturada dados. No caso de dados não estruturados, primeiro crie uma tabela no hive e carregue os dados na tabela, tão estruturado. O Hive suporta todos os tipos de dados primitivos SQL.

Admissão de colmeia 2 tipos de mesa: –

uma) Tabelas gerenciadas: – É a tabela padrão no hive. Quando o usuário cria uma tabela no Hive sem especificá-la como externa, por padrão, uma tabela interna é criada em um local específico no HDFS.

Por padrão, uma tabela interna será criada em um caminho de pasta semelhante a / Nome do usuário / colmeia / estoque diretório hdfs. Podemos substituir o local padrão pela propriedade de localização durante a criação da tabela.

Se descartarmos a tabela ou partição gerenciada, os dados e metadados da tabela associados a essa tabela serão removidos do HDFS.

B) mesa externa: – As tabelas externas são armazenadas fora do diretório do warehouse. 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, portanto, dan la salida anterior.

Portanto, desta forma os dados podem ser armazenados em tabelas hive e carregados em dataframes e executar seus programas.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.