Crie um cluster Spark com instâncias do ECS aprimoradas por eRDMA e execute o Benchmark para medir o desempenho de processamento de carga com latência ultrabaixa.
Contexto
O Benchmark é uma ferramenta de teste de desempenho que mede o tempo de execução da carga, a taxa de transmissão, o throughput e a utilização de recursos.
Etapa 1: Prepare o ambiente
Configure o cluster Hadoop, instale os drivers necessários e configure o eRDMA antes de executar o teste de Benchmark.
-
Prepare um ambiente Hadoop. Ignore esta etapa se já existir um cluster Hadoop.
-
Requisitos de hardware e software
Prepare as seguintes versões do Hadoop e do Spark, além das instâncias do ECS:
Versão do Hadoop: Hadoop 3.2.1.
Versão do Spark: Spark 3.2.1.
-
Instâncias do ECS
Tipo de instância: Consulte Visão geral.
vCPUs por instância: 16.
Quantidade de instâncias: quatro (um nó mestre e três nós de trabalho).
-
Instalação
-
Faça login no nó mestre. Consulte Fazer login em uma instância Linux usando o Workbench.
-
Configure o eRDMA.
Instale os drivers necessários. Consulte Ativar eRDMA em instâncias de nível empresarial.
-
Configure as definições de rede.
-
Abra o arquivo
hosts:vim /etc/hosts -
Pressione I para entrar no modo de inserção e modifique o conteúdo do arquivo:
192.168.201.83 poc-t5m0 master1 192.168.201.84 poc-t5w0 192.168.201.86 poc-t5w1 192.168.201.85 poc-t5w2NotaSubstitua os endereços IP pelos endereços reais das suas interfaces eRDMA (ERIs).
Pressione Esc, insira
:wqe pressione Enter para salvar e sair.
-
-
Configure as definições do YARN.
NotaIgnore esta subetapa se a NIC padrão da instância do ECS suportar eRDMA.
-
Abra o arquivo yarn-env.sh:
cd /opt/hadoop-3.2.1/etc/hadoop vim yarn-env.sh -
Pressione I para entrar no modo de inserção e adicione o seguinte conteúdo:
RDMA_IP=`ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1` export YARN_NODEMANAGER_OPTS="-Dyarn.nodemanager.hostname=$RDMA_IP"NotaSubstitua eth1 pelo nome real da sua ERI.
Pressione Esc, insira
:wqe pressione Enter para salvar e sair.
-
-
Configure o Spark.
NotaIgnore esta subetapa se a NIC padrão da instância do ECS suportar eRDMA.
-
Abra o arquivo spark-env.sh:
cd /opt/spark-3.2.1-bin-hadoop3.2/conf vim spark-env.sh -
Pressione I para entrar no modo de inserção e adicione o seguinte conteúdo:
export SPARK_LOCAL_IP=`/sbin/ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1`NotaSubstitua eth1 pelo nome real da sua ERI.
Pressione Esc, insira
:wqe pressione Enter para salvar e sair.
-
-
Inicie o HDFS e o YARN:
$HADOOP_HOME/sbin/start-all.sh
Etapa 2: Baixe o pacote de instalação do Benchmark
Baixe e extraia o pacote de instalação do Benchmark para obter o plug-in Spark eRDMA e as dependências.
-
Baixe o pacote de instalação do Benchmark:
wget https://mracc-release.oss-cn-beijing.aliyuncs.com/erdma-spark/spark-erdma-jverbs.tar.gz -
Descompacte o pacote
spark-erdma-jverbs.tar.gz:tar -zxvf spark-erdma-jverbs.tar.gzO pacote contém os seguintes componentes:
erdmalib: biblioteca nativa exigida pelo plug-in spark-erdma, correspondente a libdisni.so.
plugin-sparkrdma: plug-in Spark RDMA e biblioteca de dependências, correspondentes a spark-eRDMA-1.0-for-spark-3.2.1.jar e disni-2.1-jar-with-dependencies.jar.
Etapa 3: Execute um teste de Benchmark
Configure as rotas de IP e as definições do Spark, gere dados de teste e execute o teste de Benchmark.
-
Modifique as rotas de IP.
NotaIgnore esta etapa se a NIC padrão da sua instância do ECS suportar eRDMA.
route del -net 192.168.201.0 netmask 255.255.255.0 metric 0 dev eth0 && \ route add -net 192.168.201.0 netmask 255.255.255.0 metric 1000 dev eth0NotaSubstitua os endereços IP pelo endereço IP do gateway da sua ERI real.
-
Configure o Spark.
-
Abra o arquivo spark-jverbs-erdma.conf:
vim /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf -
Pressione I para entrar no modo de inserção e modifique o conteúdo do arquivo:
spark.master yarn spark.deploy-mode client #driver spark.driver.cores 4 spark.driver.memory 19g #executor spark.executor.instances 12 spark.executor.memory 10g spark.executor.cores 4 spark.executor.heartbeatInterval 60s #shuffle spark.task.maxFailures 4 spark.default.parallelism 36 spark.sql.shuffle.partitions 192 spark.shuffle.compress true spark.shuffle.spill.compress true #other spark.network.timeout 3600 spark.sql.broadcastTimeout 3600 spark.eventLog.enabled false spark.eventLog.dir hdfs://master1:9000/sparklogs spark.eventLog.compress true spark.yarn.historyServer.address master1:18080 spark.serializer org.apache.spark.serializer.KryoSerializer #eRDMA spark.driver.extraLibraryPath /path/erdmalib spark.executor.extraLibraryPath /path/erdmalib spark.driver.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.executor.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.shuffle.manager org.apache.spark.shuffle.sort.RdmaShuffleManager spark.shuffle.sort.io.plugin.class org.apache.spark.shuffle.rdma.RdmaLocalDiskShuffleDataIO spark.shuffle.rdma.recvQueueDepth 128NotaDefina
spark.shuffle.compresscomofalsepara obter uma melhor taxa de aceleração.O código de exemplo usa configurações de recursos do Spark para uma instância do ECS com 32 vCPUs e 128 GB de memória. Ajuste
spark.executor.instances,spark.executor.memory,spark.executor.coresespark.sql.shuffle.partitionsconforme a escala do seu cluster ou as especificações da instância.
Pressione Esc, insira
:wqe pressione Enter para salvar e sair.
-
-
Gere os dados:
cd /opt/spark-3.2.1-bin-hadoop3.2/conf spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-normal.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_DataGen spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar hdfs://master1:9000/tmp/tpcds_400 tpcds_400 400 parquetNota400especifica o volume de dados em GB. Ajuste conforme a escala do seu cluster. -
Execute o teste de Benchmark:
spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_RunAllQuery spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar all hdfs://master1:9000/tmp/tpcds_400 tpcds_400 /tmp/tpcds_400_resultA saída a seguir indica a conclusão do teste. O resultado exibe o tempo de execução da carga do cluster Spark.
NotaPara comparar o desempenho do eRDMA, remova as configurações do plug-in spark-erdma do diretório conf do Spark ou utilize um cluster Spark sem eRDMA. Em seguida, execute o mesmo teste de Benchmark e compare os resultados.