在执行INSERT OVERWRITE TABLE查询时,如何阻止Hive将临时文件写入s3。
我在hive-default.xml中找到了一个属性
<property>
<name>hive.exec.skips3scratch</name>
<value>true</value>
<description>Do not write temp files to S3 scratch space. This will
increase the performance by avoiding multiple writes in S3, but can
corrupt the table or partition being written to, esp. if the job
fails.
</description>
</property>
我在hive-site.xml中设置了它,但它似乎仍然将临时文件写入s3。
我有什么遗失的东西吗?
答案 0 :(得分:0)
在阅读cloudera论坛页面时,这是一种可能的解决方法:
对于使用S3中的数据定义的Hive表,为了执行'INSERT OVERWRITE TABLE ...',使用'like'创建临时本地表,将数据写入本地hdfs,然后使用distcp移动数据到s3。
注意: 要记住的事情。 EMR版本的Hive已经过修改,可以很好地与S3配合使用。 Apache Hive将从S3读取数据,但是在写入S3时遇到问题(因为它尝试将临时文件写入s3并且在读取它时存在问题)。上面提到的方法是解决这个问题的一种方法。
来源:http://community.cloudera.com/t5/Batch-SQL-Apache-Hive/hive-s3-andhive-exec-skips3-scratch/td-p/641