Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
小文件和hadoop/spark—每个原始文件都是单个计算单元 脚本_Hadoop_Hdfs_Apache Spark - Fatal编程技术网

小文件和hadoop/spark—每个原始文件都是单个计算单元 脚本

小文件和hadoop/spark—每个原始文件都是单个计算单元 脚本,hadoop,hdfs,apache-spark,Hadoop,Hdfs,Apache Spark,我有一个场景,我希望可伸缩地处理包含许多小文件(平均输入文件大小约为0.7MB)的数据。由于这不适用于包含许多小文件的hdfs,我想我会将一种类型的所有输入文件(称为类型A)合并到一个hdfs文件中,将另一种类型的文件(称为类型B)合并到另一个hdfs文件中,以此类推 然而,在我的例子中,我需要保留原始输入文件与其内容之间的关系——因为在我的例子中,由于数据的性质,在map reduce作业中,每个输入文件都应该作为一个单元单独处理 问题是: 我应该如何在每个输入文件进入的聚合文件中标记其边界?

我有一个场景,我希望可伸缩地处理包含许多小文件(平均输入文件大小约为0.7MB)的数据。由于这不适用于包含许多小文件的
hdfs
,我想我会将一种类型的所有输入文件(称为类型A)合并到一个hdfs文件中,将另一种类型的文件(称为类型B)合并到另一个hdfs文件中,以此类推

然而,在我的例子中,我需要保留原始输入文件与其内容之间的关系——因为在我的例子中,由于数据的性质,在map reduce作业中,每个输入文件都应该作为一个单元单独处理

问题是:
  • 我应该如何在每个输入文件进入的聚合文件中标记其边界?理想情况下,我会将它们组织为键值对,键值是原始文件名,值是其内容。希望映射操作能够相应地无缝地使用它——每个键值对代表一个原始文件。这是如何最好地完成的

  • 在需要特殊处理的情况下,如何处理二进制输入文件

  • 假设类型B的文件如前所述聚合为一个文件,映射操作的目标只是从每个原始输入文件创建一个大小类似的输出,那么创建包含所有这些输出的聚合输出文件C的最佳方法是什么?我大约一半的工作只做地图绘制,没有减少

  • 关于ApacheSpark的注意事项 我可能会使用
    apachespark
    作业,而不是
    hadoop
    map reduce作业。我仍然可以混合使用它们,例如,如果hadoop能够更好地进行初始文件聚合

    最后 许多答案都讨论了相关方面,但其中许多/大部分都很陈旧,不一定代表当今版本中的最佳方式,更不用说使用
    Spark
    实现这一点的方法,或者将每个原始输入文件作为一个离散的单元来保存


    谢谢你把这件事弄清楚

    您的文件需要存储在HDFS上吗?你能从S3中读出来吗?Spark支持从S3读取文件,这将允许您绕过此问题。

    看来您还没有解决大部分问题。。。当然可以导入文件。我很想知道您是否已经得出了关于将二进制文件作为离散工作单元处理的任何结论。唯一适合的方法是编写一个从
    FileInputFormat
    扩展而来的自定义类,该类返回一个表示文件全部内容的
    inputspilt