跳至內容

為什麼我無法查看 AWS Glue ETL 作業的 Spark UI?

2 分的閱讀內容
0

當我在本機使用 AWS CloudFormation 範本或 Docker 時,看不到 AWS Glue ETL 作業的 Apache Spark UI。

解決方法

根據您存取 Spark UI 的方式,採取以下解決步驟。

CloudFormation 堆疊

當您使用 CloudFormation 堆疊查看 Spark UI 時,Amazon Elastic Compute Cloud (Amazon EC2) 執行個體會發出 HTTPS 請求。此請求會確認 Spark UI 是否正常運作。如果請求失敗,則會收到以下錯誤:

"WaitCondition timed out. Received 0 conditions when expecting 1,"

發生此錯誤後,CloudFormation 會復原堆疊。

若要解決此問題,請執行下列動作:

  • 確認子網路可以連線到 Amazon Simple Storage Service (Amazon S3) API 端點。例如,如果您使用私有子網路,請確認該子網路具有虛擬私有雲端 (VPC) 端點或 NAT 閘道。
  • 確認您可以透過 Spark 歷史記錄伺服器連接埠存取子網路。例如,防火牆可能會封鎖連接埠並導致上述錯誤。
  • 確認您輸入了事件日誌目錄的有效 Amazon S3 路徑。您必須使用 s3a:// 做為事件日誌路徑配置。
    **注意:**如果您指定的 Amazon S3 路徑中存在事件日誌檔案,則該路徑有效。

如果仍然出現錯誤,請檢查 Amazon CloudWatch Logs 中的以下日誌群組以取得更多詳細資訊:

  • /aws-glue/sparkui_cfn/cfn-init.log
  • /aws-glue/sparkui_cfn/spark_history_server.log

**注意:**當堆疊復原時,CloudFormation 會終止歷史記錄伺服器 EC2 執行個體。若要不終止執行個體,請啟動堆疊的終止保護

Docker

如果您使用 Docker 查看 Spark UI,且無法從瀏覽器連線到 Spark 歷史記錄伺服器,請檢查以下設定:

  • 確認存取金鑰和私密金鑰 AWS 憑證有效。若要使用臨時憑證,您必須在命令中使用 spark.hadoop.fs.s3a.session.token。命令範例:

    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"

    **注意:**將 AWS_ACCESS_KEY_ID 替換為您的金鑰 ID,將 AWS_SECRET_ACCESS_KEY 替換為您的私密存取金鑰,將 SESSION_TOKEN 替換為您的工作階段權杖。

  • 確認您輸入了事件日誌目錄的有效 Amazon S3 路徑。您必須使用 s3a:// 做為事件日誌路徑配置。
    **注意:**如果您指定的 Amazon S3 路徑中存在事件日誌檔案,則該路徑有效。

  • 確認您在瀏覽器中輸入了正確的連接埠編號。若要變更連接埠編號,請變更 docker run 命令中的 -p 參數和 Dockerfile 中的 spark.history.ui.port 參數。
    **注意:**預設情況下,連接埠編號為 18080。範例連接埠:http://localhost:18080

如果您仍然無法查看 Spark UI,請查看您的日誌以取得更多詳細資訊。若要取得 Docker 容器的 stdout 和 stderr 日誌,請使用 -it 參數 (而非 -itd 參數) 執行 docker run。命令範例:

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"

**注意:**將 AWS_ACCESS_KEY_ID 替換為您的金鑰 ID,將 AWS_SECRET_ACCESS_KEY 替換為您的私密存取金鑰,將 SESSION_TOKEN 替換為您的工作階段權杖。

相關資訊

使用 Apache Spark Web UI 監控作業

啟用 AWS Glue 作業的 Apache Spark Web UI

AWS 官方已更新 1 年前