故障排除 - 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 开发人员指南》https://docs.aws.amazon.com/managed-flink/latest/java/中的运行应用程序

在无法访问互联网的 VPC 中作为具有持久状态的应用程序进行部署

适用于 Apache Flink Studio 的托管服务 Flink Studio deploy-as-application 功能不支持无法访问互联网的 VPC 应用程序。我们建议您在 Studio 中构建应用程序,然后使用 Managed Service for Apache Flink 手动创建 Flink 应用程序并选择您在笔记本中构建的 zip 文件。

以下步骤概述了此方法:

  1. 构建您的 Studio 应用程序并将其导出到 Amazon S3。这应该是一个 zip 文件。

  2. 手动创建 Managed Service for Apache Flink Studio 应用程序,代码路径引用了 Amazon S3 中的 zip 文件位置。此外,还需要使用以下env变量配置应用程序(总共2 groupID、3var):

  3. kinesis.analytics.flink.run.options

    1. python: source/note.py

    2. jarfile:libPythonApplicationDependencies/.jar

  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 大小和构建时间

Studio deploy-as-app for Python 应用程序打包了 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>
例 示例:在部署带有 deploy-as-app 功能的 Python 应用程序之前移除scipy软件包。
  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. 选择 “重新启动”,然后选择 “确定”