Instalação e implantação de cluster autônomo Flink

Introdução à arquitetura Flink

A instalação e implantação do Flink são divididas principalmente em modo local (máquina única) e modo de cluster. O modo local pode ser usado descompactando diretamente sem modificar nenhum parâmetro. Geralmente é usado ao fazer alguns testes simples. O modo local não será repetido em nosso curso. O modo de cluster inclui:
Independente.
Flink on Yarn.
Mesos.
Docker.
Kubernetes.
AWS.
Goole Compute Engine.
Aqui, primeiro implante o cluster de modo independente

Estrutura básica

Todo o sistema Flink é composto principalmente por dois componentes, nomeadamente JobManager e TaskManager. A arquitetura Flink também segue os princípios de design da arquitetura Master-Slave. O JobManager é o nó Master e o TaskManager é o nó Worker (Slave). A comunicação entre todos os componentes é feita por meio do Akka Framework, incluindo o status da tarefa e o esquema de informações de acionamento do Checkpoint é o seguinte:
Insira a descrição da imagem aqui
Cliente
O cliente é responsável por enviar tarefas ao cluster, o conector JobManager Akka construído e enviar tarefas ao JobManager, obtenha o status de execução da tarefa interagindo com o JobManager. Os clientes podem enviar tarefas por CLI ou usando Flink WebUI. Você também pode especificar a porta de rede RPC do JobManager no aplicativo para construir ExecutionEnvironment. Envie o aplicativo Flink.
JobManager
JobManager é responsável pelo agendamento de tarefas e gerenciamento de recursos de todo o Flink A partir do cliente Obtenha o aplicativo enviado e, em seguida, aloque recursos TaskSlots para o aplicativo enviado de acordo com o uso de TaskSlot no TaskManager no cluster e instrua o TaskManger a iniciar o aplicativo. JobManager é equivalente ao nó Master de todo o cluster, e há apenas um JobManager ativo em todo o cluster, responsável pelo gerenciamento de tarefas e gerenciamento de recursos de todo o cluster.
O JobManager e o TaskManager se comunicam por meio do Actor System para obter o status de execução da tarefa e enviar o status de execução ao cliente por meio do Actor System. Ao mesmo tempo, no processo de execução da tarefa, Flink JobManager acionará a operação de Checkpoints. Depois que cada nó TaskManager recebe a instrução de gatilho de Checkpoint, ele conclui a operação de Checkpoint. Todos os processos de coordenação de checkpoint são concluídos no Flink JobManager. Quando a tarefa for concluída, Flink retornará as informações da execução da tarefa ao cliente e liberará os recursos no TaskManager para o próximo envio de tarefa.

TaskManager
TaskManager é equivalente ao nó escravo de todo o cluster, responsável pela execução de tarefas específicas e aplicação de recursos e gerenciamento de tarefas correspondentes em cada nó. O cliente compila e empacota o aplicativo Flink preparado, envia-o ao JobManager e, em seguida, o JobManager atribui a tarefa ao nó TaskManager com recursos de acordo com a situação do recurso do TaskManager registrado e, a seguir, inicia e executa a tarefa. O TaskManager recebe as tarefas que precisam ser implantadas do JobManager e, a seguir, usa o recurso Slot para iniciar a Tarefa, estabelece uma conexão de rede para acesso aos dados, recebe os dados e inicia o processamento dos dados. Ao mesmo tempo, a interação de dados entre TaskManagers é realizada por meio de fluxo de dados.
A operação de tarefa do Flink é, na verdade, multiencadeada, o que é muito diferente do processo MapReduce multi-JVM. O Fink pode melhorar muito a eficiência do uso da CPU. Os recursos do sistema são compartilhados entre várias tarefas e tarefas por meio do TaskSlot. Gerenciamento eficaz de recursos gerenciando vários Pools de recursos do TaskSlot em um TaskManager

Instalação e implantação

Preparação de documentos e planejamento de implantação

Preparamos três servidores server01, server02, server03
server01 como jobManager (master) server01, server02, server03 como TaskManager (slave) server01 como master e slave para
baixar e instalar o arquivo flink-1.9.1-bin-scala_2.12 .tgz, endereço de download: https://download.csdn.net/download/zhangxm_qz/12732760

Faça upload de arquivos para o servidor e descompacte

Faça upload do arquivo flink-1.9.1-bin-scala_2.12.tgz para o diretório server01 server / opt / apps
e descompacte-o da seguinte forma:

[root@server01 apps]# ll
total 750912
lrwxrwxrwx.  1 root  root         11 Jun 14 22:54 flink -> flink-1.9.1
drwxr-xr-x. 10   502 games       156 Sep 30  2019 flink-1.9.1
-rw-r--r--.  1 root  root  246364329 Aug 20  2020 flink-1.9.1-bin-scala_2.12.tgz

Modifique o arquivo de configuração

Acesse o diretório conf em flink para modificar o arquivo de configuração flink-conf.yaml e modifique os dois itens a seguir

jobmanager.rpc.address: server01   # 修改master节点服务器 我这里是 server01 做master
taskmanager.numberOfTaskSlots: 3 # taskmanager.numberOfTaskSlot 参数默认值为 1,修改成 3。表示数每一个TaskManager 上有 3 个 Slot

Modifique o conteúdo do arquivo slaves da seguinte forma:

"flink-conf.yaml" 259L, 10326C written
[root@server01 conf]# vi slaves
server01
server02
server03
~

Distribuir arquivos de instalação para outros servidores

Copie o diretório flink modificado para server02 e server03, o comando é o seguinte:

[root@server01 apps]# scp -r flink-1.9.1  root@server02:/opt/apps 
[root@server01 apps]# scp -r flink-1.9.1  root@server03:/opt/apps 

Inicie o cluster

Execute o comando start-cluster.sh em bin para iniciar o cluster da seguinte maneira:

[root@server01 flink]# bin/start-cluster.sh 
Starting cluster.
Starting standalonesession daemon on host server01.
Starting taskexecutor daemon on host server01.
Starting taskexecutor daemon on host server02.
Starting taskexecutor daemon on host server03.

Visite webUI

Após a inicialização bem-sucedida, visite http: // server01: 8081 para acessar flinkwebUI da seguinte forma:
Insira a descrição da imagem aqui

Upload de tarefas para o cluster

Desenvolver programa de exemplo WordCount

código mostrado abaixo

package com.test.flink.wc

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

object StreamWordCount {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val streamEnv: StreamExecutionEnvironment =
      StreamExecutionEnvironment.getExecutionEnvironment
    //导入隐式转换,建议写在这里,可以防止IDEA代码提示出错的问题
    import org.apache.flink.streaming.api.scala._
    //读取数据
    val stream: DataStream[String] = streamEnv.socketTextStream("server01",8888)
    //转换计算
    val result: DataStream[(String, Int)] = stream.flatMap(_.split(","))
      .map((_, 1))
      .keyBy(0)
      .sum(1)
    //打印结果到控制台
    result.print()
    //启动流式处理,如果没有该行代码上面的程序不会运行
    streamEnv.execute("wordcount")
  }
}

Faça upload de tarefas para o cluster Flink por meio de comandos

Faça upload do pacote jar do programa para o local server01 da seguinte maneira:

[root@server01 flink]# ll appjars
total 24
-rw-r--r--. 1 root root 22361 Aug 20  2020 test-1.0-SNAPSHOT.jar

Executar tarefa de upload de comando

Como o programa precisa se conectar à porta 8888 do server01, você deve primeiro iniciar o programa de envio de dados por meio do seguinte comando, caso contrário, a tarefa falhará ao iniciar devido a uma falha de conexão
. Execute o seguinte comando no server01 (se o comando não existir , execute yum install -y nc para instalar):

[root@server01 flink]# nc -lk 8888

Faça o upload do pacote para o motor flink

[root@server01 flink]# bin/flink run -d -c com.test.flink.wc.StreamWordCount ./appjars/test-1.0-SNAPSHOT.jar 
Starting execution of program
Job has been submitted with JobID 75fd7304caa7d429b343b77dff4ce65d

Ao enviar uma string para o manipulador no terminal, você pode ver a execução da tarefa no webUI

[root@server01 flink]# nc -lk 8888
a
a
a
a
a
a
a
a

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Carregar tarefas para o cluster Flink por meio de webUI

Você também pode fazer upload do programa de tarefas por meio da interface webUI

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/zhangxm_qz/article/details/108124130
Recomendado
Clasificación