socialgekon.com
  • Principal
  • Design De Marca
  • Outros Do Mundo
  • Gerenciamento De Projetos
  • Vizinhos
Ciência De Dados E Bancos De Dados

Introdução ao Apache Spark com exemplos e casos de uso

Ouvi falar do Spark no final de 2013, quando me interessei pelo Scala, a linguagem em que o Spark é escrito. Algum tempo depois, fiz um projeto divertido de ciência de dados tentando prever a sobrevivência no Titanic . Essa acabou sendo uma ótima maneira de se aprofundar nos conceitos e na programação do Spark. Eu recomendo fortemente para qualquer aspirante Desenvolvedores do Spark procurando um lugar para começar.

Hoje, o Spark está sendo adotado por grandes empresas como Amazon, eBay e Yahoo! Muitas organizações executam Spark em clusters com milhares de nós. De acordo com o Spark FAQ, o maior cluster conhecido tem mais de 8.000 nós. Na verdade, Spark é uma tecnologia que vale a pena observar e aprender sobre ela.

Este artigo fornece uma introdução ao Spark, incluindo casos de uso e exemplos. Ele contém informações do site do Apache Spark, bem como o livro Learning Spark - Análise ultrarrápida de Big Data .



O que é Apache Spark? Uma introdução

Faísca é um projeto Apache anunciado como “computação em cluster ultrarrápida”. Ele tem uma comunidade de código aberto próspera e é o projeto Apache mais ativo no momento.

O Spark fornece uma plataforma de processamento de dados mais rápida e geral. O Spark permite que você execute programas até 100x mais rápido na memória ou 10x mais rápido no disco do que o Hadoop. No ano passado, o Spark assumiu o controle do Hadoop ao completar o concurso 100 TB Daytona GraySort 3 vezes mais rápido em um décimo do número de máquinas e também se tornou o mecanismo de código aberto mais rápido para classificar um petabyte .

O Spark também torna possível escrever código mais rapidamente, pois você tem mais de 80 operadores de alto nível à sua disposição. Para demonstrar isso, vamos dar uma olhada no “Hello World!” de BigData: o exemplo de contagem de palavras. Escrito em Java para MapReduce, tem cerca de 50 linhas de código, enquanto no Spark (e Scala) você pode fazer isso de forma simples:

sparkContext.textFile('hdfs://...') .flatMap(line => line.split(' ')) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile('hdfs://...')

Outro aspecto importante ao aprender a usar o Apache Spark é o shell interativo (REPL) que ele fornece pronto para uso. Usando REPL, pode-se testar o resultado de cada linha de código sem primeiro precisar codificar e executar o trabalho inteiro. O caminho para o código de trabalho é, portanto, muito mais curto e a análise de dados ad-hoc é possível.

Os principais recursos adicionais do Spark incluem:

  • Atualmente fornece APIs em Scala, Java e Python, com suporte para outras linguagens (como R) no caminho
  • Integra-se bem com o ecossistema Hadoop e fontes de dados (HDFS, Amazon S3, Hive, HBase, Cassandra, etc.)
  • Pode ser executado em clusters gerenciados por Hadoop YARN ou Apache Mesos e também pode ser executado de forma autônoma

O núcleo do Spark é complementado por um conjunto de bibliotecas poderosas de nível superior que podem ser usadas perfeitamente no mesmo aplicativo. Essas bibliotecas atualmente incluem SparkSQL, Spark Streaming, MLlib (para aprendizado de máquina) e GraphX, cada um dos quais é mais detalhado neste artigo. Bibliotecas e extensões adicionais do Spark também estão atualmente em desenvolvimento.

bibliotecas e extensões do Spark

Spark Core

Spark Core é o mecanismo básico para processamento de dados paralelos e distribuídos em grande escala. É responsável por:

  • gerenciamento de memória e recuperação de falhas
  • agendar, distribuir e monitorar jobs em um cluster
  • interagindo com sistemas de armazenamento

Spark introduz o conceito de um RDD (Conjunto de dados distribuído resiliente) , uma coleção de objetos imutável e tolerante a falhas que pode ser operada em paralelo. Um RDD pode conter qualquer tipo de objeto e é criado carregando um conjunto de dados externo ou distribuindo uma coleção do programa de driver.

Os RDDs suportam dois tipos de operações:

  • Transformações são operações (como map, filter, join, union e assim por diante) que são executadas em um RDD e que geram um novo RDD contendo o resultado.
  • Ações são operações (como reduzir, contar, primeiro e assim por diante) que retornam um valor após a execução de um cálculo em um RDD.

As transformações no Spark são “preguiçosas”, o que significa que não computam seus resultados imediatamente. Em vez disso, eles apenas “lembram” a operação a ser realizada e o conjunto de dados (por exemplo, arquivo) no qual a operação deve ser realizada. As transformações só são realmente calculadas quando uma ação é chamada e o resultado é retornado ao programa driver. Esse design permite que o Spark funcione com mais eficiência. Por exemplo, se um arquivo grande fosse transformado de várias maneiras e passado para a primeira ação, o Spark apenas processaria e retornaria o resultado para a primeira linha, em vez de fazer o trabalho para o arquivo inteiro.

Por padrão, cada RDD transformado pode ser recalculado cada vez que você executa uma ação nele. No entanto, você também pode persistir um RDD na memória usando o método persist ou cache, caso em que o Spark manterá os elementos no cluster para acesso muito mais rápido na próxima vez que você consultá-lo.

SparkSQL

SparkSQL é um componente Spark que dá suporte à consulta de dados via SQL ou via Linguagem de consulta Hive . Ele se originou como a porta Apache Hive para ser executado no Spark (no lugar do MapReduce) e agora está integrado à pilha do Spark. Além de fornecer suporte para várias fontes de dados, é possível tecer consultas SQL com transformações de código que resultam em uma ferramenta muito poderosa. Abaixo está um exemplo de uma consulta compatível com Hive:

// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) sqlContext.sql('CREATE TABLE IF NOT EXISTS src (key INT, value STRING)') sqlContext.sql('LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src') // Queries are expressed in HiveQL sqlContext.sql('FROM src SELECT key, value').collect().foreach(println)

Spark Streaming

Spark Streaming suporta processamento em tempo real de dados de streaming, como arquivos de log de servidor da web de produção (por exemplo, Apache Flume e HDFS / S3), mídia social como Twitter e várias filas de mensagens como Kafka. Sob o capô, o Spark Streaming recebe os fluxos de dados de entrada e divide os dados em lotes. Em seguida, eles são processados ​​pelo mecanismo Spark e geram o fluxo final de resultados em lotes, conforme ilustrado abaixo.

faísca de streaming

A API Spark Streaming é muito parecida com a do Spark Core, tornando mais fácil para os programadores trabalharem nos mundos de dados em lote e streaming.

MLlib

MLlib é uma biblioteca de aprendizado de máquina que fornece vários algoritmos projetados para escalar horizontalmente em um cluster para classificação, regressão, clustering, filtragem colaborativa e assim por diante (confira o artigo de ApeeScape sobre aprendizado de máquina para obter mais informações sobre esse tópico). Alguns desses algoritmos também funcionam com dados de streaming, como regressão linear usando mínimos quadrados comuns ou agrupamento de k-means (e mais a caminho). Apache Mahout (uma biblioteca de aprendizado de máquina para Hadoop) já se afastou do MapReduce e uniu forças no Spark MLlib.

GraphX

Graphx

GraphX é uma biblioteca para manipular gráficos e realizar operações paralelas a gráficos. Ele fornece uma ferramenta uniforme para ETL, análise exploratória e cálculos gráficos iterativos. Além de operações integradas para manipulação de gráfico, ele fornece uma biblioteca de algoritmos de gráfico comuns, como o PageRank.

Como usar o Apache Spark: caso de uso de detecção de eventos

Agora que respondemos à pergunta 'O que é o Apache Spark?', Vamos pensar em quais tipos de problemas ou desafios ele poderia ser usado de forma mais eficaz.

Eu encontrei um artigo recentemente sobre um experimento para detectar um terremoto analisando um fluxo do Twitter . Curiosamente, foi mostrado que essa técnica provavelmente informaria sobre um terremoto no Japão mais rápido do que a Agência Meteorológica do Japão. Mesmo que eles tenham usado uma tecnologia diferente em seu artigo, acho que é um ótimo exemplo para ver como poderíamos colocar o Spark para uso com trechos de código simplificados e sem o código cola.

Primeiro, teríamos que filtrar os tweets que parecem relevantes, como “terremoto” ou “tremor”. Poderíamos facilmente usar o Spark Streaming para essa finalidade da seguinte maneira:

TwitterUtils.createStream(...) .filter(_.getText.contains('earthquake') || _.getText.contains('shaking'))

Então, teríamos que executar algumas análises semânticas nos tweets para determinar se eles parecem estar se referindo a uma ocorrência de terremoto atual. Tweets como 'Terremoto!' ou “Agora está tremendo”, por exemplo, seriam consideradas correspondências positivas, enquanto tweets como “Participando de uma conferência sobre terremoto” ou “O terremoto de ontem foi assustador” não. Os autores do artigo usaram uma máquina de vetores de suporte (SVM) para esse fim. Faremos o mesmo aqui, mas também podemos tentar um versão de streaming . Um exemplo de código resultante do MLlib seria semelhante ao seguinte:

// We would prepare some earthquake tweet data and load it in LIBSVM format. val data = MLUtils.loadLibSVMFile(sc, 'sample_earthquate_tweets.txt') // Split data into training (60%) and test (40%). val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L) val training = splits(0).cache() val test = splits(1) // Run training algorithm to build the model val numIterations = 100 val model = SVMWithSGD.train(training, numIterations) // Clear the default threshold. model.clearThreshold() // Compute raw scores on the test set. val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label) } // Get evaluation metrics. val metrics = new BinaryClassificationMetrics(scoreAndLabels) val auROC = metrics.areaUnderROC() println('Area under ROC = ' + auROC)

Se estivermos satisfeitos com a taxa de previsão do modelo, poderíamos passar para o próximo estágio e reagir sempre que descobrirmos um terremoto. Para detectar um, precisamos de um certo número (ou seja, densidade) de tweets positivos em uma janela de tempo definida (conforme descrito no artigo). Observe que, para tweets com serviços de localização do Twitter habilitados, também extrairíamos a localização do terremoto. Munidos desse conhecimento, poderíamos usar SparkSQL e consultar uma tabela Hive existente (armazenando usuários interessados ​​em receber notificações de terremoto) para recuperar seus endereços de e-mail e enviar a eles um e-mail de aviso personalizado, como segue:

// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) // sendEmail is a custom function sqlContext.sql('FROM earthquake_warning_users SELECT firstName, lastName, city, email') .collect().foreach(sendEmail)

Outros casos de uso do Apache Spark

Os casos de uso em potencial para o Spark vão muito além da detecção de terremotos, é claro.

Aqui está uma amostra rápida (mas certamente longe de exaustiva!) De outros casos de uso que exigem lidar com a velocidade, variedade e volume de Big Data, para o qual o Spark é tão adequado:

Na indústria de jogos, processar e descobrir padrões da mangueira de incêndio potencial de eventos em tempo real no jogo e ser capaz de responder a eles imediatamente é uma capacidade que pode render um negócio lucrativo, para fins como retenção de jogadores, publicidade direcionada, automóveis -ajuste do nível de complexidade e assim por diante.

Na indústria de e-commerce, as informações de transações em tempo real podem ser passadas para um algoritmo de clustering de streaming como k-significa ou filtragem colaborativa como QUANDO . Os resultados podem então ser combinados com outras fontes de dados não estruturados, como comentários de clientes ou análises de produtos, e usados ​​para melhorar e adaptar recomendações constantemente ao longo do tempo com novas tendências.

No setor financeiro ou de segurança, a pilha Spark pode ser aplicada a um sistema de detecção de fraude ou intrusão ou autenticação baseada em risco. Ele poderia alcançar resultados excelentes ao coletar grandes quantidades de logs arquivados, combinando-os com fontes de dados externas, como informações sobre violações de dados e contas comprometidas (consulte, por exemplo, https://haveibeenpwned.com/ ) e informações da conexão / solicitação, como geolocalização de IP ou hora.

Conclusão

Resumindo, o Spark ajuda a simplificar a tarefa desafiadora e computacionalmente intensa de processar grandes volumes de dados em tempo real ou arquivados, tanto estruturados quanto não estruturados, integrando perfeitamente recursos complexos relevantes, como aprendizado de máquina e algoritmos de gráfico. O Spark traz o processamento de Big Data para as massas. Confira!

Compreender o básico

O que é Apache Spark?

Spark é um projeto Apache anunciado como “computação em cluster ultrarrápida”. Ele tem uma comunidade de código aberto próspera e é o projeto Apache mais ativo no momento.

Em que idioma o Spark está escrito?

Apache Spark é escrito em Scala.

O que o Spark faz por você?

O Spark ajuda a simplificar a tarefa desafiadora e computacionalmente intensiva de processar grandes volumes de dados em tempo real ou arquivados.

Como fazer uma transmissão ao vivo no Instagram em 2021

Postagem

Como fazer uma transmissão ao vivo no Instagram em 2021
O Zen de devRant

O Zen de devRant

Estilo De Vida

Publicações Populares
Como organizar fotos no seu iPhone
Como organizar fotos no seu iPhone
Design do painel - Considerações e práticas recomendadas
Design do painel - Considerações e práticas recomendadas
‘Os EUA vão levantar diretamente com a China a questão do genocídio contra os muçulmanos uigures’
‘Os EUA vão levantar diretamente com a China a questão do genocídio contra os muçulmanos uigures’
Joe Biden corre o risco de perder o apoio dos democratas em meio a um impasse em DC
Joe Biden corre o risco de perder o apoio dos democratas em meio a um impasse em DC
Projete uma página inicial melhor com a estrutura StoryBrand
Projete uma página inicial melhor com a estrutura StoryBrand
 
HSA para desenvolvedores: computação heterogênea para as massas
HSA para desenvolvedores: computação heterogênea para as massas
Detido no aeroporto, o filho de Muhammad Ali perguntou 'Você é muçulmano?'
Detido no aeroporto, o filho de Muhammad Ali perguntou 'Você é muçulmano?'
Poluição do ar de Delhi: ‘é restritivo para as crianças, fique muito triste’, dizem os pais
Poluição do ar de Delhi: ‘é restritivo para as crianças, fique muito triste’, dizem os pais
Polícia mexicana captura capo do cartel 'La Tuta' Gomez
Polícia mexicana captura capo do cartel 'La Tuta' Gomez
Abandone MVPs, adote protótipos mínimos viáveis ​​(MVPr)
Abandone MVPs, adote protótipos mínimos viáveis ​​(MVPr)
Categorias
AprendendoÁfrica Do Oriente MédioProcesso InternoAméricasAscensão Do RemotoSaúdeMóvelFilmagemPostagemDesign De Iu

© 2023 | Todos Os Direitos Reservados

socialgekon.com