Apache Spark tem sua base arquitetônica no resiliente conjunto de dados distribuídos (RDD), um multiset de leitura apenas de itens de dados distribuídos por um conjunto de máquinas, que é mantido de uma forma tolerante a falhas. A API Dataframe foi lançada como uma abstração no topo do RDD, seguida pela API Dataset. In Spark 1.x, the RDD was the primary application programming interface (API), but as of Spark 2.x o uso da API do conjunto de dados é encorajado mesmo que a API RDD não seja depreciada. A tecnologia RDD ainda está subjacente à API Dataset.,
Faísca e a sua RDDs foram desenvolvidos em 2012, em resposta às limitações no MapReduce cluster paradigma de computação, o que força um determinado linear de fluxo de dados estrutura de programas distribuídos: MapReduce programas de leitura de dados de entrada a partir do disco, o mapa de uma função entre os dados, reduzir os resultados do mapa, e armazenar os resultados da redução no disco. O RDDs da Spark funciona como um conjunto de trabalho para programas distribuídos que oferece uma forma (deliberadamente) restrita de memória compartilhada distribuída.,
Spark facilita a implementação de ambos os algoritmos iterativos, que visitam o seu conjunto de dados várias vezes em um loop, e a análise de dados interativa/exploratória, ou seja, o repetido tipo de banco de dados questionando os dados. A latência de tais aplicações pode ser reduzida por várias ordens de magnitude em comparação com a implementação do Apache Hadoop MapReduce.Entre a classe de algoritmos iterativos estão os algoritmos de treinamento para sistemas de aprendizagem de máquinas, que formaram o ímpeto inicial para o desenvolvimento da faísca Apache.
Apache Spark requer um gerenciador de clusters e um sistema de armazenamento distribuído., Para gerenciamento de clusters, Spark suporta standalone (native Spark cluster, onde você pode lançar um cluster manualmente ou usar os scripts de lançamento fornecidos pelo pacote install. Também é possível executar estes demônios em uma única máquina para testes), fio Hadoop, Mesos Apache ou Kubernetes. Para armazenamento distribuído, Spark pode interface com uma grande variedade, incluindo Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system, ou uma solução personalizada pode ser implementada., Spark também suporta um modo local pseudo-distribuído, geralmente usado apenas para fins de desenvolvimento ou teste, onde o armazenamento distribuído não é necessário e o sistema de arquivos local pode ser usado em vez disso; em tal cenário, Spark é executado em uma única máquina com um executor por núcleo CPU.
Spark CoreEdit
Spark Core é a base do projeto global. Ele fornece distribuição de tarefas de envio, agendamento e funcionalidades básicas de E/S, expostas através de uma interface de programação de aplicações (para Java, Python, Scala, etc .,NET e R) centrados na abstração RDD (a API Java está disponível para outras linguagens JVM, mas também é utilizável para algumas outras linguagens não-JVM que podem se conectar ao JVM, como Julia). Esta interface espelha um modelo funcional/de ordem superior de programação: UM programa” driver ” invoca operações paralelas, como mapa, filtro ou reduzir em um RDD, passando uma função para Spark, que, em seguida, programa a execução da função em paralelo no cluster. Estas operações, e outras como a joins, tomam RDDs como input e produzem novos RDDs., RDDs são imutáveis e suas operações são preguiçosas; a tolerância a falhas é alcançada mantendo o controle da “linhagem” de cada RDD (a sequência de operações que o produziu) para que possa ser reconstruído no caso de perda de dados. RDDs podem conter qualquer tipo de objetos Python, .net, Java ou Scala.
além do estilo funcional de programação orientado a RDD, Spark fornece duas formas restritas de variáveis compartilhadas: as variáveis de transmissão referenciam dados apenas de leitura que precisam estar disponíveis em todos os nós, enquanto acumuladores podem ser usados para programar reduções em um estilo imperativo.,
um exemplo típico de programação funcional RDD-centric é o seguinte programa Scala que calcula as frequências de todas as palavras que ocorrem em um conjunto de arquivos de texto e imprime as mais comuns. Cada mapa, flatMap (uma variante do mapa) e reduceByKey leva uma função anônima que executa uma operação simples em um único item de dados (ou um par de itens), e aplica seu argumento para transformar um BDR, em um novo RDD.,
Spark SQLEdit
Spark SQL é um componente no topo do Spark Core que introduziu uma abstração de dados chamada DataFrames, que fornece suporte para dados estruturados e semi-estruturados. O Spark SQL oferece uma linguagem específica ao Domínio (DSL) para manipular os DataFrames em Scala, Java, Python ou .NET. também oferece suporte à linguagem SQL, com interfaces de linha de comandos e servidor ODBC/JDBC. Embora os DataFrames não tenham a verificação do tipo de compile-time oferecida pelo RDDs, como o Spark 2.0, o conjunto de dados fortemente digitado é totalmente suportado pela Spark SQL também.,
Spark StreamingEdit
Spark Streaming usa a capacidade de programação rápida do Spark Core para executar análises de streaming. Ele ingere dados em mini-lotes e realiza transformações RDD nesses mini-lotes de dados. Este projeto permite que o mesmo conjunto de código de aplicação escrito para análise de lotes seja usado em análise de streaming, facilitando assim a implementação fácil da arquitetura lambda. No entanto, esta conveniência vem com a penalidade de latência igual à duração do mini-lote., Outros motores de dados em streaming que processam eventos por evento em vez de em mini-lotes incluem tempestade e o componente de streaming de Flink. Spark Streaming tem suporte embutido para consumir de Kafka, Flume, Twitter, ZeroMQ, Kinesis, e sockets TCP/IP.na faísca 2.x, uma tecnologia separada baseada em conjuntos de dados, chamada streaming estruturado, que tem uma interface de nível superior também é fornecido para suportar streaming.
faísca pode ser implantada em um centro de dados tradicional nas instalações, bem como na nuvem.,
MLlib de Aprendizagem de Máquina LibraryEdit
Faísca MLlib é um sistema distribuído de aprendizado de máquina framework no topo da Faísca Núcleo que, em grande parte devido à distribuídos baseados em memória de Ignição arquitetura, é o máximo de nove vezes mais rápido do que o baseado em disco implementação utilizada pelo Apache Mahout (de acordo com benchmarks realizados pelo MLlib desenvolvedores contra o alternating least squares (ALS) implementações, e antes de Mahout em si ganhou uma Faísca de interface), e escalas melhor do que Vowpal Wabbit.,, Gradiente-Aumento da Árvore
GraphXEdit
GraphX é distribuído gráfico de processamento de quadro em cima de Apache Faísca., Porque é baseado em RDDs, que são imutáveis, grafos são imutáveis e, portanto, GraphX é inadequado para grafos que precisam ser atualizados, muito menos de uma maneira transacional como um banco de dados de grafos. GraphX provides two separate APIs for implementation of massively parallel algorithms (such as PageRank): a Pregel abstraction, and a more general MapReduce-style API. Ao contrário de seu antecessor Bagel, que foi formalmente depreciado em Spark 1.6, GraphX tem suporte completo para grafos de propriedade (grafos onde propriedades podem ser anexadas a arestas e vértices).,
GraphX pode ser visto como sendo a versão Spark in-memory do Apache Giraph, que utilizou o disco Hadoop MapReduce.
Como Apache Spark, GraphX inicialmente começou como um projeto de pesquisa na UC Berkeley AMPLab e Databricks, e mais tarde foi doado para a Apache Software Foundation e o projeto Spark.
Leave a Reply