我有一个场景,我想要可扩展处理包含许多小尺寸文件(平均输入文件大小约为0.7MB)的数据。因为这不应该与hdfs
一起使用许多小文件due to the "small files problem",我想我会将一种类型的所有输入文件(让我们称之为类型A)合并为一个hdfs文件,另一个文件合并键入(将其称为类型B)到另一个hdfs文件中,依此类推。
如何在汇总文件中标记每个输入文件的边界?理想情况下,我将它们组织为键值对,关键是例如原始文件名,值为其内容。希望映射操作能够相应地无缝地使用它 - 每个键值对代表一个原始文件。如何最好地完成?
如果需要特殊处理,我如何处理二进制输入文件?
假设类型B的文件聚合到一个单独的文件,并且地图操作的目标只是从每个原始输入文件创建一个类似大小的输出,那么创建聚合的最佳方法是什么输出文件C包含所有这些输出?大约一半的工作只会映射,不会减少......
我可能会使用Apache Spark
个工作,而不是hadoop
地图减少工作。我仍然可以在他们之间混合,例如如果初始文件聚合与hadoop更好地工作。
许多答案讨论了相关方面,但其中很多/大部分是陈旧的,并不一定代表当今版本中的最佳方式,更不用说使用Spark
执行此操作的方法,或将每个原始输入文件保存为离散单位。
感谢您清除此消息!
答案 0 :(得分:0)
您的文件是否需要存储在HDFS上?你能从S3读到它们吗? Spark支持从S3读取文件,这样可以解决这个问题。