Go back to the English version of the documentation管理作业性能
管理作业性能
Last updated: 2024年10月07日
可以使用 Spark 实现用于复制和屏蔽数据的屏蔽流。 但是, Spark 具有各种特性和限制,这些特性和限制会影响屏蔽流作业性能,并可能导致作业失败。
管理作业故障
在屏蔽流作业期间,Spark 可能会尝试将所有数据源读取到内存中。 因此,由于内存不足,屏蔽流作业可能会迂到错误。 可放入部署的最大 Spark 处理节点的最大数据量大约为 12GB。 为了使屏蔽流能够复制和屏蔽超过此数据量, Spark 引擎必须能够将数据分区为更小的块。 然后, Spark 可以单独处理每个区块,并与其他区块并行处理。
有一些数据源,比如 Parquet 文件, Spark 可以自动对数据进行分区。 但是,现在屏蔽流都不支持这些数据源。
替代方法是在创建屏蔽流以允许 Spark 对数据进行分区时指定索引列。 对于当前支持的关系数据源,第一步是查找或创建将数据划分为大致相等部分的索引列。 下一步是在索引中提供列名,以便 Spark 可以创建将使用索引的查询。 屏蔽流将自动发现并提供 Spark 所需的其他数据: 列的最小值和最大值以及要使用的数据分区数。
最佳实践
为了获得最佳结果,分区列中的数据必须均匀分布。 分区列的用途是允许 Spark 将数据划分为大块以进行处理。 例如,如果数据为 10 TB 除以 50 个存储区,那么每个区块仍为 0.2 TB。 存储区数量越大,处理速度越快。
选择一个分区列,其中的值在很大的范围内均匀分布。 标识列通常是不错的选择。 例如, "客户" 表具有包含 1.5 M 唯一标识的 Customer_ID 列。 状态列不是很好的示例,因为只有 50 个唯一值。
了解更多信息
父主题: 运行屏蔽流作业