故障診斷 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。

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

故障診斷

本節包含 Studio 筆記本的疑難排解資訊。

停止停滯的應用程式

若要停止停留在暫時狀態的應用程式,請在Force參數設定為的情況下呼叫StopApplication動作true。如需詳細資訊,請參閱 Managed Service for Apache Flink 開發人員指南中的執行應用程式

在沒有網際網路存取的 VPC 中部署為具有持久狀態的應用程式

Apache Flink 工作室 deploy-as-application 功能的託管服務不支持沒有互聯網訪問的 VPC 應用程序。我們建議您在 Studio 中建置應用程式,然後使用 Managed Service for Apache Flink 手動建立 Flink 應用程式,並選取您在筆記本中建置的 zip 檔案。

下列步驟概述了這種方法:

  1. 建置 Studio 應用程式並將其匯出到 Amazon S3。這必須是一個 zip 檔案。

  2. 使用引用 Amazon S3 中 zip 檔案位置的程式碼路徑,手動建立 Managed Service for Apache Flink 應用程式。此外,您將需要使用以下 env 變數 (總共 2 個 groupID,3 個 var) 設定應用程式:

  3. kinesis.analytics.flink.run.options

    1. python: source/note.py

    2. 罐子文件:庫PythonApplicationDependencies/.

  4. managed.deploy_as_app.options

    1. DatabaseARN: <glue database ARN (Amazon Resource Name)>

  5. 您可能需要為應用程式使用的服務授與使用 Managed Service for Apache Flink Studio 和 Managed Service for Apache Flink IAM 角色的許可。您可以為兩個應用程式使用相同的 IAM 角色。

D eploy-as-app 尺寸和構建時間縮短

Python 應用程序的工作室 deploy-as-app 打包 Python 環境中可用的所有內容,因為我們無法確定您需要哪些庫。這可能會導致比必要的大小。 deploy-as-app 下列程序示範如何藉由解除安裝相依性來減少 deploy-as-app Python 應用程式大小的大小。

如果您正在構建具有 Studio deploy-as-app 功能的 Python 應用程序,如果您的應用程序不依賴,則可以考慮從系統中刪除預先安裝的 Python 包。這不僅有助於減少最終成品大小,以避免違反應用程序大小的服務限制,還可以縮短具有該 deploy-as-app 功能的應用程序的構建時間。

您可以執行以下命令以列出所有已安裝的 Python 套件及其各自的安裝大小,並有選擇地移除較大的套件。

%flink.pyflink !pip list --format freeze | awk -F = {'print $1'} | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{gsub("-","_",$1); print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null | sort -hr
注意

apache-beam 是 Flink Python 運作必需的套件。始終不能移除此套件及其相依性。

以下是在 Studio V2 中預先安裝的、可以考慮移除的 Python 套件之清單:

scipy statsmodels plotnine seaborn llvmlite bokeh pandas matplotlib botocore boto3 numba
若要從 Zeppelin 筆記本中移除 Python 套件:
  1. 在移除之前,請檢查您的應用程式是否依賴於該套件或其任何消費套件。您可以使用 pipdeptree 識別套件的相依性。

  2. 執行以下命令來移除套件:

    %flink.pyflink !pip uninstall -y <package-to-remove>
  3. 如果需要檢索錯誤移除的套件,請執行以下命令:

    %flink.pyflink !pip install <package-to-install>
範例 示例:在使用功能部署 Python 應用程序之前刪除scipy deploy-as-app 包。
  1. 使用 pipdeptree 發現所有 scipy 使用者,並驗證是否可以安全移除 scipy

    • 透過筆記本安裝該工具:

      %flink.pyflink !pip install pipdeptree
    • 藉由執行以下命令取得 scipy 的反向相依性樹:

      %flink.pyflink !pip -r -p scipy

      您應該會看到類似下列的輸出 (為求簡化已進行壓縮):

      ... ------------------------------------------------------------------------ scipy==1.8.0 ├── plotnine==0.5.1 [requires: scipy>=1.0.0] ├── seaborn==0.9.0 [requires: scipy>=0.14.0] └── statsmodels==0.12.2 [requires: scipy>=1.1] └── plotnine==0.5.1 [requires: statsmodels>=0.8.0]
  2. 仔細檢查 seabornstatsmodelsplotnine 在應用程式中的使用情況。如果應用程式不依賴 scipyseabornstatemodelsplotnine 中的任意一項,便可移除所有這些套件,或只移除應用程式不需要的套件。

  3. 執行以下命令移除套件:

    !pip uninstall -y scipy plotnine seaborn statemodels

取消作業

本節說明如何取消無法從 Apache Zeppelin 取得的 Apache Flink 作業。若要取消此類作業,請前往 Apache Flink 儀表板,複製作業 ID,然後在下列其中一個範例中使用它。

取消單一作業:

%flink.pyflink import requests requests.patch("https://zeppelin-flink:8082/jobs/[job_id]", verify=False)

取消所有執行中作業:

%flink.pyflink import requests r = requests.get("https://zeppelin-flink:8082/jobs", verify=False) jobs = r.json()['jobs'] for job in jobs: if (job["status"] == "RUNNING"): print(requests.patch("https://zeppelin-flink:8082/jobs/{}".format(job["id"]), verify=False))

取消所有作業:

%flink.pyflink import requests r = requests.get("https://zeppelin-flink:8082/jobs", verify=False) jobs = r.json()['jobs'] for job in jobs: requests.patch("https://zeppelin-flink:8082/jobs/{}".format(job["id"]), verify=False)

重新啟動 Apache Flink 解譯器

在 Studio 筆記本中重新啟動 Apache Flink 解譯器

  1. 選擇熒幕右上角附近的組態

  2. 選擇解譯器

  3. 選擇重新啟動,然後按確定