s3 _ $ folder $对象导致EMR 5.11.2及更高版本的“ MSCK REPAIR TABLE”中出现问题

时间:2018-09-27 04:29:10

标签: hadoop amazon-s3 hive amazon-emr

EMR将为S3中存储的每个文件夹生成_$folder$对象,这是不可避免的

Avoid creation of _$folder$ keys in S3 with hadoop (EMR))。

例如,在“ day = 09”目录下,EMR将结果存储在“ data_hour = 23”文件夹中,它将产生一个"data_hour=23_$folder$"对象。

最近我将EMR版本从 5.8.2 升级到了 5.11.2 _$folder$对象开始引起问题。

错误日志如下。相同的代码永远不会在5.8.2中引发任何错误:

2018-09-26T05:54:41,720 ERROR [abc729c3-4ed5-4e46-906f-e8fdd6de9d4b 
main([])]: metadata.HiveMetaStoreChecker 
(HiveMetaStoreChecker.java:checkPartitionDirs(552)) - 
org.apache.hadoop.hive.ql.metadata.HiveException: MSCK finds a file 
rather than a directory when it searches for hdfs://ip-10-0-0-240.eu- 
west-1.compute.internal:8020/XXX/XXX/day=09/data_hour=23_$folder$

我的任务基本上是,使用s3-dist-cp将数据从S3复制到Hadoop,并每天对这些数据运行Hive脚本,并将结果存储到S3以供第二天执行。

该故障发生在Hive脚本中的“ MSCK修理表”中。而且只有分区标识才有问题。

例如,在S3中,“ day = 09”对象旁边有一个“ day = 09_ $ folder $”对象,因为“ day = 09”不是分区ID,没关系。

删除_ $ folder $对象后,不会引发任何错误。

但是,由于EMR将始终为新存储的数据生成_ $ folder $对象。这些_ $ folder $对象将继续引起第二天执行的问题。

有什么建议吗?

0 个答案:

没有答案