Quando uso um modelo do AWS CloudFormation ou o Docker localmente, não consigo ver a interface do usuário do Apache Spark para tarefas de ETL do AWS Glue.
Resolução
Com base em como você acessa a interface do usuário do Spark, siga as seguintes etapas de resolução.
Pilha do CloudFormation
Quando você usa uma pilha do CloudFormation para visualizar a interface do usuário do Spark, uma instância do Amazon Elastic Compute Cloud (Amazon EC2) faz uma solicitação HTTPS. Essa solicitação confirma se a interface do usuário do Spark funciona. Se a solicitação falhar, você receberá o seguinte erro:
"WaitCondition timed out. Received 0 conditions when expecting 1,"
Depois que esse erro ocorrer, o CloudFormation reverte a pilha.
Para resolver esse problema, execute as seguintes ações:
- confirme se a sub-rede pode alcançar o endpoint da API do Amazon Simple Storage Service (Amazon S3). Por exemplo, se você usa uma sub-rede privada, confirme se a sub-rede tem um endpoint de nuvem privada virtual (VPC) ou um gateway NAT.
- confirme se é possível acessar a sub-rede pela porta do servidor de histórico do Spark. Por exemplo, um firewall pode bloquear a porta e causar o erro anterior.
- Confirme se você inseriu um caminho válido do Amazon S3 para o diretório do log de eventos. Você deve usar s3a:// para o esquema de caminho dos logs de eventos.
Observação: se houver arquivos de log de eventos no caminho do Amazon S3 especificado, o caminho será válido.
Se você ainda receber um erro, verifique os seguintes grupos de logs no Amazon CloudWatch Logs para mais detalhes:
- /aws-glue/sparkui_cfn/cfn-init.log
- /aws-glue/sparkui_cfn/spark_history_server.log
Observação: o CloudFormation encerra a instância do EC2 do servidor de histórico quando a pilha é revertida. Para não encerrar a instância, ative a proteção de encerramento na pilha.
Docker
Se você usa o Docker para visualizar a interface do usuário do Spark e não consegue se conectar ao servidor de histórico do Spark a partir do seu navegador, verifique as seguintes configurações:
-
Confirme se a chave de acesso e as credenciais da chave secreta da AWS são válidas. Para usar credenciais temporárias, é preciso usar spark.hadoop.fs.s3a.session.token no comando. Exemplo de comando:
docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
Observação: substitua AWS_ACCESS_KEY_ID pelo ID da chave, AWS_SECRET_ACCESS_KEY pela chave de acesso secreta e SESSION_TOKEN pelo token da sessão.
-
Confirme se você inseriu um caminho válido do Amazon S3 para o diretório do log de eventos. Você deve usar s3a:// para o esquema de caminho dos logs de eventos.
Observação: se houver arquivos de log de eventos no caminho do Amazon S3 especificado, o caminho será válido.
-
Confirme se você inseriu o número da porta correto no navegador. Para alterar o número da porta, altere o parâmetro -p no comando docker run e o parâmetro spark.history.ui.port no Dockerfile.
Observação: por padrão, o número da porta é 18080. Exemplo de porta: http://localhost:18080.
Se você ainda não consegue ver a interface do usuário do Spark, revise seus logs para mais detalhes. Para obter os logs stdout e stderr para o contêiner do Docker, execute docker run com o parâmetro -it em vez do parâmetro -itd. Exemplo de comando:
docker run -it -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
Observação: substitua AWS_ACCESS_KEY_ID pelo ID da chave, AWS_SECRET_ACCESS_KEY pela chave de acesso secreta e SESSION_TOKEN pelo token da sessão.
Informações relacionadas
Monitorar trabalhos usando a interface do usuário da web do Apache Spark
Habilitar a interface do usuário da web do Apache Spark para trabalhos do AWS Glue