Hadoop 使用spark保存和处理大量小文件

Hadoop 使用spark保存和处理大量小文件,hadoop,apache-spark,hdfs,amazon-emr,Hadoop,Apache Spark,Hdfs,Amazon Emr,我是大数据新手!我有一些关于如何处理以及如何在电子病历集群上的spark中保存大量小文件(pdf和ppt/pptx)的问题 我的目标是将数据(pdf和pptx)保存到HDFS(或集群中的某种类型的数据存储)中,然后从spark中提取该文件的内容,并将其保存在elasticsearch或某些关系数据库中 我读过在HDFS中保存数据时小文件的问题。保存大量pdf和pptx文件(最大大小为100-120 MB)的最佳方法是什么?我读过Sequence文件和HAR(hadoop归档),但没有一本我不知道

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

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

  • 我读过在HDFS中保存数据时小文件的问题。保存大量pdf和pptx文件(最大大小为100-120 MB)的最佳方法是什么?我读过Sequence文件和HAR(hadoop归档),但没有一本我不知道它到底是如何工作的,我也不知道什么是最好的

  • 处理此文件的最佳方式是什么?我知道有些解决方案可能是FileInputFormat或CombineFileInputFormat,但我也不知道它到底是如何工作的。我知道不能在单独的任务上运行每个小文件,因为集群将处于瓶颈状态

  • 谢谢

    如果使用对象存储(如S3)而不是HDF,则无需对文件进行任何更改或转换,并且可以将每个文件作为单个对象或blob(这也意味着使用标准工具可以轻松读取,无需使用自定义类或代码解包或重新格式化)。 然后,您可以使用诸如boto(对于s3)之类的python工具读取文件,或者如果您正在使用wholeTextFile或binaryFiles命令使用spark,然后使用标准库生成BytesIO(python)/ByteArrayInputStream(java)来读取这些文件


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

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

  • HDFS联合帮助我们分配namenodes的负载:

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

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

  • ApacheOzone是类似S3的对象存储,但它是内部部署的。在撰写本文时,据我所知,臭氧还没有准备好生产
    我已经在Hadoop上处理了一个PDF文件,希望下面的链接有帮助(注意:处理是在Mapreduce中完成的)