以縮短的啟動時間執行 Spark ETL 任務 - AWS Glue

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

以縮短的啟動時間執行 Spark ETL 任務

AWS Glue 2.0 版和更高版本提供升級的基礎設施,可在 AWS Glue 中執行 Apache Spark ETL (擷取、轉換與載入) 任務,同時縮短啟動時間。藉由縮短等待時間,資料工程師可以提高生產力,並增加與 AWS Glue 的互動性。任務開始時間的差異減少,可協助您達到或超越可供分析資料的 SLA。

若要將此功能搭配 AWS Glue ETL 任務,請在建立您的任務時針對 Glue version 選擇 2.0 或更高版本

支援的新功能

本節說明 AWS Glue 2.0 版和更高版本支援的新功能。

支援在任務層級指定其他 Python 模組

AWS Glue 2.0 版和更高版本也允許您在任務層級提供額外的 Python 模組或不同的版本。您可以使用 --additional-python-modules 選項與逗號分隔的 Python 模組清單來新增新模組或變更現有模組的版本。

例如,要更新或新增新的 scikit-learn 模組,請使用以下鍵/值:"--additional-python-modules", "scikit-learn==0.21.3"

此外,在 --additional-python-modules 選項中,您可以指定 Python wheel 模組的 Amazon S3 路徑。例如:

--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3

AWS Glue 使用 Python Package Installer (pip3) 來安裝其他模組。您可以傳遞由 python-modules-installer-option 指定的其他選項到 pip3 來安裝模組。來自 pip3 的任何不相容或限制將適用。

AWS Glue 2.0 版中已提供 Python 模組

AWS Glue 2.0 版本支援以下開箱即用的 python 模組:

  • setuptools—45.2.0

  • subprocess32—3.5.4

  • ptvsd—4.3.2

  • Pydevd—1.9.0

  • PyMySQL—0.9.3

  • docutils—0.15.2

  • jmespath—0.9.4

  • six—1.14.0

  • python_dateutil—2.8.1

  • urllib3—1.25.8

  • botocore—1.15.4

  • s3transfer—0.3.3

  • boto3—1.12.4

  • certifi—2019.11.28

  • chardet—3.0.4

  • idna—2.9

  • requests—2.23.0

  • pyparsing—2.4.6

  • enum34—1.1.9

  • pytz—2019.3

  • numpy—1.18.1

  • cycler—0.10.0

  • kiwisolver—1.1.0

  • scipy—1.4.1

  • pandas—1.0.1

  • pyarrow—0.16.0

  • matplotlib—3.1.3

  • pyhocon—0.3.54

  • mpmath—1.1.0

  • sympy—1.5.1

  • patsy—0.5.1

  • statsmodels—0.11.1

  • fsspec—0.6.2

  • s3fs—0.4.0

  • Cython—0.29.15

  • joblib—0.14.1

  • pmdarima—1.5.3

  • scikit-learn—0.22.1

  • tbats—1.0.9

記錄行為

AWS Glue 2.0 版和更高版本支援不同的預設記錄行為。差異包括:

  • 即時發生記錄。

  • 驅動程式和執行程序有不同的串流。

  • 對於每個驅動程式和執行程序有兩個串流:輸出串流和錯誤串流。

驅動程式和執行器串流

驅動程式串流會透過任務執行 ID 識別。執行器串流由任務 <run id>_<executor task id> 識別。例如:

  • "logStreamName": "jr_8255308b426fff1b4e09e00e0bd5612b1b4ec848d7884cebe61ed33a31789..._g-f65f617bd31d54bd94482af755b6cdf464542..."

輸出和錯誤串流

輸出串流具有程式碼中的標準輸出 (stdout)。錯誤串流具有來自您的程式碼/程式庫的記錄訊息。

  • 日誌串流:

    • 驅動程式日誌串流具有 <jr>,其中 <jr> 是任務執行 ID。

    • 執行器日誌流具有 <jr>_<g>,其中 <g> 是執行器的任務 ID。您可以在驅動程式錯誤日誌中查閱執行器任務 ID。

AWS Glue 2.0 版的預設日誌群組如下:

  • /aws-glue/jobs/logs/output 用於輸出

  • /aws-glue/jobs/logs/error 用於錯誤

提供安全組態時,日誌群組名稱會變更為:

  • /aws-glue/jobs/<security configuration>-role/<Role Name>/output

  • /aws-glue/jobs/<security configuration>-role/<Role Name>/error

在主控台上,Logs (日誌) 連結指向輸出日誌群組,而 Error (錯誤) 連結指向錯誤日誌群組。啟用連續記錄時,Logs (日誌) 連結指向連續日誌群組,而 Output (輸出) 連結指向輸出日誌群組。

記錄規則

注意

連續記錄的預設日誌群組名稱為 /aws-glue/jobs/logs-v2

在 AWS Glue 2.0 版和更高版本中,連續日誌的行為與 AWS Glue 1.0 版相同:

  • 預設日誌群組:/aws-glue/jobs/logs-v2

  • 驅動程式日誌串流:<jr>-driver

  • 執行程式日誌串流:<jr>-<執行器 ID>

    日誌群組的名稱可透過設定 --continuous-log-logGroupName 來變更

    日誌串流名稱可以透過設定 --continous-log-logStreamPrefix 來加上字首

不支援的功能

不支援以下 AWS Glue 功能:

  • 開發端點

  • AWS Glue 2.0 版和更高版本不執行 Apache YARN,因此不會套用 YARN 設定。

  • AWS Glue 2.0 版和更高版本沒有 Hadoop 分散式檔案系統 (HDFS)

  • AWS Glue 2.0 版和更高版本不使用動態配置,因此無法使用 ExecutorAllocationManager 指標

  • 對於 AWS Glue 2.0 版或更高版本任務,您可以指定工作者和工作者類型的數目,但不指定 maxCapacity

  • AWS Glue 2.0 版和更高版本不支援 s3n 開箱即用。我們建議使用 s3s3a。如果任務出於任何原因需要使用 s3n,您可以傳遞以下附加參數:

    --conf spark.hadoop.fs.s3n.impl=com.amazon.ws.emr.hadoop.fs.EmrFileSystem