Azure Synapse Analytics 中的 Apache Spark 池配置
Spark 池是一组元数据,用于定义实例化 Spark 实例时的计算资源要求和关联的行为特征。 这些特征包括但不限于名称、节点数、节点大小、缩放行为和生存时间。 Spark 池本身不消耗任何资源。 创建 Spark 池不会产生任何费用。 仅当在目标 Spark 池上执行 Spark 作业以及按需实例化 Spark 实例后,才会产生费用。
可在 Synapse Analytics 中的 Spark 池入门中了解如何创建 Spark 池及查看其所有属性
节点
Apache Spark 池实例由一个头节点和两个或更多个工作器节点组成,一个 Spark 实例中至少有三个节点。 头节点运行额外的管理服务,例如 Livy、Yarn 资源管理器、Zookeeper 和 Spark 驱动程序。 所有节点都运行节点代理和 Yarn 节点管理器等服务。 所有工作器节点都运行 Spark 执行程序服务。
节点大小
可以使用不同的节点大小来定义 Spark 池,大小范围为从具有 4 个 vCore 和 32 GB 内存的小型计算节点,到每个节点具有 64 个 vCore 和 432 GB 内存的 XXLarge 计算节点。 可以在创建池后更改节点大小,不过,这可能需要重启实例。
大小 | vCore | 内存 |
---|---|---|
小 | 4 | 32 GB |
中型 | 8 | 64 GB |
大 | 16 | 128 GB |
XLarge | 32 | 256 GB |
XXLarge | 64 | 432 GB |
自动缩放
使用 Apache Spark 池的自动缩放,可以根据活动量自动纵向扩展和缩减计算资源。 启用自动缩放功能后,请设置要缩放的节点的最小和最大数目。 禁用自动缩放功能后,设置的节点数将固定不变。 可以在创建池后更改此设置,不过,这可能需要重启实例。
弹性池存储
Apache Spark 池现在支持弹性池存储。 使用弹性池存储,Spark 引擎可以监视工作器节点临时存储,并在需要时附加额外的磁盘。 Apache Spark 池在池实例化时利用临时磁盘存储。 Spark 作业将随机映射输出、随机数据和溢出的数据写入本地 VM 磁盘。 可以利用本地磁盘的操作示例包括排序、缓存和持久保留。 当临时 VM 磁盘空间耗尽时,Spark 作业可能会因“磁盘空间不足”错误(java.io.IOException: 设备上没有剩余空间)而失败。 出现“磁盘空间不足”错误时,防止作业失败的重任将转移到客户,客户需重新配置 Spark 作业(例如,调整分区数)或群集(例如,将更多节点添加到群集)。 这些错误可能会不一致,用户最终可能会通过运行生产作业进行大量试验。 对于用户来说,此过程可能在多方面开销巨大:
- 浪费时间。 客户需要通过试用来大量试验作业配置并找出错误,需要了解 Spark 的内部指标才能做出正确决策。
- 浪费资源。 由于生产作业可能会处理不同的数据量,因此如果资源未额外预配,Spark 作业可能会意外失败。 例如,考虑一下数据偏斜问题,该问题可能导致某些节点需要的磁盘空间比其他节点多。 目前,在 Synapse 中,群集中的每个节点都获得相同的磁盘空间大小,因此在所有节点上增加磁盘空间并不是一种理想的解决方案,会导致巨大的浪费。
- 作业执行速度变慢。 在假设方案中,我们通过自动缩放节点来解决问题(假设成本对最终客户来说不是问题),则相对于添加存储(需要几秒钟)而言,添加计算节点仍然显得很昂贵(需要几分钟)。
你无需执行任何操作,并且作业失败次数应该会更少。
注意
Azure Synapse 弹性池存储目前为公共预览版。 在公共预览版期间,不收取使用弹性池存储的费用。
自动暂停
自动暂停功能会在设置的空闲时段后释放资源,从而减少 Apache Spark 池的总体成本。 启用此功能后,可以设置空闲时间的分钟数。 自动暂停功能与自动缩放功能互不相关。 无论是启用还是禁用了自动缩放,都可以暂停资源。 可以在创建池后更改此设置,不过,这需要重启活动会话。