阅读此页面后:
http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-differences.html
“运营差异和注意事项”部分“消除了对亚马逊S3的直接写入”。
我想知道-这是否意味着在EMR4.x版本中从配置单元写入S3将比5.x版本更快?
如果是这样,这不是一种倒退吗?为什么AWS想要消除这种优化?
写入位于S3中的配置单元表是一种非常常见的情况。
有人能解决这个问题吗?
发布于 2021-08-11 14:43:23
这种优化最初是由Qubole开发的,并推送到Apache Hive。参见here。
此功能相当危险,因为它绕过了Hive容错机制,还迫使开发人员使用通常不必要的中间表,这反过来会导致性能下降并增加成本。
非常常见的用例是当我们需要将增量数据合并到分区的目标表中时,描述为here查询是从自身插入重写表,没有中间表(在单个查询中)是相当有效的。查询可能要复杂得多,需要连接多个表。在此使用情形中,启用直接写入时会发生以下情况:
正在查询完成之前删除
在你引用的亚马逊页面上也有同样的描述,但细节较少:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-differences.html
在Qubole page上描述了另一个可能的问题,提到了一些使用前缀的现有修复,尽管这不适用于上面的用例,因为将新文件写入正在读取的文件夹无论如何都会产生问题。
此外,映射器,缩减程序可能会失败并重新启动,整个会话可能会失败并重新启动,直接写入文件,即使延迟删除旧文件似乎也不是好主意,因为它增加了无法恢复的失败或数据损坏的机会。
要禁用直接写入,请设置此配置属性:
set hive.allow.move.on.s3=true; --this disables direct write您可以将此功能用于小任务,当不读取正在写入的同一个表时,尽管对于小任务,它不会给您提供太多。当你在一个非常大的表中重写许多分区,并且最后移动任务非常慢时,这种优化是最有效的,那么你可能想要在数据损坏的风险下启用它。
https://stackoverflow.com/questions/42924476
复制相似问题