【问题标题】:Save and Process huge amount of small files with spark使用 spark 保存和处理大量小文件
【发布时间】:2017-04-24 19:06:55
【问题描述】:

我是大数据新手!我有一些关于如何在 EMR 集群上处理以及如何在 spark 中保存大量小文件(pdf 和 ppt/pptx)的问题。

我的目标是将数据(pdf 和 pptx)保存到 HDFS(或集群中的某种类型的数据存储中),然后从 spark 中提取该文件中的内容并将其保存在 elasticsearch 或某些关系数据库中。

  1. 我在HDFS中保存数据时读到了小文件的问题。保存大量 pdf 和 pptx 文件(最大大小 100-120 MB)的最佳方法是什么?我已经阅读了有关序列文件和 HAR(hadoop 存档)的信息,但没有一个我不明白它是如何工作的,我也不知道什么是最好的。

  2. 处理这些文件的最佳方法是什么?我知道某些解决方案可能是 FileInputFormat 或 CombineFileInputFormat 但我不知道它究竟是如何工作的。我知道不能在单独的任务上运行每个小文件,因为集群会陷入瓶颈。

谢谢!

【问题讨论】:

  • 我在 Hadoop 上处理了一个 PDF 文件希望下面的链接对 ybhavesh.blogspot.in/2015/12/… 有帮助(注意:处理是在 Mapreduce 中完成的)

标签: hadoop apache-spark hdfs amazon-emr


【解决方案1】:

如果您使用对象存储(如 S3)而不是 HDFS,则无需对文件应用任何更改或转换,您可以将它们分别作为单个对象或 blob(这也意味着它们可以使用标准工具,无需使用自定义类或代码解包或重新格式化)。 然后,您可以使用 boto(用于 s3)等 python 工具读取文件,或者如果您正在使用 wholeTextFile 或 binaryFiles 命令使用 spark,然后使用标准库创建 BytesIO (python) / ByteArrayInputStream (java) 来读取它们。

2) 在处理文件时,您有项目和分区之间的区别。如果您有 10000 个文件,您可以创建 100 个分区,每个分区包含 100 个文件。无论如何,每个文件都需要一次处理一个,因为每个文件的标题信息是相关的并且可能不同。

【讨论】:

    【解决方案2】:

    同时,我为 HDFS 中的小文件问题找到了一些解决方案。我可以使用以下方法:

    1. HDFS Federation 帮助我们分配名称节点的负载:https://hortonworks.com/blog/an-introduction-to-hdfs-federation/

    2. 如果您的文件大小不太大,HBase 也是一个不错的选择。

    值的大小有实际限制(例如,在 HBase 中存储 10-50MB 的对象可能要求太多);在邮件列表中搜索有关此主题的对话。 HBase 中的所有行都符合数据模型,其中包括版本控制。在进行设计时要考虑到这一点,以及 ColumnFamily 的块大小。 https://hbase.apache.org/book.html

    1. Apache Ozone 是类似于 S3 的对象存储,但位于本地。在撰写本文时,据我所知,Ozone 还没有准备好生产。 https://hadoop.apache.org/ozone/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2010-09-12
      相关资源
      最近更新 更多