最佳实践
在供应和管理无服务器实例以及运行 Spark 应用程序时,请使用以下一组建议的准则。
最佳实践 | 描述 | 引用链接 |
---|---|---|
将单独的 IBM Analytics Engine 服务实例用于开发和生产环境。 | 这是一般的最佳做法。 通过为不同环境创建单独的 IBM Analytics Engine 实例,可以先测试任何配置和代码更改,然后再将其应用于生产实例。 | 不适用 |
升级到最新的 Spark 版本 | 随着开放式源代码 Spark 版本的发布,在内部测试所需的时间间隔之后,它们将在 IBM Analytics Engine 中可用。 请注意在“发行说明”部分中发布新的 Spark 版本,并升级实例的运行时以将应用程序移至最新的 Spark 运行时。 不推荐使用较旧的运行时,随着较新版本的发布,将最终除去这些运行时。 在对生产实例进行更改之前,请确保在新运行时上测试应用程序。 | |
授予基于角色的访问权 | 您应该根据用户的需求向 IBM Analytics Engine 实例上的所有用户授予基于角色的访问权。 例如,只有自动化团队才有权提交应用程序,因为它有权访问私钥,并且 DevOps 团队应该只能查看所有应用程序及其状态的列表。 | |
选择正确的 IBM Cloud Object Storage 配置 |
|
|
将专用端点用于外部 Hive metastore | 如果您正在使用 Spark SQL,并且想要使用外部元存储 (例如,使用 IBM Cloud Databases for PostgreSQL 作为 Hive 元存储),那么必须将专用端点用于数据库连接以实现更好的性能和成本节省。 | |
在资源过量使用的情况下运行应用程序 | 存在与每个 Analytics Engine 无服务器实例相关联的配额。 在实例上提交应用程序时,将从实例配额为其分配资源。 如果应用程序请求超出可用配额的资源,那么应用程序将不会启动或将以低于所请求的资源的方式运行,这可能会导致应用程序运行速度低于预期,或者在某些情况下导致应用程序失败。 您应该始终监视实例上的当前资源消耗,以确保应用程序在给定限制内舒适地运行。 如果需要,您可以通过支持凭单调整限制。 | |
静态资源分配与自动缩放 | 提交应用程序时,可以先指定执行程序的数量 (静态分配) 或使用自动缩放选项 (动态分配)。 在决定是使用静态分配还是自动缩放之前,您可能希望通过使用静态和自动缩放来改变不同的数据集来运行一些基准测试,以找到正确的配置。 一般注意事项: -如果您知道应用程序所需的资源 (核心和内存) 数量,并且应用程序运行的不同阶段之间没有差异,那么建议分配静态资源以提高性能。 -如果要优化资源利用率,可以选择自动缩放执行程序,其中根据应用程序的实际需求分配执行程序。 请注意,在应用程序中使用自动缩放时,可能会有轻微的关联延迟。 |
|
启用和微调正向日志记录 | -为服务实例启用正向日志记录,以帮助对应用程序进行故障诊断,显示进度以及打印或显示输出。 请注意,根据 IBM Log Analysis 实例中转发或保留的日志数量,日志转发会产生成本。 根据您的用例和需要,您需要决定最佳设置。 -使用缺省 API 启用日志转发时,仅会启用驱动程序日志。 如果还需要执行程序日志,例如,如果存在仅在执行程序上看到的错误,那么还需要定制日志记录以启用执行程序日志记录。 执行程序日志可能会变得非常大,因此请平衡用于优化转发到日志记录实例的日志量的选项与用于故障诊断的日志中的信息。 -在选择正确的配置和搜索方法时,请遵循 IBM Log Analysis 的最佳实践。 例如,您可能想要为 7 天搜索配置 IBM Log Analysis 实例套餐,并将日志归档到 IBM Cloud Object Storage 以节省成本。 另请参阅 IBM Log Analysis 文档,以获取有关根据关键字和时间点等搜索您感兴趣的日志的方法。 |
|
定制服务实例 | -您可能需要定制服务实例,以引入未预先安装的 Python 或 conda 软件包,或者引入一些可供 Spark 应用程序使用的文件 (证书或配置文件)。 根据您的需要,使用库集定制实例,并在提交应用程序时使用这些库集。 -库集的大小会影响应用程序启动时间和执行程序启动时间 (当您自动缩放应用程序时)。 另请注意,库集的大小有一个上限,即 2 GB。 因此,如果不同的应用程序需要不同的库集,那么最好使用不同的库集,以便在提交应用程序时可以单独指定这些库集。 -仅使用定制来引入无法由应用程序详细信息参数引入的文件。 请参阅 用于提交 Spark 应用程序的参数。 如果符合您的用例,那么必须使用标准 spark-submit 等效参数选项,例如 files ,jars ,packages 和 pyFiles 选项。 仅当您需要不适合其中任何类别 (例如,自签名证书,JAAS 配置文件或 .so 文件) 的文件时,才应使用“为文件下载定制”选项。 |
|
检索应用程序列表时应用过滤器 | 当您需要在 UI 中或使用 API 或 CLI 检索应用程序列表时,最好应用相应的过滤器并检索所需的集合。 | |
使用其他服务或工具来支持功能 | 除了使用 IBM Log Analysis 和 IBM Cloud Object Storage 实例外,根据您的用例,您可能希望使用其他支持工具和服务。 例如,您可以使用 Apache Airflow (由您管理) 来编排,调度和自动化应用程序。 您还可以使用 IBM Secrets Manager 来存储应用程序所需的私钥,并在提交应用程序之前使用自动化脚本从 Secrets Manager 中读取私钥。 您还可以创造性地使用应用程序参数,传递从应用程序内的 Secrets Manager 直接读取所需私钥所需的令牌。 | |
使用备用区域中的实例进行备份和灾难恢复 | 目前,可以在两个区域 (即达拉斯 (us-south ) 和法兰克福 (eu-de )) 中创建 IBM Analytics Engine 无服务器实例。虽然建议在数据所在的区域中创建实例,但在备用区域中使用与主实例相同的配置集创建备份实例 (如果主实例变为不可用或不可用) 总是很有用。 如果需要,您的自动化应允许在两个区域之间切换应用程序提交。 |
不适用 |
对应用程序文件,数据文件和主实例使用单独的存储区和服务凭证 | 使用 "关注分离" 原则来区分不同资源之间的访问权。 -请勿将数据或应用程序文件存储在主实例存储区中。 -将单独的存储区用于数据和应用程序文件。 -使用单独的访问凭证 (基于 IAM 密钥) ,对应用程序文件的存储区和包含数据的存储区具有受限访问权。 |
|
应用程序必须在 72 小时内运行 | 应用程序或内核可以运行的小时数有限制。 为了安全性和合规性修补,将停止运行超过 72 小时的所有运行时。 如果您确实有一个大型应用程序,请将您的应用程序分成较小的区块,这些区块将在 72 小时内运行。 如果您正在运行 Spark 流式应用程序,请确保配置检查点并进行监视,以在应用程序停止时重新启动应用程序 | |
仅在需要时启动和停止 Spark 历史记录 | 当不再需要使用 Spark 历史记录服务器时,请始终停止该服务器。 请记住,Spark 历史记录服务器在其状态为“已启动”时持续使用 CPU 和内存资源。 |