我将数据从Kafka写入到s3中的目录中,其结构如下:
s3://bucket/topics/topic1/files1...N
s3://bucket/topics/topic2/files1...N
.
.
s3://bucket/topics/topicN/files1...N
此存储桶中已经有很多数据,我想使用AWS Glue将其转换为镶木地板并对其进行分区,但是有太多数据无法一次完成。我正在研究书签,似乎您不能使用它仅读取最新数据或处理数据块。是否有推荐的处理此类数据的方法,以便在输入新数据时可以使用书签?
此外,书签是否要求每次我运行作业以找出哪些文件大于上次运行的max_last_modified时间戳时,火花或胶水都必须扫描整个数据集?这似乎效率很低,尤其是随着源存储桶中数据的不断增长。
答案 0 :(得分:0)
我了解到Glue希望所有相似的文件(具有相同结构和目的的文件)都在一个文件夹中,并带有可选的子文件夹。
s3://my-bucket/report-type-a/yyyy/mm/dd/file1.txt
s3://my-bucket/report-type-a/yyyy/mm/dd/file2.txt
...
s3://my-bucket/report-type-b/yyyy/mm/dd/file23.txt
report-type-a文件夹下的所有文件都必须具有相同的格式。将不同的报告(如report-type-b)放在不同的文件夹中。
您可以尝试将一些输入文件放在适当的位置,运行ETL作业,在存储桶中放置更多文件,然后再次运行,等等。
我通过使当前文件正常工作(每天一个文件),然后回填历史文件来进行尝试。但是请注意,这不能完全起作用。我一直在s3://my-bucket/report-type/2019/07/report_20190722.gzp
中正常处理文件,但是当我尝试将过去的文件添加到's3:// my-bucket / report-type / 2019/05 / report_20190510.gzip`时,Glue没有“看到”或处理旧文件夹中的文件。
但是,如果我将旧报表移至当前分区,则它可以正常工作:s3://my-bucket/report-type/2019/07/report_20190510.gzip
。