Dataproc 永久記錄伺服器

總覽

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 叢集所在的專案中。

  • PHS 叢集不支援 Kerberos個人驗證

建立 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: 使用這項屬性設定 Flink HistoryServer,監控以半形逗號分隔的目錄清單。

    屬性範例:

    --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.logDirectoryspark: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-dirmapred: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.x2.02.1 映像檔版本叢集 (2.02.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.x2.02.1 映像檔版本叢集 (2.02.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 屬性,並支援加上時間後綴的值,例如 mssm。如果 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 批次工作負載搭配使用,請按照下列步驟操作:

  1. 建立 PHS 叢集

  2. 提交 Spark 批次工作負載時,選取或指定 PHS 叢集。

搭配 Google Kubernetes Engine 上的 Dataproc 使用 PHS

如要搭配 Dataproc on GKE 使用永久記錄伺服器,請按照下列步驟操作:

  1. 建立 PHS 叢集

  2. 建立 Dataproc on GKE 虛擬叢集時,選取或指定 PHS 叢集。

元件閘道網頁介面

在 Google Cloud 控制台中,前往 Dataproc 的「Clusters」(叢集) 頁面,然後按一下 PHS 叢集名稱,開啟「Cluster details」(叢集詳細資料) 頁面。在「Web Interfaces」(網路介面) 分頁中,選取「Component gateway」(元件閘道) 連結,開啟在 PHS 叢集上執行的網路介面。

Spark 記錄伺服器網頁介面

以下螢幕截圖顯示 Spark 歷記錄伺服器網頁介面,在設定工作叢集的 spark.history.fs.logDirectoryspark: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 記錄伺服器網頁介面的搜尋框中輸入應用程式名稱,列出相關工作。應用程式名稱可透過下列其中一種方式設定 (依優先順序排列):

  1. 建立 Spark 內容時,在應用程式程式碼中設定
  2. 工作提交時由 spark.app.name 屬性設定
  3. 由 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 執行個體,並視需要檢查服務帳戶角色,步驟如下:

  1. 建立 Bigtable 執行個體

  2. 視需要檢查服務帳戶角色。Dataproc 叢集 VM 使用的預設 VM 服務帳戶具有建立及設定 Bigtable 執行個體以供 YARN 時間軸服務使用的權限。如果您使用自訂 VM 服務帳戶建立工作或 PHS 叢集,該帳戶必須具備Bigtable AdministratorBigtable 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 天。