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

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

設定叢集日誌記錄和偵錯

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

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

預設日誌檔案

依預設,每個叢集都會在主節點上寫入日誌檔案。這些會寫入至 /mnt/var/log/ 目錄。您可以使用連接SSH到主節點來存取它們,如中所述使用以下方式 Connect 到主節點 SSH。Amazon EMR 會收集 Amazon EMR 精靈和其他 Amazon EMR 程序產生的特定系統和應用程式日誌,以確保有效的服務運作。

注意

如果您使用 Amazon 6.8.0 或更早EMR版本,則會在叢集終止期間將日誌檔儲存到 Amazon S3,因此在主節點終止後,您就無法存取日誌檔。Amazon 會在叢集縮減期間將 6.9.0 及更EMR新版本存檔日誌到 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 個字元的步驟識別碼 (例如 stepId 1、stepId 2) 對叢集而言是唯一的。

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

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

Console
使用新主控台將日誌檔案封存至 Amazon S3
  1. 登入 AWS Management Console,然後在 https://console.aws.amazon.com/em r 打開 Amazon 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 5.30.0 及更高EMR版本,不包括 6.0.0 版本。若要使用此選項,請將權限新增至 AWS KMS 用於您的EC2執行個體設定檔和 Amazon EMR 角色。如需詳細資訊,請參閱使用以加密存放在 Amazon S3 中的日誌檔 AWS KMS客戶管理的金鑰

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

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

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

若要使用將日誌檔存檔到 Amazon S3 AWS CLI」中,輸入create-cluster命令,然後使用--log-uri參數指定 Amazon S3 日誌路徑。

  1. 若要將檔案記錄到 Amazon S3,請鍵入下列命令並取代 myKey 使用您的 EC2 key pair 的名稱。

    aws emr create-cluster --name "Test cluster" --release-label emr-7.2.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-rolescreate-cluster子指令之前先輸入以建立它們。

使用以加密存放在 Amazon S3 中的日誌檔 AWS KMS客戶管理的金鑰

使用 Amazon EMR 版本 5.30.0 及更高版本(Amazon EMR 6.0.0 除外),您可 Amazon S3 使用 AWS KMS客戶管理的金鑰。若要在主控台中啟用此選項,請依照將日誌檔案封存至 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/公里

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

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

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

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

    6. 選擇新增

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

若要使用彙總 Amazon S3 中的日誌 AWS CLI

注意

您目前不能以 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 key pair 的名稱。您還可以將任何紅色文字取代為您自己的組態。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-7.2.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至上述連結。

  • 要查找蜂巢CLI日誌,刪除星號(*)並附加/var/log/hive/user/hadoop/hive.log到上面的鏈接。

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

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