

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 作为具有持久状态的应用程序进行部署
<a name="how-notebook-durable"></a>

您可以构建自己的代码并将其导出到 Amazon S3。您可以将您在笔记中编写的代码提升到持续运行的流处理应用程序。在 Managed Service for Apache Flink 上运行 Apache Flink 应用程序有两种模式：使用 Studio 笔记本，您可以交互式地开发代码，实时查看代码结果，并在笔记中对其进行可视化。将备注部署为在流模式下运行后，Managed Service for Apache Flink 会为您创建一个持续运行、从源中读取数据、写入目标、维护长时间运行的应用程序状态并根据源流的吞吐量自动缩放的应用程序。

**注意**  
将应用程序代码导出到 S3 存储桶必须与 Studio 笔记本位于同一区域。

只有在 Studio 笔记本上部署满足以下条件的笔记：
+ 段落必须按顺序排序。部署应用程序时，注释中的所有段落将按笔记中显示的顺序 (left-to-right, top-to-bottom) 执行。您可以通过在备注中选择 “**运行所有段落**” 来检查此顺序。
+ 您的代码是 Python 和 SQL 或 Scala 和 SQL 的组合。我们目前不支持 Python 和 Scala。 deploy-as-application
+ 您的笔记应该只有以下解释器：`%flink`、`%flink.ssql`、`%flink.pyflink`、`%flink.ipyflink`、`%md`。
+ 不支持使用[齐柏林飞艇上下文](https://zeppelin.apache.org/docs/0.9.0/usage/other_features/zeppelin_context.html)对象`z`。不返回任何内容的方法除了记录警告之外什么都不做。其他方法会引发 Python 异常或无法在 Scala 中编译。
+ 注释必须生成一个 Apache Flink 任务。
+ 不支持将带有[动态表单](https://zeppelin.apache.org/docs/0.9.0/usage/dynamic_form/intro.html)的注释部署为应用程序。
+ 在部署为应用程序时，将跳过 %md ([Markdown](https://zeppelin.apache.org/docs/0.9.0/interpreter/markdown.html)) 段落，因为这些段落应包含人类可读的文档，不适合作为生成的应用程序的一部分运行。
+ 在部署为应用程序时，将跳过禁止在齐柏林飞艇中运行的段落。即使禁用的段落使用了不兼容的解释器，例如，`%flink.ipyflink`在带有`%flink``and %flink.ssql`解释器的注释中，也会在将注释部署为应用程序时跳过该段落，并且不会导致错误。
+ 要成功部署应用程序，必须至少有一个支持运行的源代码（Flink SQL PyFlink 或 Flink Scala）段落。
+ 在通过注释部署的应用程序中，在段落中的解释器指令（例如`%flink.ssql(parallelism=32)`）中设置并行度将被忽略。相反，您可以通过 AWS Command Line Interface 或 AWS API 更新已部署的应用程序 AWS 管理控制台，以根据应用程序所需的并行度级别更改 Parallelism and/or ParallelismPer KPU 设置，也可以为已部署的应用程序启用自动缩放。
+ 如果您要部署为具有持久状态的应用程序，则您的 VPC 必须可以访问互联网。如果您的 VPC 无法访问互联网，请参阅[在无法访问互联网的 VPC 中作为具有持久状态的应用程序进行部署](how-zeppelin-troubleshooting.md#how-zeppelin-troubleshooting-deploying-no-internet)。

## Scala/Python 标准
<a name="how-notebook-durable-scala"></a>
+ 在您的 Scala 或 Python 代码中，使用 [Blink 计划程序](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/table/#dependency-structure)（`senv``stenv`对于 Scala；`s_env`对于 `st_env` Python），而不是使用较旧的 “Flink” 计划程序（`stenv_2`对于 Scala，`st_env_2`对于 Python）。Apache Flink 项目建议在生产用例中使用 Blink 计划程序，这是齐柏林飞艇和 Flink 中的默认计划程序。
+ 你的 Python 段落不得使用 [shell 调用/赋值](https://ipython.readthedocs.io/en/stable/interactive/python-ipython-diff.html#shell-assignment)，也不得在要作为应用程序部署的注释`%conda`中使用`!`[IPython 魔法命令](https://ipython.readthedocs.io/en/stable/interactive/magics.html)，比如`%timeit`或注释。
+ 您不能使用 Scala 案例类作为传递给高阶数据流运算符（如和）的函数的参数。`map` `filter`有关 Scala 案例类的信息，请参阅 Scala 文档中的[案例类](https://docs.scala-lang.org/overviews/scala-book/case-classes.html)。

## SQL 条件
<a name="how-notebook-durable-sql"></a>
+ 不允许使用简单的 SELECT 语句，因为没有任何地方可以与段落的输出部分相提并论，可以传递数据。
+ 在任何给定的段落中，DDL 语句 (`USE`、`CREATE`、`ALTER`、`DROP`、`SET`、`RESET`) 必须在 DML (`INSERT`) 语句之前。这是因为段落中的 DML 语句必须作为单个 Flink 任务一起提交。
+ 最多应该有一个段落中包含 DML 语句。这是因为，对于该 deploy-as-application功能，我们只支持向 Flink 提交单个作业。

有关更多信息和示例，请参阅[通过 Amazon Managed Service for Apache Flink、Amazon Translate 和 Amazon Comprehend 使用 SQL 函数翻译、编辑和分析流数据](https://aws.amazon.com/blogs/machine-learning/translate-redact-and-analyze-streaming-data-using-sql-functions-with-amazon-kinesisanalytics-MyApplicatioamazon-translate-and-amazon-comprehend/)。