Melhor resposta
No que diz respeito ao framework como um todo: neste momento o Apache Spark está um passo à frente de seus concorrentes , devido a algumas características como implementação (e integração) de ferramentas diferentes e muito úteis (Spark SQL e MLlib apenas para citar duas) e a capacidade de armazenar dados intermediários nos RDDs. Devido a esse motivo, muitos desenvolvedores estão se concentrando nisso, e meu palpite é que, até que um novo avanço na tecnologia subjacente apareça, qualquer concorrente será insignificante.
Diferentemente, se você considerar as implementações individuais no Apache Spark, você pode identificar alguns concorrentes: H2O é um desafiante do Spark MLlib, Storm (apontado por Joe) é uma alternativa ao Spark streaming e lá fora existem vários mecanismos semelhantes a SQL que podem ser comparados ao Spark SQL .
Resposta
Aqui estão alguns JARGONS do Apache Spark que estarei usando.
Trabalho: – Um trecho de código que lê alguma entrada do HDFS ou local, realiza alguns cálculos nos dados e grava alguns dados de saída.
Estágios: -Os trabalhos são divididos em estágios . Os estágios são classificados como um mapa ou estágios de redução (será mais fácil entender se você trabalhou no Hadoop e deseja correlacionar). Os estágios são divididos com base em limites computacionais, todos os cálculos (operadores) não podem ser atualizados em um único estágio. Acontece em vários estágios.
Tarefas: – Cada estágio tem algumas tarefas, uma tarefa por partição. Uma tarefa é executada em uma partição de dados em um executor (máquina).
DAG – DAG significa Directed Acyclic Graph, no presente contexto é um DAG de operadores.
Executor – O processo responsável pela execução de uma tarefa.
Driver – O programa / processo responsável por executar o Trabalho no Spark Engine
Mestre – A máquina na qual o programa Driver é executado
Slave – A máquina na qual o programa Executor é executado
Todos os trabalhos no spark incluem uma série de operadores e são executados em um conjunto de dados. Todos os operadores em um trabalho são usados para construir um DAG (Directed Acyclic Graph). O DAG é otimizado reorganizando e combinando operadores sempre que possível. Por exemplo, vamos supor que você precise enviar um trabalho Spark que contém uma operação de mapa seguida por uma operação de filtro. O otimizador Spark DAG reorganizaria a ordem desses operadores, pois a filtragem reduziria o número de registros submetidos à operação do mapa.
O Spark tem uma pequena base de código e o sistema é dividido em várias camadas. Cada camada tem algumas responsabilidades. As camadas são independentes umas das outras.
- A primeira camada é a interpretador , o Spark usa um interpretador Scala, com algumas modificações.
- Conforme você insere seu código no console do Spark (criando RDD “se aplicando operadores ), O Spark cria um gráfico do operador.
- Quando o usuário executa uma ação (como coletar), o gráfico é enviado a um Programador DAG. O programador DAG divide o gráfico do operador em (mapear e reduzir) estágios.
- Um estágio é composto de tarefas com base nas partições dos dados de entrada. O planejador DAG canaliza os operadores juntos para otimizar o gráfico. Por exemplo, muitos os operadores do mapa podem ser programados em um único estágio. Essa otimização é a chave para o desempenho do Sparks. O resultado final de um programador DAG é um conjunto de fases.
- As fases são passadas para o Agendador de tarefas . O agendador de tarefas inicia as tarefas por meio de gerenciador de cluster . (Spark Standalone / Yarn / Mesos). O agendador de tarefas não conhece dependências entre os estágios.
- O Worker executa as tarefas no Slave. Uma nova JVM é iniciada por JOB. O trabalhador sabe apenas sobre o código que é passado para ele.
O Spark armazena em cache os dados a serem processados, permitindo-me 100 vezes mais rápido do que o hadoop. O Spark usa Akka para multithreading, gerenciando o estado do executor, agendando tarefas. Ele usa Jetty para compartilhar arquivos (Jars e outros arquivos), Http Broadcast, executar Spark Web UI. Spark é altamente configurável e é capaz de utilizar os componentes existentes já existentes no Hadoop Eco-System. Isso permitiu que o spark crescesse exponencialmente e, em pouco tempo, muitas organizações já o estão usando na produção.
Você pode olhar em
para entender as coisas com mais detalhes.