modo autônomo
00_ premissa:
Java foi instalado (java1.8.0_241)
Hadoop foi instalado (hadoop2.10.0)
01_Introdução
Queremos construir um cluster Spark composto de Master + Slave e o Spark é executado no cluster.
02_configuração de início autônomo
2.1 Copie o Spark e nomeie-o como Spark autônomo
cp -r spark-2.4.0-bin-hadoop2.7 spark-startalone
2.2 Digite conf, configure spark-env.sh, determine master
cd conf
for i in .template; do mv ${i} ${i%.}; done
vi spark-env.sh
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077
2.3 Modifique o arquivo de escravos e determine o trabalhador
vi slaves
node1
node2
node3
2.4 Adicione JAVA_HOME sob o arquivo sbin / spark-config.sh
export JAVA_HOME=/usr/java/jdk1.8.0_241
2.5 Configurar variáveis de ambiente
vi /etc/profile
export SPARK_HOME=/usr/hadoop/spark-standalone
export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin
source /etc/profile
2.6 Distribuir spark-standalone para nós do cluster
scp -r spark-standalone / node2:/usr/hadoop/
scp -r spark-standalone / node3:/usr/hadoop/
2.7 Inicie o cluster em modo autônomo
sbin/start-all.sh
2.8 A configuração básica do cluster autônomo do Spark está concluída
Porta 8080 para acessar masterUI
Porta 8081 para acessar o workeUI
4040 port driverUI, você pode vê-lo antes da execução, se você precisar vê-lo a qualquer momento, você precisa configurar o serviço de histórico.
2.9 Exemplo 1 - Calculando Pi
[root@node1 spark-standalone]# bin/spark-submit \
> --master spark://node1:7077 \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100
2.10 Exemplo de contagem de 2 palavras no shell
[root@node1 spark-standalone]# bin/spark-shell --master spark://node1:7077
Crie um diretório de entrada, escreva um arquivo, escreva algumas palavras nele e depois leia, divida, embaralhe e conte no shell. É quase igual ao local acima.
03_Serviço de histórico de configuração (parâmetros gerais e individuais podem ser modificados de acordo com os seus)
3.1 Modifique o arquivo spark-default.conf
vi spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:8020/spark-logs
3.2 Depois de entrar no diretório de instalação do hadoop, execute o comando:
bin/hadoop fs -mkdir /spark-logs
Se você não está preocupado se o comando foi executado com sucesso, você pode iniciar o hadoop e visitar a interface correspondente à porta 50070 para verificar se o diretório foi gerado.
http://192.168.223.100:50070/
3.3 Modifique o arquivo spark-env.sh e adicione a seguinte configuração
vi spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"
(1) spark.history.ui.port
O número da porta do WebUI do History Server, o padrão é 18080 ou você mesmo pode defini-lo.
(2) spark.history.retainedApplications
Defina a quantidade de registros do histórico da aplicação armazenados no Cache, o padrão é 50, caso ultrapasse este valor, os antigos serão apagados da memória. Mas não será excluído do HDFS.
Nota: O número de arquivos de cache não significa o número total de arquivos realmente exibidos. Significa apenas que os arquivos que não estão no cache podem precisar ser lidos do disco rígido, com uma pequena diferença na velocidade.
(3) spark.history.fs.logDirectory
Informe ao Spark History Server (Spark History Service) qual diretório registra as informações do log de tarefas. Se esta opção estiver configurada no arquivo neste momento, você não precisa especificar um diretório específico ao iniciar o Spark History Server posteriormente. O diretório pode ser qualquer sistema de arquivos compatível com APIs do Hadoop.
3.4 Distribuir o arquivo modificado para outras máquinas virtuais
scp spark-defaults.conf node2:/usr/hadoop/spark-standalone/conf/
scp spark-defaults.conf node3:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/
3.5 Iniciar e visualizar serviço de histórico do Spark
start-dfs.sh
sbin/start-all.sh
sbin/start-history-server.sh
jps
http://192.168.223.100:18080/
3.6 Executar uma pequena tarefa
bin/spark-submit \
--master spark://node1:7077 \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.4.0.jar 10000
04_master-HA
4.1 Princípio de alta disponibilidade
O cluster autônomo tem apenas um mestre. Se o mestre falhar, o aplicativo não poderá ser enviado, o que significa que há um único ponto de falha. O master precisa ser configurado para alta disponibilidade, e a alta disponibilidade do Master pode usar fileSystem (sistema de arquivos) e zookeeper (serviço de coordenação distribuída).
(1) Recuperação de ponto único com base no sistema de arquivos - usado apenas em ambiente de desenvolvimento ou teste
O fileSystem tem apenas a função de armazenamento e pode armazenar as informações de metadados do Master. O Master construído com o fileSystem está altamente disponível. Quando o Master falha, é necessário iniciar manualmente outro Master em espera. Este método não é recomendado.
(2) Standby Masters baseado em zookeeper - pode ser usado em ambiente de produção
O Zookeeper tem funções de seleção e armazenamento, que podem armazenar as informações dos dados do elemento do Master. O Master construído com o zookeeper está altamente disponível. Quando o Master desliga, o Master em standby muda automaticamente. Recomenda-se usar este método para construir o HA do Master. Para tornar a eleição sem controvérsia, um número ímpar de nós é necessário.
4.2 Configurar HA
A solução HA é muito simples de usar. Primeiro inicie um cluster ZooKeeper e, em seguida, inicie o mestre em nós diferentes. Observe que esses nós precisam ter a mesma configuração de zookeeper.
4.2.1 Modificar arquivo spark-env.sh
vi spark-env.sh
#SPARK_MASTER_HOST=node1
#SPARK_MASTER_PORT=7077
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-nodes"
Spark.deploy.recoveryMode: modo de recuperação
spark.deploy.zookeeper.url: Endereço do servidor do
ZooKeeper spark.deploy.zookeeper.dir: arquivos e diretórios que salvam informações de metadados do cluster. Incluindo informações do trabalhador, motorista e aplicativo.
4.2.2 Distribuir o arquivo de configuração acima
scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/
4.2.3 Iniciar serviço de centelha
start-dfs.sh
start-yarn.sh
sbin/start-all.sh
sbin/start-history-server.sh
zkServer.sh start
sbin/start-master.sh
4.3 Ver serviço
O acesso à interface de gerenciamento de faísca do mestre está ativo, e o outro mestre está pendente. Se o primeiro cair, o zookeeper organiza o segundo para assumir.
http://192.168.223.100:8080/
http://192.168.223.101:8080/
4.4 Teste HA
Teste o interruptor principal / standby
- Use jps no primeiro mestre para ver a id do processo mestre
- Use kill -9 número de id para forçar o fim do processo
- Depois de um tempo, atualize a interface da web do segundo mestre e descubra que o segundo mestre está vivo
4.5 Realize pequenas tarefas
4.5.1 Estatísticas de frequência de palavras
bin/spark-shell --master spark://node1:7077,node2:7077,node3:7077
O seguinte é semelhante ao local, em caso de dúvida, consulte outro modo de operação 1 da série de faísca: configuração do modo local
4.5.2 Exemplo de cálculo
bin/spark-submit \
> --master spark://node1:7077,node2:7077,node3:7077 \
> --deploy-mode client \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100
4.5.3 Exemplo de cálculo
bin/run-example --master spark://node1:7077,node2:7077,node3:7077 SparkPi
Nota: os exemplos estão incluídos