BigData caseiro. Parte 1. Prática de Spark Streaming em um cluster da AWS

Olá.

Neste artigo, instalaremos o Apache Kafka, Apache Spark, Zookeeper, Spark-shell na plataforma EC2 AWS (Amazon Web Services) em casa e aprenderemos como usar tudo.

Apresentando o Amazon Web Services


1.1 Você precisará se registrar em aws.amazon.com/console . Digite um nome e lembre-se da senha.

1.2 Configure instâncias do nó para os serviços Zookeeper e Kafka.

  • Selecione "Serviços-> EC2" no menu. Em seguida, selecione a versão do sistema operacional da imagem da máquina virtual, selecione Ubuntu Server 16.04 LTS (HVM), tipo de volume SSD, clique em "Selecionar". Prosseguimos para configurar a instância do servidor: digite "t3.medium" com os parâmetros 2vCPU, 4 GB de memória, Uso Geral Clique em "Avançar: configurando detalhes da instância".
  • Adicione o número de instâncias 1, clique em "Avançar: Adicionar armazenamento"
  • Aceitamos o valor padrão para o tamanho do disco de 8 GB e alteramos o tipo para Magnetic (nas configurações de produção com base no volume de dados e no SSD de alto desempenho)
  • Na seção "Tag Instances" em "Name", digite o nome da instância do nó "Home1" (onde 1 é apenas um número de série) e clique em "Next: ..."
  • Na seção "Configurar grupos de segurança", selecione a opção "Usar grupo de segurança existente", selecionando o nome do grupo de segurança ("Spark_Kafka_Zoo_Project") e defina as regras para o tráfego recebido. Clique em "Next: ..."
  • Role pela tela Revisão para verificar suas entradas e iniciar Iniciar.
  • Para conectar-se aos nós do cluster, você deve criar (no nosso caso, usar o existente) um par de chaves públicas para identificação e autorização. Para fazer isso, selecione o tipo de operação "Usar par existente" na lista.

Criação de chave


  • Faça o download do Putty para o cliente ou use a conexão SSH do terminal.
  • O arquivo de chave .pem usa o formato antigo por conveniência, o convertemos para o formato ppk usado pelo Putty. Para fazer isso, execute o utilitário PuTTYgen, carregue a chave no formato .pem antigo no utilitário. Convertemos a chave e salvamos (Salvar chave privada) para uso posterior na pasta pessoal com a extensão .ppk.

Lançamento de cluster


1.3 Por conveniência, renomeie os nós do cluster na notação Node01-04. Para conectar-se a nós de cluster do computador local via SSH, é necessário determinar o endereço IP do nó e seu nome DNS público / privado, selecione cada um dos nós de cluster um por um e, para a instância selecionada, anote seu nome DNS público / privado para conectar-se via SSH e para instalação Software para o arquivo de texto HadoopAdm01.txt.

Exemplo: ec2-35-162-169-76.us-west-2.compute.amazonaws.com

Instale o Apache Kafka no modo SingleNode em um nó de cluster da AWS


2.1 Para instalar o software, selecione nosso nó (copie seu DNS público) para conectar-se via SSH. Nós configuramos a conexão através do SSH. Usamos o nome salvo do primeiro nó para configurar a conexão via SSH usando o par de chaves Privado / Público "HadoopUser01.ppk" criado na cláusula 1.3. Nós vamos para a seção Conexão / Autenticação através do botão Procurar e procuramos a pasta onde anteriormente salvamos o arquivo “HadoopUserXX.ppk”.

Nós salvamos a configuração da conexão nas configurações.

2.2 Estamos conectados ao nó e usamos o login: ubuntu.

• Usando privilégios de root, atualizamos pacotes e instalamos pacotes adicionais necessários para instalação e configuração adicionais do cluster.

sudo apt-get update sudo apt-get -y install wget net-tools netcat tar 

• Instale o Java 8 jdk e verifique a versão do Java.

 sudo apt-get -y install openjdk-8-jdk 

• Para desempenho normal do nó do cluster, é necessário ajustar as configurações de troca de memória. Os swappines da VM são definidos como 60% por padrão, o que significa que, ao utilizar a memória em 60%, o sistema trocará ativamente os dados da RAM para o disco. Dependendo da versão do Linux, o parâmetro VM swappines pode ser definido como 0 ou 1:

 sudo sysctl vm.swappiness=1 

• Para salvar as configurações durante a reinicialização, adicione uma linha ao arquivo de configuração.

 echo 'vm.swappiness=1' | sudo tee --append /etc/sysctl.conf 

• Edição de entradas no arquivo / etc / hosts para uma resolução conveniente dos nomes dos nós do cluster kafka e zookeeper em endereços IP privados dos nós do cluster atribuídos.

 echo "172.31.26.162 host01" | sudo tee --append /etc/hosts 

Verificamos o reconhecimento correto dos nomes usando ping em qualquer uma das entradas.

• Faça o download das versões atuais mais recentes (http://kafka.apache.org/downloads) das distribuições kafka e scala e prepare um diretório com os arquivos de instalação.

 wget http://mirror.linux-ia64.org/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz tar -xvzf kafka_2.12-2.1.0.tgz ln -s kafka_2.12-2.1.0 kafka 

• Exclua o arquivo tgz, não precisaremos mais dele

• Vamos tentar iniciar o serviço Zookeeper, para isso:

 ~/kafka/bin/zookeeper-server-start.sh -daemon ~/kafka/config/zookeeper.properties 

O Zookeeper inicia com as opções de inicialização padrão. Você pode verificar o log:

  tail -n 5 ~/kafka/logs/zookeeper.out 

Para garantir que o daemon do Zookeeper seja iniciado, após a reinicialização, precisamos iniciar o Zookeper como um serviço em segundo plano:

 bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 

Para verificar o lançamento do Zookepper, verifique

 netcat -vz localhost 2181 

2.3 Configuramos o serviço Zookeeper e Kafka para o trabalho. Inicialmente, edite / crie o arquivo /etc/systemd/system/zookeeper.service (conteúdo do arquivo abaixo).

 [Unit] Description=Apache Zookeeper server Documentation=http://zookeeper.apache.org Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/zookeeper-server-start.sh /home/ubuntu/kafka/config/zookeeper.properties ExecStop=/home/ubuntu/kafka/bin/zookeeper-server-stop.sh [Install] WantedBy=multi-user.target 

Em seguida, para o Kafka, edite / crie o arquivo /etc/systemd/system/kafka.service (conteúdo do arquivo abaixo).

 [Unit] Description=Apache Kafka server (broker) Documentation=http://kafka.apache.org/documentation.html Requires=zookeeper.service [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/kafka-server-start.sh /home/ubuntu/kafka/config/server.properties ExecStop=/home/ubuntu/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target 

• Ative os scripts do systemd para os serviços Kafka e Zookeeper.

 sudo systemctl enable zookeeper sudo systemctl enable kafka 

• Verifique a operação dos scripts systemd.

 sudo systemctl start zookeeper sudo systemctl start kafka sudo systemctl status zookeeper sudo systemctl status kafka sudo systemctl stop zookeeper sudo systemctl stop kafka 

• Verifique a capacidade de manutenção dos serviços Kafka e Zookeeper.

 netcat -vz localhost 2181 netcat -vz localhost 9092 

• Verifique o arquivo de log do tratador.

 cat logs/zookeeper.out 

Primeira alegria


2.4 Criamos nosso primeiro tópico no servidor kafka montado.
  • É importante usar a conexão com "host01: 2181", conforme indicado no arquivo de configuração server.properties.
  • Escrevemos alguns dados no tópico.

 kafka-console-producer.sh --broker-list host01:9092 --topic first_topic     

Ctrl-C - sai do console do tópico.

• Agora tente ler os dados do tópico.

 kafka-console-consumer.sh --bootstrap-server host01:9092 --topic last_topic --from-beginning 

• Veja uma lista de tópicos kafka.

 bin/kafka-topics.sh --zookeeper spark01:2181 --list 

• Editando parâmetros do servidor kafka para ajustar a configuração de cluster único
# você precisa alterar o parâmetro ISR para 1.

 bin/kafka-topics.sh --zookeeper spark01:2181 --config min.insync.replicas=1 --topic __consumer_offsets --alter 

• Reinicie o servidor Kafka e tente conectar o ohm do consumidor novamente

• Vamos ver uma lista de tópicos.

 bin/kafka-topics.sh --zookeeper host01:2181 --list 

Configurar o Apache Spark em um cluster de nó único


Preparamos uma instância do nó com os serviços Zookeeper e Kafka instalados na AWS, agora você precisa instalar o Apache Spark, para isso:

3.1 Faça o download da distribuição mais recente do Apache Spark.

 wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.6.tgz 

• Descompacte a distribuição e crie um link simbólico para o spark e exclua os arquivos desnecessários.

 tar -xvf spark-2.4.0-bin-hadoop2.6.tgz ln -s spark-2.4.0-bin-hadoop2.6 spark rm spark*.tgz 

• Vá para o diretório sbin e execute o assistente do spark.

 ./start-master.sh 

• Conecte-se usando um navegador da web ao servidor Spark na porta 8080.

• Executar spark-slaves no mesmo nó

 ./start-slave.sh spark://host01:7077 

• Execute o spark shell com o mestre no host01.

 ./spark-shell --master spark://host01:7077 

• Se o lançamento não funcionar, adicione o caminho ao Spark no bash.

 vi ~/.bashrc #      SPARK_HOME=/home/ubuntu/spark export PATH=$SPARK_HOME/bin:$PATH 

 source ~/.bashrc 

• Execute o spark shell novamente com o mestre no host01.

 ./spark-shell --master spark://host01:7077 

3.2 Um cluster de nó único com Kafka, Zookeeper e Spark funciona. Viva!

Um pouco de criatividade


4.1 Faça o download do editor Scala-IDE (em scala-ide.org ). Começamos e começamos a escrever código. Aqui não vou mais me repetir, pois há um bom artigo sobre Habré .

4.2 Literatura e cursos úteis para ajudar:

cursos.hadoopinrealworld.com/courses/enrolled/319237
data-flair.training/blogs/kafka-consumer
www.udemy.com/apache-spark-with-scala-hands-on-with-big-data

Source: https://habr.com/ru/post/pt443912/


All Articles