Articles

Introduction to Apache Spark with Examples and Use Cases

i first heard of Spark in late 2013 when I became interested in Scala, the language in which Spark is written. Algum tempo depois, eu fiz um divertido projeto de ciência dos dados tentando prever a sobrevivência no Titanic. Isso acabou por ser uma ótima maneira de ser introduzido ainda mais para estimular conceitos e programação. Eu recomendo altamente para qualquer aspirante Spark developers Procurando um lugar para começar.atualmente, o Spark está sendo adotado por grandes jogadores como Amazon, eBay e Yahoo! Muitas organizações executam faíscas em aglomerados com milhares de nós. De acordo com a FAQ faísca, o maior aglomerado conhecido tem mais de 8.000 nós. Na verdade, Spark é uma tecnologia que vale a pena tomar nota e aprender sobre.este artigo fornece uma introdução à faísca, incluindo casos de uso e exemplos. Ele contém informações do site Apache Spark, bem como o livro Learning Spark – Lightning-Fast Big Data Analysis.o que é a faísca Apache? An Introduction

Spark is an Apache project advertised as “lightning fast cluster computing”. Tem uma próspera comunidade de código aberto e é o projeto Apache mais ativo no momento.

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, Spark assumiu Hadoop, completando o 100 TB Daytona GraySort concurso 3x mais rápido em um décimo do número de máquinas e também se tornou o motor de código aberto mais rápido para classificar um petabyte.

Spark também torna possível escrever código mais rapidamente, uma vez que você tem mais de 80 operadores de alto nível à sua disposição. Para demonstrar isso, vamos dar uma olhada no ” Olá Mundo!”of BigData: the Word Count example. Escrito em Java para MapReduce tem cerca de 50 linhas de código, enquanto em Spark (e Scala) Você pode fazê-lo tão simplesmente como este:

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 fora da caixa. Usando REPL, pode-se testar o resultado de cada linha de código sem primeiro precisar de código e executar toda a tarefa. O caminho para o código de trabalho é, portanto, muito mais curto e a análise de dados ad hoc é possível.

As principais características 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, Colmeia, HBase, Cassandra, etc.)
  • Pode ser executado em clusters gerenciados por fios Hadoop ou Mesos Apache, e também pode ser executado autônomo

o núcleo Spark é complementado por um conjunto de bibliotecas poderosas e de nível superior que podem ser usados sem problemas na mesma aplicação. Essas bibliotecas atualmente incluem SparkSQL, Spark Streaming, MLlib (para aprendizado de máquina), e GraphX, cada um dos quais é mais detalhado neste artigo. Bibliotecas Spark adicionais e extensões estão atualmente em desenvolvimento também.

spark libraries and extensions

Spark Core

Spark Core is the base engine for large-scale parallel and distributed data processing. É responsável por:

  • memory management and fault recovery
  • agendamento, distribuição e monitorização de postos de trabalho num cluster
  • interagindo com sistemas de armazenamento

Spark introduz o conceito de um RDD (resiliente dataset distribuído), uma coleção imutável tolerante a falhas e distribuída de objetos que podem ser operados 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 driver.os RDD suportam dois tipos de operações:

  • transformações são operações (como mapa, filtro, união, etc.) que são realizadas em um RDD e que produzem um novo RDD contendo o resultado.
  • ações são operações (tais como reduzir, contar, primeiro, e assim por diante) que retornam um valor após executar um cálculo em um RDD.

As transformações na faísca são “preguiçosas”, o que significa que eles não computam os seus resultados imediatamente. Em vez disso, eles apenas “lembram” a operação a ser realizada e o conjunto de dados (por exemplo, arquivo) para o qual a operação deve ser realizada. As transformações só são realmente computadas quando uma ação é chamada e o resultado é devolvido ao programa driver. Este design permite que a Spark funcione de forma mais eficiente. Por exemplo, se um arquivo grande foi transformado de várias maneiras e passou para a primeira ação, Spark só 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 recomposto cada vez que você executar uma ação sobre ele. No entanto, você também pode persistir um RDD na memória usando o método persist ou cache, caso em que Spark vai manter os elementos em torno do cluster para um acesso muito mais rápido da próxima vez que você consulta ele.

SparkSQL

SparkSQL é um componente de faísca que suporta a pesquisa de dados via SQL ou através da linguagem de consulta da colmeia. Ele se originou como o Apache Hive port para correr em cima da faísca (no lugar de MapReduce) e agora está integrado com a pilha de faíscas. Além de fornecer suporte para várias fontes de dados, torna 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 a colmeia:

// 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 HiveQLsqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

Spark Streaming

Spark Streaming suporta o processamento em tempo real de dados de streaming, tais como arquivos de log de servidores web de produção (por exemplo Apache Flume e HDFS/S3), redes sociais como o Twitter, e várias filas de mensagens como o Kafka. Sob o capô, Spark Streaming recebe os fluxos de dados de entrada e divide os dados em lotes. Em seguida, eles são processados pelo motor de faísca e geram fluxo final de resultados em lotes, como descrito abaixo.

spark streaming

a Spark Streaming API coincide estreitamente com a do núcleo Spark, tornando mais fácil para os programadores trabalhar nos mundos de ambos os lotes e dados de streaming.

MLlib

MLlib é uma máquina de aprendizagem biblioteca que fornece vários algoritmos projetado para dimensionar em um cluster para a classificação, regressão, agrupamento, filtragem colaborativa, e assim por diante (confira Toptal artigo sobre aprendizado de máquina para obter mais informações sobre esse tópico). Alguns destes algoritmos também trabalham com dados de streaming, como regressão linear usando mínimos quadrados ordinários ou clustering K-means (e mais no caminho). Apache Mahout (uma biblioteca de aprendizagem de máquinas para Hadoop) já se afastou de MapReduce e uniu forças na Spark MLlib.

GraphX

graphx

GraphX é uma biblioteca para manipulação de gráficos e desempenho gráfico-operações paralelas. Ele fornece uma ferramenta uniforme para ETL, análise exploratória e computação gráfica iterativa. Além de operações integradas para manipulação de grafos, ele fornece uma biblioteca de algoritmos de grafos comuns, como PageRank.

How to Use Apache Spark: Event Detection Use Case

Now that we have answered the question “What is Apache Spark?”, vamos pensar em que tipo de problemas ou desafios ele poderia ser usado mais eficazmente.deparei-me com um artigo recentemente sobre um experimento para detectar um terremoto através da análise de um fluxo de Twitter. Curiosamente, foi mostrado que esta técnica era provável para informá-lo de um terremoto no Japão mais rápido do que a Agência Meteorológica do Japão. Embora eles tenham usado tecnologia diferente em seu artigo, eu acho que é um grande exemplo para ver como poderíamos colocar faísca para usar com pedaços de código simplificados e sem o código de cola.em primeiro lugar, teríamos de filtrar tweets que pareçam relevantes como “terramoto” ou “tremor”. Poderíamos facilmente usar o streaming de faísca para esse fim da seguinte forma:

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

então, teríamos que executar alguma análise semântica nos tweets para determinar se eles parecem estar a referir-se a uma ocorrência de terremoto atual. Tweets como ” terramoto!”ou” Now it is shaking”, por exemplo, seriam considerados jogos positivos, enquanto tweets como “Attending an Earthquake Conference” ou “The earthquake yesterday was scary” não seriam. Os autores do papel usaram uma máquina vetorial de suporte (SVM) para este propósito. Faremos o mesmo aqui, mas também podemos tentar uma versão de streaming. Um exemplo de código resultante do MLlib seria o 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 modelval numIterations = 100val 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 (como descrito no artigo). Note-se que, para tweets com serviços de localização do Twitter ativados, nós também extrairíamos a localização do terremoto. Armado com este conhecimento, poderíamos usar SparkSQL e consultar uma tabela de colmeia existente (armazenando usuários interessados em receber notificações de terremotos) para recuperar seus endereços de E-mail e enviar-lhes um email de aviso personalizado, como segue:

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

outros casos de Uso de faísca Apache

potenciais casos de Uso de faísca para se estender muito além da detecção de terremotos, é claro.aqui está uma rápida (mas certamente nem de longe exaustiva!) amostragem de outros casos de uso que exigem lidar com a velocidade, variedade e volume de Big Data, para que o Spark é tão bem adaptado:

Na indústria do jogo, o processamento e a descoberta de padrões a partir do potencial firehose da tempo real eventos no jogo e ser capaz de responder-lhes de imediato é uma capacidade que pode render um negócio lucrativo, para fins de retenção do jogador, publicidade direcionada, publicidade, auto-ajuste do nível de complexidade, e assim por diante.

na indústria do comércio electrónico, a informação sobre transacções em tempo real pode ser passada para um algoritmo de agrupamento de streaming como o k-means ou filtragem colaborativa como o ALS. Os resultados poderiam até ser combinados com outras fontes de dados não estruturadas, tais como comentários de clientes ou revisões de produtos, e utilizados para melhorar e adaptar constantemente as recomendações ao longo do tempo com novas tendências.na indústria financeira ou de segurança, a pilha de faíscas pode ser aplicada a um sistema de detecção de fraude ou intrusão ou a uma autenticação baseada no risco. Ele poderia alcançar o top-notch resultados da colheita de grandes quantidades de logs arquivados, combinando-a com fontes de dados externas, como informações sobre violações de dados e contas comprometidas (ver, por exemplo, https://haveibeenpwned.com/) e informações da conexão e/ou de pedido, como geolocalização de IP ou tempo.

conclusão

Para resumir, Spark ajuda a simplificar a tarefa desafiadora e computacionalmente intensiva de processamento de grandes volumes de dados em tempo real ou arquivados, estruturados e não estruturados, integrando perfeitamente capacidades complexas relevantes, tais como aprendizagem de máquinas e algoritmos de grafos. Faísca traz grande processamento de dados para as massas. Vejam só!