小文件和hadoop/spark—每个原始文件都是单个计算单元 脚本
我有一个场景,我希望可伸缩地处理包含许多小文件(平均输入文件大小约为0.7MB)的数据。由于这不适用于包含许多小文件的小文件和hadoop/spark—每个原始文件都是单个计算单元 脚本,hadoop,hdfs,apache-spark,Hadoop,Hdfs,Apache Spark,我有一个场景,我希望可伸缩地处理包含许多小文件(平均输入文件大小约为0.7MB)的数据。由于这不适用于包含许多小文件的hdfs,我想我会将一种类型的所有输入文件(称为类型A)合并到一个hdfs文件中,将另一种类型的文件(称为类型B)合并到另一个hdfs文件中,以此类推 然而,在我的例子中,我需要保留原始输入文件与其内容之间的关系——因为在我的例子中,由于数据的性质,在map reduce作业中,每个输入文件都应该作为一个单元单独处理 问题是: 我应该如何在每个输入文件进入的聚合文件中标记其边界?
hdfs
,我想我会将一种类型的所有输入文件(称为类型A)合并到一个hdfs文件中,将另一种类型的文件(称为类型B)合并到另一个hdfs文件中,以此类推
然而,在我的例子中,我需要保留原始输入文件与其内容之间的关系——因为在我的例子中,由于数据的性质,在map reduce作业中,每个输入文件都应该作为一个单元单独处理
问题是:
apachespark
作业,而不是hadoop
map reduce作业。我仍然可以混合使用它们,例如,如果hadoop能够更好地进行初始文件聚合
最后
许多答案都讨论了相关方面,但其中许多/大部分都很陈旧,不一定代表当今版本中的最佳方式,更不用说使用Spark
实现这一点的方法,或者将每个原始输入文件作为一个离散的单元来保存
谢谢你把这件事弄清楚 您的文件需要存储在HDFS上吗?你能从S3中读出来吗?Spark支持从S3读取文件,这将允许您绕过此问题。看来您还没有解决大部分问题。。。当然可以导入文件。我很想知道您是否已经得出了关于将二进制文件作为离散工作单元处理的任何结论。唯一适合的方法是编写一个从
FileInputFormat
扩展而来的自定义类,该类返回一个表示文件全部内容的inputspilt
!