Amazon EMR
Amazon EMR 版本指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Amazon EMR 4.x 上的 Hive 的注意事项

本节介绍在使用 Amazon EMR 4.x 发行版上的 Hive 版本 1.0.0 时要注意的差异(与 Amazon EMR 5.x 发行版上的 Hive 2.x 相比)。

不支持 ACID 事务

使用 4.x 发行版时,Amazon EMR 4.x 发行版上的 Hive 不支持 Hive 数据存储在 Amazon S3 中的 ACID 事务。如果您尝试在 Amazon S3 中创建事务表,将出现异常。

对 Amazon S3 中的表的读写操作

Amazon EMR 4.x 发行版上的 Hive 可直接写入 Amazon S3,无需使用临时文件。这可以改善性能,但导致您无法在同一个 Hive 语句内读写 Amazon S3 中的同一个表。一种解决办法是在 HDFS 中创建并使用临时表。

以下示例显示了如何使用多 Hive 语句更新 Amazon S3 中的表。这些语句基于 Amazon S3 中一个名为 my_s3_table 的表在 HDFS 中创建一个名为 tmp 的临时表。之后将使用此临时表的内容更新 Amazon S3 中的表。

CREATE TEMPORARY TABLE tmp LIKE my_s3_table; INSERT OVERWRITE TABLE tmp SELECT ....; INSERT OVERWRITE TABLE my_s3_table SELECT * FROM tmp;

Log4j 与Log4j 2

Amazon EMR 4.x 发行版上的 Hive 使用 Log4j。从版本 5.0.0 开始,默认情况下使用 Log4j 2。这些版本可能需要不同的日志记录配置。有关更多信息,请参阅 Apache Log4j 2

MapReduce 是默认执行引擎

Amazon EMR 4.x 发行版上的 Hive 使用 MapReduce 作为默认执行引擎。从 Amazon EMR 版本 5.0.0 开始,Tez 为默认引擎,这将改善大多数工作流的性能。

Hive 授权

对于 HDFS,Amazon EMR 4.x 发行版上的 Hive 支持 Hive 授权(但对 EMRFS 和 Amazon S3 不支持)。默认情况下,Amazon EMR 集群在禁用授权的状态下运行。

Amazon S3 中的 Hive 文件合并操作

如果 hive.merge.mapfilestrue,Amazon EMR 4.x 发行版上的 Hive 将在仅映射任务结束时合并小型文件。仅当任务的平均输出大小低于 hive.merge.smallfiles.avgsize 设置时,才会触发合并。如果最终输出路径位于 HDFS 中,那么 Amazon EMR Hive 的行为将完全相同。但是,如果输出路径位于 Amazon S3 中,将忽略 hive.merge.smallfiles.avgsize 参数。在那种情况下,如果 hive.merge.mapfiles 设置为 true,会始终触发合并任务。