總覽
Dataproc 永久記錄伺服器 (PHS) 提供網路介面,可查看在有效或已刪除的 Dataproc 叢集上執行的工作記錄。這項功能適用於 Dataproc 映像檔 1.5 版以上,並在單一節點 Dataproc 叢集上執行。提供網頁介面,可存取下列檔案和資料:
MapReduce 和 Spark 工作記錄檔
Flink 工作記錄檔 (請參閱「Dataproc 選用 Flink 元件」,瞭解如何建立 Dataproc 叢集來執行 Flink 工作)
由 YARN Timeline Service v2 建立並儲存在 Bigtable 執行個體的應用程式時間軸資料檔案。
YARN 匯總記錄檔

永久歷史記錄伺服器會存取並顯示 Spark 和 MapReduce 工作歷史記錄檔案、Flink 工作歷史記錄檔案,以及在 Dataproc 工作叢集生命週期內寫入 Cloud Storage 的 YARN 記錄檔。
限制
PHS 叢集映像檔版本和 Dataproc 工作叢集映像檔版本必須相符。舉例來說,您可以使用 Dataproc 2.0 映像檔版本的 PHS 叢集,查看在 Dataproc 2.0 映像檔版本工作叢集上執行的工作記錄檔,這些工作叢集位於 PHS 叢集所在的專案中。
建立 Dataproc PHS 叢集
您可以在本機終端機或 Cloud Shell 中執行下列 gcloud dataproc clusters create
指令,並搭配下列標記和叢集屬性,建立 Dataproc 持續性記錄伺服器單一節點叢集。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT \ --region=REGION \ --single-node \ --enable-component-gateway \ --optional-components=COMPONENT \ --properties=PROPERTIES
- CLUSTER_NAME:指定 PHS 叢集的名稱。
- PROJECT:指定要與 PHS 叢集建立關聯的專案。這個專案應與執行工作的叢集相關聯的專案相同 (請參閱「建立 Dataproc 工作叢集」)。
- REGION:指定 PHS 叢集所在的 Compute Engine 地區。
--single-node
:PHS 叢集是 Dataproc單一節點叢集。--enable-component-gateway
:這個標記會在 PHS 叢集上啟用元件閘道網頁介面。- COMPONENT:使用這個標記在叢集上安裝一或多個選用元件。您必須指定
FLINK
選用元件,才能在 PHS 叢集上執行 Flink HistoryServer Web 服務,以查看 Flink 工作記錄檔。 - PROPERTIES. 指定一或多個叢集屬性。
您可以視需要新增 --image-version 旗標,指定 PHS 叢集映像檔版本。PHS 映像檔版本必須與 Dataproc 工作叢集的映像檔版本相符。請參閱「限制」。
注意:
- 本節中的屬性值範例使用「*」萬用字元,讓 PHS 能夠比對不同工作叢集寫入指定值區的多個目錄 (但請參閱萬用字元效率考量)。
- 為方便閱讀,下列範例會顯示個別的
--properties
旗標。使用gcloud dataproc clusters create
建立 Dataproc on Compute Engine 叢集時,建議使用一個--properties
標記指定以半形逗號分隔的屬性清單 (請參閱叢集屬性格式)。
屬性:
yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs
:新增這項屬性,指定 PHS 存取工作叢集所寫入 YARN 記錄的 Cloud Storage 位置。spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history
: 新增這項屬性即可啟用永久 Spark 工作記錄。這項屬性會指定 PHS 存取工作叢集所寫入的 Spark 工作記錄記錄檔的位置。在 Dataproc 2.0 以上的叢集中,您也必須設定下列兩項屬性,才能啟用 PHS Spark 記錄記錄 (請參閱「Spark 記錄伺服器設定選項」)。
spark.history.custom.executor.log.url
值是包含變數 {{預留位置}} 的常值,這些變數將由永久記錄伺服器設定。這些變數並非由使用者設定,請如畫面所示傳遞屬性值。--properties=spark:spark.history.custom.executor.log.url.applyIncompleteApplication=false
--properties=spark:spark.history.custom.executor.log.url={{YARN_LOG_SERVER_URL}}/{{NM_HOST}}:{{NM_PORT}}/{{CONTAINER_ID}}/{{CONTAINER_ID}}/{{USER}}/{{FILE_NAME}}
mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done
: 新增這項屬性,即可啟用 MapReduce 工作記錄的持續性。 這項屬性會指定 Cloud Storage 位置,PHS 會從該位置存取工作叢集寫入的 MapReduce 工作記錄。dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
:設定 Yarn Timeline Service 第 2 版後,請新增這項屬性,使用 PHS 叢集在 YARN 應用程式時間軸服務第 2 版和 Tez 網頁介面中查看時間軸資料 (請參閱「元件閘道網頁介面」)。flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
: 使用這項屬性設定 FlinkHistoryServer
,監控以半形逗號分隔的目錄清單。
屬性範例:
--properties=spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history
--properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done
--properties=flink:flink.historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
建立 Dataproc 工作叢集
您可以在本機終端機或 Cloud Shell 中執行下列指令,建立 Dataproc 工作叢集,該叢集會執行工作,並將工作記錄檔寫入永久記錄伺服器 (PHS)。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT \ --region=REGION \ --optional-components=COMPONENT \ --enable-component-gateway \ --properties=PROPERTIES \ other args ...
- CLUSTER_NAME:指定工作叢集的名稱。
- PROJECT:指定與工作叢集相關聯的專案。
- REGION:指定工作叢集所在的 Compute Engine 區域。
--enable-component-gateway
:這個標記可啟用作業叢集上的元件閘道網頁介面。- COMPONENT:使用這個標記在叢集上安裝一或多個選用元件。指定要在叢集上執行 Flink 工作的
FLINK
選用元件。 PROPERTIES:新增一或多個下列叢集屬性,設定與 PHS 相關的非預設 Cloud Storage 位置和其他工作叢集屬性。
注意:
- 本節中的屬性值範例使用「*」萬用字元,讓 PHS 能夠比對不同工作叢集寫入指定值區的多個目錄 (但請參閱萬用字元效率考量)。
- 為方便閱讀,下列範例會顯示個別的
--properties
旗標。使用gcloud dataproc clusters create
建立 Dataproc on Compute Engine 叢集時,建議使用一個--properties
標記指定以半形逗號分隔的屬性清單 (請參閱叢集屬性格式)。
屬性:
yarn:yarn.nodemanager.remote-app-log-dir
: 根據預設,Dataproc 工作叢集會啟用匯總的 YARN 記錄,並寫入叢集暫時值區。 新增這項屬性,即可指定其他 Cloud Storage 位置,讓叢集將匯總記錄檔寫入該位置,供 Persistent History Server 存取。--properties=yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
spark:spark.history.fs.logDirectory
和spark:spark.eventLog.dir
: 根據預設,Spark 工作記錄檔會儲存在叢集temp bucket
的/spark-job-history
目錄中。您可以新增這些屬性,為這些檔案指定不同的 Cloud Storage 位置。如果同時使用這兩項屬性,則必須指向相同值區中的目錄。--properties=spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history
--properties=spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
mapred:mapreduce.jobhistory.done-dir
和mapred:mapreduce.jobhistory.intermediate-done-dir
: 根據預設,MapReduce 工作記錄檔會儲存在叢集temp bucket
的/mapreduce-job-history/done
和/mapreduce-job-history/intermediate-done
目錄中。中繼mapreduce.jobhistory.intermediate-done-dir
位置是暫時儲存空間;MapReduce 工作完成後,中繼檔案會移至mapreduce.jobhistory.done-dir
位置。您可以新增這些屬性,為這些檔案指定不同的 Cloud Storage 位置。如果同時使用這兩項屬性,則必須指向同一個值區中的目錄。--properties=mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done
--properties=mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
spark:spark.history.fs.gs.outputstream.type
:這項屬性適用於使用 Cloud Storage 連接器版本2.0.x
的2.0
和2.1
映像檔版本叢集 (2.0
和2.1
映像檔版本叢集的預設連接器版本)。這項設定會控管 Spark 作業將資料傳送至 Cloud Storage 的方式。預設設定為BASIC
,會在工作完成後將資料傳送至 Cloud Storage。如果設為FLUSHABLE_COMPOSITE
,系統會在工作執行期間,按照spark:spark.history.fs.gs.outputstream.sync.min.interval.ms
設定的間隔,定期將資料複製到 Cloud Storage。--properties=spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
spark:spark.history.fs.gs.outputstream.sync.min.interval.ms
: 這項屬性適用於使用 Cloud Storage 連接器版本2.0.x
的2.0
和2.1
映像檔版本叢集 (2.0
和2.1
映像檔版本叢集的預設連接器版本)。 如果spark:spark.history.fs.gs.outputstream.type
設為FLUSHABLE_COMPOSITE
,這個屬性會控管資料傳輸至 Cloud Storage 的頻率 (以毫秒為單位)。預設時間間隔為5000ms
。 指定毫秒時間間隔值時,可以加上或不加上ms
後置字元。--properties=spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=INTERVALms
spark:spark.history.fs.gs.outputstream.sync.min.interval
:這項屬性適用於使用 Cloud Storage 連接器3.0.x
版 (2.2
映像檔版本叢集的預設連接器版本) 的2.2
和後續映像檔版本叢集。這項屬性會取代先前的spark:spark.history.fs.gs.outputstream.sync.min.interval.ms
屬性,並支援加上時間後綴的值,例如ms
、s
和m
。如果spark:spark.history.fs.gs.outputstream.type
設為FLUSHABLE_COMPOSITE
,這項設定會控管資料傳輸至 Cloud Storage 的頻率。--properties=spark:spark.history.fs.gs.outputstream.sync.min.interval=INTERVAL
dataproc:yarn.atsv2.bigtable.instance
:設定 Yarn Timeline Service 第 2 版後,請新增這項屬性,將 YARN 時間軸資料寫入指定的 Bigtable 執行個體,以便在 PHS 叢集的 YARN 應用程式時間軸服務第 2 版和 Tez 網頁介面中查看。注意:如果 Bigtable 執行個體不存在,叢集建立作業會失敗。--properties=dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
flink:jobhistory.archive.fs.dir
:Flink JobManager 會將封存的工作資訊上傳至檔案系統目錄,藉此封存已完成的 Flink 工作。使用這項屬性在flink-conf.yaml
中設定封存目錄。--properties=flink:jobmanager.archive.fs.dir=gs://bucket-name/job-cluster-1/flink-job-history/completed-jobs
搭配 Spark 批次工作負載使用 PHS
如要將永久記錄伺服器與 Dataproc Serverless for Spark 批次工作負載搭配使用,請按照下列步驟操作:
提交 Spark 批次工作負載時,選取或指定 PHS 叢集。
搭配 Google Kubernetes Engine 上的 Dataproc 使用 PHS
如要搭配 Dataproc on GKE 使用永久記錄伺服器,請按照下列步驟操作:
建立 Dataproc on GKE 虛擬叢集時,選取或指定 PHS 叢集。
元件閘道網頁介面
在 Google Cloud 控制台中,前往 Dataproc 的「Clusters」(叢集) 頁面,然後按一下 PHS 叢集名稱,開啟「Cluster details」(叢集詳細資料) 頁面。在「Web Interfaces」(網路介面) 分頁中,選取「Component gateway」(元件閘道) 連結,開啟在 PHS 叢集上執行的網路介面。

Spark 記錄伺服器網頁介面
以下螢幕截圖顯示 Spark 歷記錄伺服器網頁介面,在設定工作叢集的 spark.history.fs.logDirectory
和 spark:spark.eventLog.dir
,以及 PHS 叢集的 spark.history.fs.logDirectory
位置後,會顯示在 job-cluster-1 和 job-cluster-2 上執行的 Spark 工作連結,如下所示:
job-cluster-1 | gs://example-cloud-storage-bucket/job-cluster-1/spark-job-history |
job-cluster-2 | gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history |
phs-cluster | gs://example-cloud-storage-bucket/*/spark-job-history |

搜尋應用程式名稱
您可以在 Spark 記錄伺服器網頁介面的搜尋框中輸入應用程式名稱,列出相關工作。應用程式名稱可透過下列其中一種方式設定 (依優先順序排列):
- 建立 Spark 內容時,在應用程式程式碼中設定
- 工作提交時由 spark.app.name 屬性設定
- 由 Dataproc 設定,代表工作的完整 REST 資源名稱 (
projects/project-id/regions/region/jobs/job-id
)
使用者可以在「搜尋」方塊中輸入應用程式或資源名稱字詞,找出並列出工作。

事件記錄
Spark 記錄伺服器網頁介面提供「事件記錄」按鈕,點選即可下載 Spark 事件記錄。這些記錄檔有助於檢查 Spark 應用程式的生命週期。
Spark 工作
Spark 應用程式會細分為多個工作,而這些工作又會細分為多個階段。每個階段可以有多項工作,這些工作會在執行器節點 (工作人員) 上執行。

在網頁介面中按一下 Spark 應用程式 ID,開啟 Spark Jobs 頁面,其中提供應用程式中的事件時間軸和工作摘要。
按一下工作,即可開啟「工作詳細資料」頁面,當中會顯示有向非循環圖 (DAG) 和工作階段摘要。
按一下階段或使用「階段」分頁選取階段,開啟「階段詳細資料」頁面。
「階段詳細資料」包括 DAG 視覺化、事件時間軸,以及階段內任務的指標。您可以使用這個頁面排解與受限工作、排程器延遲和記憶體不足錯誤相關的問題。DAG 視覺化工具會顯示衍生階段的程式碼行,協助您追蹤程式碼問題。
按一下「執行器」分頁標籤,即可查看 Spark 應用程式的驅動程式和執行器節點相關資訊。
這個頁面的重要資訊包括核心數量,以及每個執行器執行的工作數量。
Tez 網頁介面
在 Dataproc 中,Tez 是 Hive 和 Pig 的預設執行引擎。在 Dataproc 工作叢集上提交 Hive 工作會啟動 Tez 應用程式。
如果您設定 Yarn Timeline Service v2,並在建立 PHS 和 Dataproc 工作叢集時設定 dataproc:yarn.atsv2.bigtable.instance
屬性,YARN 會將產生的 Hive 和 Pig 工作時間軸資料寫入指定的 Bigtable 執行個體,以便在 PHS 伺服器上執行的 Tez 網頁介面中擷取及顯示。

YARN 應用程式時間軸 V2 網頁介面
如果您設定 Yarn 時間軸服務第 2 版,並在建立 PHS 和 Dataproc 工作叢集時設定 dataproc:yarn.atsv2.bigtable.instance
屬性,YARN 會將產生的工作時間軸資料寫入指定的 Bigtable 執行個體,以便在 PHS 伺服器上執行的 YARN 應用程式時間軸服務網頁介面中擷取及顯示。Dataproc 工作會列在網頁介面的「Flow Activity」(流程活動) 分頁中。

設定 Yarn Timeline Service v2
如要設定 Yarn Timeline Service v2,請設定 Bigtable 執行個體,並視需要檢查服務帳戶角色,步驟如下:
視需要檢查服務帳戶角色。Dataproc 叢集 VM 使用的預設 VM 服務帳戶具有建立及設定 Bigtable 執行個體以供 YARN 時間軸服務使用的權限。如果您使用自訂 VM 服務帳戶建立工作或 PHS 叢集,該帳戶必須具備Bigtable
Administrator
或Bigtable User
角色。
必要資料表結構定義
Dataproc PHS 支援 YARN 時間軸服務第 2 版,但需要您在 Bigtable 執行個體中建立特定結構定義。當您建立工作叢集或 PHS 叢集,並將 dataproc:yarn.atsv2.bigtable.instance
屬性設為指向 Bigtable 執行個體時,Dataproc 會建立必要的結構定義。
以下是必要的 Bigtable 執行個體結構定義:
資料表 | 資料欄系列 |
---|---|
prod.timelineservice.application | c、i、m |
prod.timelineservice.app_flow | m |
prod.timelineservice.entity | c、i、m |
prod.timelineservice.flowactivity | i |
prod.timelineservice.flowrun | i |
prod.timelineservice.subapplication | c、i、m |
Bigtable 垃圾收集
您可以為 ATSv2 資料表設定以時間為基礎的 Bigtable 垃圾收集:
安裝 cbt (包括建立
.cbrtc file
)。建立 ATSv2 以時間為基礎的垃圾收集政策:
export NUMBER_OF_DAYS = number \ cbt setgcpolicy prod.timelineservice.application c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.application i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.application m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.app_flow m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.flowactivity i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.flowrun i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication m maxage=${NUMBER_OF_DAYS}
注意:
NUMBER_OF_DAYS:天數上限為 30d
天。