注意事项 - Amazon EMR

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

注意事项

当您将 DynamoDB 连接器与 Apache Spark 或 Apache Hive 结合使用时,请注意这些行为和限制。

将 DynamoDB 连接器与 Apache Spark 结合使用时的注意事项

  • Spark SQL 不支持使用存储处理程序选项创建 Hive 表。有关更多信息,请参阅 Apache Spark 文档中的指定 Hive 表的存储格式

  • Spark SQL 不支持使用存储处理程序执行 STORED BY 操作。如果您想通过外部 Hive 表与 DynamoDB 表交互,请先使用 Hive 创建该表。

  • 要将查询转换为 DynamoDB 查询,DynamoDB 连接器会使用谓词下推。谓词下推按映射到 DynamoDB 表分区键的列筛选数据。谓词下推仅在您将连接器与 Spark SQL 配合使用时才起作用,而不是 API。 MapReduce

将 DynamoDB 连接器与 Apache Hive 结合使用时的注意事项

调整 mapper 的最大数量

  • 如果使用 SELECT 查询从映射到 DynamoDB 的外部 Hive 表读取数据,EMR Serverless 上的映射任务数将按照为 DynamoDB 表配置的总读取吞吐量除以每个映射任务的吞吐量计算。每个映射任务的默认吞吐量为 100。

  • Hive 作业可以使用超出每个 EMR Serverless 应用程序配置最大容器数的映射任务数,具体取决于为 DynamoDB 配置的读取吞吐量。此外,长时间运行 Hive 查询会占用 DynamoDB 表的所有预置读取容量。这会对其他用户产生负面影响。

  • 您可以使用 dynamodb.max.map.tasks 属性设置映射任务的上限。您还可以使用此属性,根据任务容器大小调整每个映射任务读取的数据量。

  • 您可以在 Hive 查询级别或 start-job-run 命令的 hive-site 分类中设置 dynamodb.max.map.tasks 属性。此值必须等于或大于 1。当 Hive 处理查询时,生成的 Hive 作业使用的 dynamodb.max.map.tasks 值不会超过从 DynamoDB 表读取时的值。

调整每个任务的写入吞吐量

  • EMR Serverless 上每个任务的写入吞吐量是根据为 DynamoDB 表配置的总写入吞吐量除以 mapreduce.job.maps 属性值来计算的。对于 Hive,此属性的默认值为 2。因此,Hive 作业最后阶段的前两个任务可能会使用所有的写入吞吐量。这将导致同一作业或其他作业中其他任务的写入节流。

  • 为避免写入节流,您可以根据最后阶段的任务数或希望为每个任务分配的写入吞吐量来设置 mapreduce.job.maps 属性值。在 EMR Serverless 上 start-job-run 命令的 mapred-site 分类中设置此属性。