View a markdown version of this page

了解已修訂的日誌 - AWS Clean Rooms

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

了解已修訂的日誌

AWS Clean Rooms 在匯出 Spark 日誌之前對其進行修訂,以便匯出的日誌不會顯示成員資料的內容,或識別來源資料的資料表和儲存位置。 AWS Clean Rooms 會重建日誌記錄,並僅發出已知可安全共用的欄位。某些資訊會刻意保留,包括查詢讀取的資料欄名稱。

編輯不會區分成員。預期您自己的資料表名稱和查詢值會從您為自己的查詢匯出的日誌中修訂,其詞彙與其他成員的資訊相同。空白和預留位置欄位是正常的,不表示匯出有問題。

匯出的日誌包含的內容

匯出的日誌會保留診斷失敗和效能問題所需的資訊:

  • 時間 – 任務和階段持續時間、執行時間、CPU 時間、垃圾收集時間、還原序列化和結果序列化時間、隨機播放等待時間和隨機播放寫入時間都會完全保留。時間是效能分析的主要訊號。

  • Spark 執行識別符和計數 – 任務、階段、任務和嘗試 IDs、分割區計數、任務計數、執行器 IDs、主機名稱和連接埠。

  • 查詢計劃結構 – 實體計劃樹狀結構,包括運算子名稱,例如 HashAggregate、 SortMergeJoin和 Exchange,因此您可以查看計劃的形狀,以及引擎選擇執行查詢的方式。不屬於 Spark 本身之一的運算子名稱會顯示為 [REDACTED]。

  • 來源資料欄名稱 – 來自要掃描之資料表的資料欄名稱,因此您可以查看哪些資料欄用於篩選條件、聯結和彙總。不會保留查詢建立的名稱,例如別名。如需詳細資訊,請參閱如何處理欄和資料表名稱。

  • 掃描類型和檔案格式 – 掃描運算子通常包含要讀取的資料表名稱。名稱會取代為僅識別掃描類型和檔案格式的表單,例如 Scan parquet,因此您仍然可以判斷資料的讀取方式。如果檔案格式不是 可 AWS Clean Rooms 辨識的格式,則運算子會顯示為 Scan 且沒有格式。

  • 錯誤類別 – 當查詢失敗時,日誌會識別錯誤類型,但不會識別導致它的資料。它們會報告 Spark 的錯誤類別、其 SQLSTATE 程式碼,以及 Spark 為該類別定義的標準訊息,而訊息的<placeholder>權杖不會填滿,因為會填滿它們的值來自資料。例如,失敗的轉換會報告[CAST_INVALID_INPUT]和訊息,說明某個類型的值無法在未顯示該值的情況下轉換到另一個類型。當一個失敗導致另一個失敗時,鏈中的錯誤類別會一起報告,最多幾個層級深。不是源自 Spark 的失敗只會報告為非 Spark 錯誤,沒有類別。

    個別任務失敗只會報告失敗類型,例如 ExceptionFailure。他們沒有自己的錯誤類別。

  • Spark 組態 – 其值一律為數字、大小或固定關鍵字的設定,且最常用於診斷效能問題:驅動程式和執行器核心和記憶體、記憶體分數和堆積外設定、動態配置設定、自適應查詢執行設定、預設平行處理和隨機播放分割區計數、廣播聯結閾值、最大分割區大小、隨機播放壓縮設定、排程器模式和序列化器。大多數其他組態都會修訂,因為設定可以包含路徑、識別符和查詢文字。如果其中一個設定的值不是純數字、大小或關鍵字,也會省略。

  • 記憶體使用率和資料磁碟區 – 峰值執行記憶體、記憶體和磁碟溢出、執行器 JVM 記憶體、快取資料大小、隨機播放區塊計數,以及讀取和寫入的位元組和記錄數,包括隨機播放讀取和寫入磁碟區。這些數字是四捨五入的,而不是確切的。如需詳細資訊,請參閱修訂過的日誌與標準 Spark 日誌有何不同。

  • 為什麼執行器停止 – 每個執行器停止的類別,例如記憶體不足、驅動程式關閉、解除委任或無法回應。這通常是解釋查詢失敗原因的最快方法。這些日誌也會記錄 Spark 停止排程工作的任何執行器或主機,當失敗在一處保持重複時很有用。如需詳細資訊,請參閱修訂過的日誌與標準 Spark 日誌有何不同。

  • 隨機擷取失敗詳細資訊 – 當任務無法擷取隨機輸出時,會保留隨機擷取、映射、映射索引和減少識別符,以及嘗試擷取的執行器和主機。這可讓您區分重複的故障與單一來源,這通常表示沒有回應的執行器,以及分散在許多來源的故障,這通常表示暫時性的網路問題。

已修訂的內容

  • 資料值 – 查詢的常值,以及任何資料表的資料值。篩選條件述詞會顯示已篩選的資料欄,但不會顯示與之比較的值。

  • 資料表名稱和儲存位置 – 資料表識別符、資料庫名稱和 Amazon S3 路徑。

  • 查詢文字 – SQL 陳述式和與查詢相關聯的任何描述。

  • 錯誤訊息文字和堆疊追蹤 – 由於錯誤訊息可以引用導致錯誤的值,因此會移除訊息文字和堆疊追蹤。基礎例外狀況類別的名稱也會修訂,因為使用者定義函數擲回的例外狀況會攜帶查詢作者選擇的名稱。系統會改為保留查詢和任務的 Spark 錯誤類別。階段失敗的原因,以及任務遭到終止的原因也會遭到修訂。

  • Spark 為自己的工作記錄的名稱 – 階段和快取資料集的名稱和呼叫站點,以及應用程式名稱。這些是可回應資料表名稱或儲存路徑的任意文字欄位。因此,在 Spark 歷史記錄伺服器中,階段會出現,沒有通常會識別階段的描述,而您會依階段的 ID 及其在計畫中的位置來尋找階段。

  • 運算和別名資料欄名稱 – 查詢建立的名稱,而不是從資料表讀取的名稱,因為查詢引擎會從表達式產生這類名稱,而且名稱可以包含值。這些會顯示為數值識別符,例如 #42。如需詳細資訊,請參閱如何處理欄和資料表名稱。

  • 掃描詳細資訊 – 讀取結構描述、套用至每次掃描的篩選條件述詞 (下推篩選條件、分割區篩選條件和資料篩選條件),以及資料位置。

  • 驅動程式和執行器日誌的連結 – Spark 為每個執行器和驅動程式記錄的日誌 URLs。在 Spark 歷史記錄伺服器中,通常開啟驅動程式或執行器日誌的連結不會填入。

  • 資源識別符和服務端點 – AWS 帳戶 IDs、IAM 角色和 AWS KMS 金鑰等 ARNs,以及 AWS Clean Rooms 呼叫 執行查詢之服務的端點 URLs。

  • AWS 服務詳細資訊 – AWS Clean Rooms 類別名稱、Classpath 項目、JVM 組態,以及 Hadoop 和系統屬性。除了 Spark History Server 所需的識別符之外,任務屬性也會進行修訂,以便將任務與其所屬的查詢執行建立關聯。

如何處理欄和資料表名稱

匯出的日誌會保留查詢讀取的資料欄名稱。在查詢中建立的資料表名稱和資料欄別名會遭到修訂。查詢建立的名稱是從其名稱的表達式產生,而產生的名稱可以包含查詢的值: SELECT 'confidential'會產生名為 的資料欄confidential。因此,只有在可以追蹤到掃描資料表的資料欄時,才會顯示名稱。其他每個名稱都會以數字識別符取代。

例如,考量以下查詢。

SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id

匯出的日誌如下所示。

查詢的元素 在匯出的日誌中
資料欄 user_id、 amount和 region 依名稱顯示,因此您可以查看查詢分組、加總和篩選的內容
資料表 sales、其資料庫及其儲存位置 不存在
值 'us-west' 取代為 [REDACTED]
別名 total 以數字識別符取代,因為查詢已建立名稱,而不是從資料表讀取它

修訂過的日誌與標準 Spark 日誌有何不同

資料列計數和資料磁碟區是近似值

記錄計數、位元組磁碟區、溢出大小和峰值記憶體測量會四捨五入至數量級,因為確切計數可以顯示另一個成員的資料大小。讀取 1,342 筆記錄的任務會報告 1,000 筆。低於 100 的測量報告為 0。

由於每個數字都會四捨五入,因此報告 100 的任務和報告 1,000 的任務可能已讀取近乎相同的記錄數目。謹慎處理只有一個數量級的數字;較大的差異,例如 1,000 與 10,000,000,仍然可靠地表示偏斜。

修改後的值需要多個形式

在查詢計畫中,修訂的值會顯示為常值文字 [REDACTED]。在日誌的其他地方,修訂的欄位通常是空的。它可能是空白字串、空白清單或完全不存在的值,因此 Spark 歷史記錄伺服器仍然可以讀取記錄。這兩種形式都代表相同的事物。

查詢計劃不使用熟悉的運算子語法

計畫中的表達式會撰寫為函數呼叫,而不是數學表示法。比較會顯示為 EqualTo(#12, [REDACTED]) 而非 (a = 5)。函數名稱也會以此形式顯示,使用者定義的函數名稱完全不會顯示。

僅包含實體計畫

匯出的日誌包含實體計畫。它們不包含通常伴隨的剖析、分析或最佳化邏輯計畫。

每個任務指標已修訂

計劃圖表列出每個運算子報告的指標,例如輸出列數。個別任務報告的指標完全不顯示任何值,因為它們後面的每個任務數字會被移除。對於任務層級數字,請改用階段檢視中的每個任務指標。

Spark 驅動程式指標會四捨五入

Spark 在驅動程式上運算的指標,包括廣播、掃描和寫入的指標,會報告值,但會四捨五入到一個數量級,因為記錄計數和資料磁碟區的原因相同:確切的數字可以顯示另一個成員的資料大小。

僅匯出事件日誌

匯出包含 Spark 事件日誌。它不包含 Spark 與其一起寫入的自由格式驅動程式和執行器輸出,因為該輸出的單一行可以包含資料表名稱、儲存路徑或資料值。診斷必須從事件日誌完成。

執行器失敗顯示一般錯誤訊息

由於執行器停止的自由格式原因可能包含 AWS Clean Rooms 服務詳細資訊,因此日誌會回報一般錯誤訊息,例如out-of-memory結束、驅動程式啟動的關機、停用的執行器或遺失的程序。此記錄專屬於 AWS Clean Rooms ,並非標準 Spark 事件,因此 Spark 歷史記錄伺服器和其他工具可能不會顯示它。如果您沒有看到它,您可以在匯出的事件日誌檔案中找到它。

預設會修訂無法辨識的記錄

如果日誌記錄不是可 AWS Clean Rooms 辨識的日誌記錄,其所有文字都會取代為 [REDACTED],包括其欄位名稱,而其所有數字都會取代為零。只會保留記錄類型。這類記錄沒有診斷資訊。