【发布时间】:2020-05-15 03:12:57
【问题描述】:
在最近升级到 HDP 3.1 后,现在使用 spark 2.3.x 而不是 2.2.x,查询如下:
spark.sql("SELECT * from mydb.mytable").filter('partition_date between "202001010000" and "202001020000").write.parquet("foo.out")
从支持 HDFS 的配置单元表(无对象存储)读取时有时会失败。 您必须知道基础数据(Hive 中的 EXTERNAL 表)具有数据保留期,并且任何早于该日期的数据都将被删除。有时,在执行上述查询期间可能会发生这种删除。删除每 5 分钟发生一次。
即使:
PartitionFilters: [isnotnull(partition_date#3099), (partition_date#3099 >= 202001010000), (partition_date#3099 <= 202001020000)]
分区过滤(谓词下推)似乎比初始路径遍历期间读取的所需分区更多。 升级到 2.3 后,Spark 在 UI 中显示列出文件目录的进度。有趣的是,我们总是得到两个条目。一个用于最旧的可用目录,一个用于两个感兴趣边界中较低的一个:
Listing leaf files and directories for 380 paths:
/path/to/files/on/hdfs/mydb.db/mytable/partition_date==202001010000/sub_part=0, ...
Listing leaf files and directories for 7100 paths:
/path/to/files/on/hdfs/mydb.db/mytable/partition_date=201912301300/sub_part=0, ...
注意:
- 记录的文件数(308、7100)似乎都不能反映手动检查的建议
- 作业(有时)在叶文件的递归列表期间失败
-
错误信息:
文件不存在:/path/to/files/on/hdfs/mydb.db/mytable/partition_date=201912301300/sub_part=0/file_name_unique_hash_timestamp.par
如何强制 Spark 仅列出所需时间间隔内的目录而不列出外部目录,并可能与最长数据保留持续时间发生冲突?
看起来这是相关的:
【问题讨论】:
标签: apache-spark apache-spark-sql hdfs directory-listing