1. Inicie o cluster Spark, que deve executar sbin/start-all.sh, inicie os nós mestres e vários trabalhadores. O mestre é usado principalmente como gerenciamento e monitoramento do cluster, e o nó do trabalhador é principalmente responsável pela execução de vários aplicativos. O nó principal precisa permitir que o nó do trabalhador relate seu próprio status, como a CPU e o tamanho da memória. Este processo é concluído através do mecanismo de batimentos cardíacos
2. Depois que o mestre receber as informações do relatório do trabalhador, ele fornecerá informações ao trabalhador.
3. O driver envia tarefas para Spark Cluster [A comunicação entre driver e mestre é realizada através do AkkaActor, ou seja, o mestre é um modelo de ator no modelo de comunicação assíncrono de Akkaactor e o driver é o mesmo. O motorista envia de maneira assíncrona informações de registro (RegisterApplication) de maneira assíncrona para mestre]
4. O nó principal estima o aplicativo, 7 g de memória conclui a tarefa, aloca as tarefas e cada nó do trabalhador aloca 3.5g de memória para executar as tarefas. No mestre, as tarefas de cada trabalhador são monitoradas e agendadas como um todo.
5. O nó do trabalhador recebe a tarefa e inicia a execução. Inicia o processo do executor correspondente no nó do trabalhador para executar. Cada executor possui um conceito de pool de threads, que contém vários threads de tarefas.
6. Executor retirará a tarefa do pool de threads para calcular os dados na RDDPatition, transformar operações e operações de ação.
7. O nó do trabalhador relata o status de cálculo ao nó do motorista
Crie RDDs com a coleção de paralelização local
public class JavaLocalSumApp{public static void main(String[] args){SparkConf conf = new SparkConf().setAppName("JavaLocalSumApp");JavaSparkContext sc = new JavaSparkContext(conf);List<Integer> list = Arrays.asList(1,3,4,5,6,7,8);//Create RDD through local parallelization sets <Teger> listrdd = sc.parallelize (list); // soma inteiro soma = listrdd.reduce (nova função2 <inteiro, número inteiro, número inteiro, número inteiro> () {@substituir o número inteiro public) chamado (inteiro v1, inteiro v2) Exceção {return v1+V2; A programação em Java requer definir o compilador para 1.8listdd.reduce ((v1, v2) => v1+v2)Operações deformadas e de ação
RDD: Conjunto de dados distribuídos elásticos, é uma coleção que suporta várias fontes, possui um mecanismo tolerante a falhas, pode ser armazenado em cache e suporta operações paralelas. Um RDD representa um conjunto de dados em uma partição.
RDD tem dois operadores operacionais:
Transformação: a transformação é um cálculo de atraso. Quando um RDD é convertido para outro RDD, ele não se converte imediatamente. Lembra -se das operações lógicas do conjunto de dados.
Ação: desencadeia a operação de trabalhos de faísca e realmente desencadeia o cálculo do operador de conversão.
O papel do operador de faísca
Esta figura descreve o Spark converte RDD através dos operadores durante a conversão de corrida. Os operadores são funções definidas no RDD, que podem converter e operar dados em RDD.
Entrada: Durante o programa Spark em execução, os dados são inspirados no espaço de dados externos (como armazenamento distribuído: arquivo de texto para ler HDFs, etc., e o método de paralelalização insere a coleta ou os dados do Scala) e os dados inserem o espaço de dados de tempo de execução do Spark, o converte em blocos de dados em Spark e é gerenciado através do BlockManager.
Execução: Após a entrada da entrada de dados do Spark para formar RDD, ela pode ser passada através de um operador de transformação, como filtro, etc. Operam os dados e convertem RDD em um novo RDD. Através do operador de ação, a Spark envia o trabalho. Se os dados precisarem ser multiplexados, os dados poderão ser armazenados em cache na memória através do operador de cache.
Saída: Os dados após a execução do programa serão emitidos para espalhar o espaço de tempo de execução e armazenados em armazenamento distribuído (como SaveTeStextFile de saída para HDFS) ou dados ou coleta de Scala (coleta de saída para a coleta de scala, contagem retorna dados do tipo Int)
Visão geral da operação de transformação e ação
Transformação
Mapa (func): retorna um novo conjunto de dados distribuído, composto por cada elemento original após ser convertido pela função Func
filtro (func): retorna um novo conjunto de dados, passou pela função FUNC
Flatmap (func): semelhante ao mapa, mas cada elemento de entrada será mapeado para 0 a vários elementos de saída (portanto, o valor de retorno da função FUNC é uma seq, não um único elemento)
Amostra (WithEplacement, Frac, Seed): De acordo com as sementes aleatórias fornecidas, os dados com vários fracas são amostrados aleatoriamente.
Union (OtherDataset): retorna um novo conjunto de dados, composto pelo conjunto de dados e parâmetros originais
RoupbyKey ([numTasks]): chamado em um conjunto de dados composto por pares (k, v), retornando um conjunto de dados de pares (k, seq [v]). Nota: Por padrão, 8 tarefas paralelas são usadas para agrupamento. Você pode passar nos parâmetros opcionais NumTask e definir diferentes números de tarefas de acordo com a quantidade de dados.
ReduceByKey (func, [numTasks]): usado em um conjunto de dados de pares (k, v), retorna um conjunto de dados de pares (k, v), o mesmo valor da chave é agregado juntos usando a função de redução especificada. Semelhante ao GroupByKey, o número de tarefas pode ser configurado com o segundo parâmetro opcional.
June -se (OtherDataSet, [numTasks]): chamado em um conjunto de dados de tipos (k, v) e (k, w), retornando um par (k, (v, w)) e todos os elementos em cada chave estão juntos.
GrupoWith (OtherDataSet, [numTasks]): chamado em um conjunto de dados de tipos (k, v) e (k, w) e retorna um conjunto de dados com os componentes (K, seq [v], seq [w]) tuplas. Esta operação está em outras estruturas chamadas cogroup
Cartesiano (OtherDataSet): Produto cartesiano. Mas, quando chamado nos conjuntos de dados T e U, um conjunto de dados do par (t, u) é retornado e todos os elementos interagem com o produto cartesiano.
Ações
Reduce (func): agregue todos os elementos no conjunto de dados através da função func. A função FUNC aceita 2 parâmetros e retorna um valor. Esta função deve ser associada para garantir que ela possa ser executada correta e simultaneamente
COLLECT (): No programa de driver, retorne todos os elementos do conjunto de dados como uma matriz. Isso geralmente retorna um pequeno subconjunto de dados o suficiente após o uso do filtro ou outras operações e retorna diretamente todo o conjunto RDD Collect, o que provavelmente tornará o programa de driver oom
count (): retorna o número de elementos no conjunto de dados
Tome (n): retorna uma matriz que consiste nos primeiros n elementos do conjunto de dados. Observe que esta operação não é atualmente executada em paralelo em vários nós, mas é a máquina em que o programa de driver está localizado e todos os elementos são calculados por uma única máquina (a pressão da memória do gateway aumentará e precisa ser usada com cautela)
primeiro (): retorna o primeiro elemento do conjunto de dados (semelhante a tomar (1))
SAVEASTEXTFILE (PATH): salve os elementos do conjunto de dados na forma de um arquivo de texto no sistema de arquivos local, HDFS ou qualquer outro sistema de arquivos suportado pelo Hadoop. O Spark chamará o método de tostragem de cada elemento e o converterá em uma linha de texto no arquivo.
SAVEASESTEENCENCEFILE (PATH): salve os elementos do conjunto de dados no formato do sequencefile no diretório especificado, sistema local, HDFS ou qualquer outro sistema de arquivos suportado pelo Hadoop. Os elementos do RDD devem ser compostos por pares de valor-chave, e todos implementam a interface gravável do Hadoop, ou podem ser convertidos em gravidez (Spark inclui conversões de tipos básicos, como int, dupla, string, etc.)
foreach (func): execute a função funct em cada elemento do conjunto de dados. Isso geralmente é usado para atualizar uma variável acumuladora ou para interagir com um sistema de armazenamento externo
Processo de execução do WordCount
Resumir
O exposto acima é todo o conteúdo deste artigo sobre os princípios da arquitetura de agendamento de faíscas. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!