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 $对象将继续引起第二天执行的问题。
有什么建议吗?