設定叢集日誌記錄和偵錯 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定叢集日誌記錄和偵錯

在您規劃叢集時,要決定的一件事便是您要提供多少偵錯支援。在您第一次開發您的資料處理應用程式時,我們建議在叢集上測試該應用程式,處理小型但具有代表性的資料子集。當您執行此操作時,您可能會想要利用所有 Amazon EMR 提供的偵錯工具 (例如存檔日誌檔案) 給 Amazon S3。

當您完成開發,並將您的資料處理應用程式投入全面生產時,您可以選擇縮減偵錯。如此一來可以節省在 Amazon S3 中儲存日誌檔案封存的成本,並減少叢集上的處理負載,因為它不再需要將狀態寫入至 Amazon S3。當然,做為取捨,如果出現問題,您可以用來調查問題的工具便少了些。

預設日誌檔案

依預設,每個叢集都會在主節點上寫入日誌檔案。這些會寫入至 /mnt/var/log/ 目錄。您可以使用 SSH 來連接到主節點以存取它們,如 使用 SSH 連接至主節點 所述。

注意

如果您使用 Amazon EMR 6.8.0 版或更早版本,則會在叢集終止期間將日誌檔案儲存至 Amazon S3,因此您無法在主節點終止後存取日誌檔案。Amazon EMR 6.9.0 版及更新版本會在叢集縮減規模期間將日誌封存至 Amazon S3,因此即使在節點終止後,叢集上產生的日誌檔案仍然存在。

您不需要啟用任何功能即可在主節點上寫入日誌檔案。這是 Amazon EMR 與 Hadoop 的預設行為。

一個叢集會產生多種類型的日誌檔,包括:

  • 步驟日誌 – 這些日誌是由 Amazon EMR 服務所產生,且包含有關叢集和每個步驟結果的資訊。日誌檔案儲存在主節點上的 /mnt/var/log/hadoop/steps/ 目錄中。每個步驟都將其結果記錄在一個單獨編號的子目錄中:第一個步驟為 /mnt/var/log/hadoop/steps/s-stepId1/,第二個步驟為 /mnt/var/log/hadoop/steps/s-stepId2/,以此類推。13 個字元的步驟識別符 (例如 stepId1、stepId2) 對叢集來說是唯一的。

  • Hadoop 和 YARN 元件記錄檔 — 與 Apache YARN 和相關聯的元件的記錄檔 MapReduce,例如,都包含在中的個別資料夾中/mnt/var/log/mnt/var/log 下的 Hadoop 元件日誌檔案位置如下:hadoop-hdfs,hadoop-mapreduce,hadoop-httpfs 與 hadoop-yarn。該hadoop-state-pusher 目錄是 Hadoop 狀態推送過程的輸出。

  • 引導操作日誌 – 如果您的作業使用引導操作,這些動作的結果都會加以記錄。日誌檔案儲存在主節點上的 /mnt/var/log/bootstrap-actions/ 中。每個引導操作都將其結果記錄在一個單獨編號的子目錄中:第一個引導操做為 /mnt/var/log/bootstrap-actions/1/,第二個引導操做為 /mnt/var/log/bootstrap-actions/2/,以此類推。

  • 執行個體狀態日誌 – 這些日誌提供有關節點的 CPU、記憶體狀態和廢棄項目收集器執行緒的資訊。日誌檔案儲存在主節點上的 /mnt/var/log/instance-state/ 中。

將日誌檔案封存至 Amazon S3

注意

您目前不能以 yarn logs 公用程式使用日誌彙總至 Amazon S3。

Amazon EMR 6.9.0 版及更新版本會在叢集縮減規模期間將日誌封存至 Amazon S3,因此即使在節點終止後,叢集上產生的日誌檔案仍然存在。此行為會自動啟用,因此您無需執行任何操作即可開啟。對於 Amazon EMR 6.8.0 版及更早版本,您可以設定叢集以定期將儲存在主節點上的日誌檔案封存至 Amazon S3。這可確保日誌檔案在叢集終止 (無論是透過正常關閉還是由於錯誤關閉) 後仍可使用。Amazon EMR 會以 5 分鐘為間隔將日誌檔案封存至 Amazon S3。

若要將 Amazon EMR 6.8.0 版及更早版本的日誌檔案封存至 Amazon S3,當您啟動叢集時必須啟用此功能。您可以使用主控台、CLI 或 API 來執行這項作業。在預設情況下,使用主控台啟動的叢集便已啟用了日誌封存。對於使用 CLI 或 API 啟動的叢集,則必須手動啟用對 Amazon S3 的日誌記錄。

注意

我們已重新設計 Amazon EMR 主控台,可讓您更輕鬆地使用。請參閱 Amazon EMR 控制台 以了解舊的和新的主控台體驗之間的差異。

New console
使用新主控台將日誌檔案封存至 Amazon S3
  1. 登入 AWS Management Console,然後開啟 Amazon EMR 主控台,網址為 https://console.aws.amazon.com/emr

  2. 在左側導覽窗格中的 EC2 上的 EMR 下,選擇叢集,然後選擇建立叢集

  3. 叢集日誌下,選取將叢集特定日誌發布至 Amazon S3 核取方塊。

  4. Amazon S3 位置欄位中,鍵入 (或瀏覽至) Amazon S3 路徑來儲存您的日誌。如果您鍵入的資料夾名稱並不存在於儲存貯體,Amazon S3 會建立該資料夾。

    當您設定此值時,Amazon EMR 會將叢集中的 EC2 執行個體日誌檔案複製到 Amazon S3。這可避免日誌檔案在叢集結束且 EC2 終止託管叢集的執行個體時遺失。這些日誌對於故障排除非常實用。如需詳細資訊,請參閱檢視日誌檔案

  5. 選擇性地選取加密叢集特定的日誌核取方塊。然後,從清單中選取 AWS KMS 金鑰、輸入金鑰 ARN 或建立新金鑰。僅 Amazon EMR 5.30.0 版及更新版本提供此選項,但 6.0.0 版不提供。若要使用此選項,請 AWS KMS 為您的 EC2 執行個體設定檔和 Amazon EMR 角色新增許可。如需詳細資訊,請參閱 使用 AWS KMS 客戶受管金鑰加密儲存在 Amazon S3 中的日誌檔案

  6. 選擇適用於您的叢集的任何其他選項。

  7. 若要啟動您的叢集,請選擇建立叢集

Old console
使用舊主控台將日誌檔案封存至 Amazon S3
  1. 導覽至新的 Amazon EMR 主控台,然後從側邊導覽選取切換至舊主控台。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 選擇建立叢集

  3. 選擇前往進階選項

  4. General options (一般選項) 區段的 Logging (日誌記錄) 欄位中,接受預設使用的選項:Enabled (已啟用)

    這可判斷 Amazon EMR 是否要擷取詳細日誌資料給 Amazon S3。您只能在叢集建立時予以設定。如需詳細資訊,請參閱 檢視 日誌檔

  5. S3 資料夾欄位中,輸入 (或瀏覽至) 儲存日誌的 Amazon S3 路徑。您也可以允許主控台為您產生 Amazon S3 路徑。如果您鍵入的資料夾名稱並不存在於儲存貯體,則會建立該資料夾。

    在設定此值時,Amazon EMR 會將叢集中的 EC2 執行個體日誌檔案複製到 Amazon S3。這可避免日誌檔案在叢集結束且託管叢集的 EC2 執行個體終止時遺失。這些日誌對於故障排除非常實用。

    如需詳細資訊,請參閱檢視日誌檔案

  6. 在 [錄加密] 欄位中,選取 [使用 AWS KMS 客戶受管金鑰加密存放在 S3 中的日誌]。然後從清單中選取 AWS KMS 金鑰或輸入金鑰 ARN。您也可以建立新的 AWS KMS 金鑰。

    僅 Amazon EMR 5.30.0 版及更新版本提供此選項,但 6.0.0 版不提供。若要使用此選項,請為 EC2 執行個體設定檔和 Amazon EMR 角色新增許可至 AWS KMS 。如需詳細資訊,請參閱 使用 AWS KMS 客戶受管金鑰加密儲存在 Amazon S3 中的日誌檔案

  7. 按照 規劃和設定叢集 中所述繼續建立叢集。

CLI
若要使用將日誌檔存檔到 Amazon S3 AWS CLI

若要使用將日誌檔存檔到 Amazon S3 AWS CLI,請鍵入create-cluster命令並使用--log-uri參數指定 Amazon S3 日誌路徑。

  1. 若要記錄檔案至 Amazon S3,請鍵入下列命令,並將 myKey 取代為您的 EC2 金鑰對名稱。

    aws emr create-cluster --name "Test cluster" --release-label emr-7.1.0 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. 如果您在未使用 --instance-groups 參數的情況下指定執行個體計數,即會啟動單一主節點,且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。

    注意

    如果您先前尚未建立預設 Amazon EMR 服務角色和 EC2 執行個體設定檔,請先輸入 aws emr create-default-roles 來建立這些項目,然後再鍵入 create-cluster 子命令。

使用 AWS KMS 客戶受管金鑰加密儲存在 Amazon S3 中的日誌檔案

使用 Amazon EMR 5.30.0 及更新版本 (亞馬遜 EMR 6.0.0 除外),您可以使用 KMS 客戶受管金鑰加密存放在 Amazon S3 中的日誌檔案。 AWS 若要在主控台中啟用此選項,請依照將日誌檔案封存至 Amazon S3中的步驟執行。您的 Amazon EC2 執行個體設定檔和 Amazon EMR 角色必須符合下列先決條件:

  • 用於叢集的 Amazon EC2 執行個體設定檔必須具有使用 kms:GenerateDataKey 的許可。

  • 用於叢集的 Amazon EMR 角色必須具有使用 kms:DescribeKey 的許可。

  • Amazon EC2 執行個體設定檔和 Amazon EMR 角色必須新增至指定 AWS KMS 客戶受管金鑰的金鑰使用者清單中,如下列步驟所示:

    1. 開啟 AWS Key Management Service (AWS KMS) 主控台,位於 https://console.aws.amazon.com/kms

    2. 若要變更「 AWS 地區」,請使用頁面右上角的「地區」選取器。

    3. 選取要修改的 KMS 金鑰別名。

    4. Key Users (金鑰使用者) 下的金鑰詳細資訊頁面上,選擇 Add (新增)

    5. 新增金鑰使用者對話方塊中,選取您的 Amazon EC2 執行個體設定檔和 Amazon EMR 角色。

    6. 選擇新增

如需詳細資訊,請參閱 Amazon EMR 使用的 IAM 服務角色金鑰管理服務開發人員指南中的使用 AWS 金鑰政策

使用 AWS CLI在 Amazon S3 中彙總日誌

注意

您目前不能以 yarn logs 公用程式使用日誌彙總。您僅能使用此程序支援的彙總。

日誌彙總 (Hadoop 2.x) 會將來自個別應用程式的所有容器日誌編譯為單一檔案。若要使用啟用 Amazon S3 的日誌彙總 AWS CLI,您可以在叢集啟動時使用啟動動作來啟用日誌彙總,並指定儲存貯體來存放日誌。

  • 若要啟用日誌彙總,請建立下列稱為 myConfig.json 的組態檔案,其中包含下列項目:

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    鍵入下列命令,然後將 myKey 取代為 EC2 金鑰對的名稱。您還可以將任何紅色文字取代為您自己的組態。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-7.1.0 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    如果您在未使用 --instance-groups 參數的情況下指定執行個體計數,即會啟動單一主節點,且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。

    注意

    如果您先前尚未建立預設 EMR 服務角色和 EC2 執行個體設定檔,請先執行 aws emr create-default-roles 來建立這些設定檔,然後再執行 create-cluster 子命令。

如需有關使用中 Amazon EMR 命令的詳細資訊 AWS CLI,請參閱《AWS CLI 命令參考》。

日誌位置

下列清單包含所有日誌類型及其在 Amazon S3 中的位置。您可以使用這些日誌對 Amazon EMR 問題進行疑難排解。

步驟日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

應用程式記錄

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

此位置包括容器 stderrstdoutdirectory.infoprelaunch.outlaunch_container.sh 日誌。

資源管理員日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

此位置包括 NameNode DataNode、和 YARN TimelineServer 日誌。

節點管理員日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

執行個體狀態日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Amazon EMR 佈建日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Hive 日誌

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • 若要尋找叢集上的 Hive 日誌,請移除星號 (*) 並將 /var/log/hive/ 附加至上面的連結。

  • 若要尋找 HiveServer 2 個記錄,請移除星號 (*) 並附加var/log/hive/hiveserver2.log至上述連結。

  • 若要尋找 HiveCLI 日誌,請移除星號 (*) 並將 /var/log/hive/user/hadoop/hive.log 附加至上面的連結。

  • 若要尋找 Hive Metastore Server 日誌,請移除星號 (*) 並將 /var/log/hive/user/hive/hive.log 附加至上面的連結。

如果您的故障是在 Tez 應用程式的主要或任務節點中,請提供適當 Hadoop 容器的日誌。