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

标签 hadoop apache-spark hdfs amazon-emr

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

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

  1. 我读过在HDFS 中保存数据时的小文件问题。保存大量 pdf 和 pptx 文件(最大大小 100-120 MB)的最佳方法是什么?我读过有关序列文件和 HAR(hadoop 存档)的内容,但我不明白它们究竟是如何工作的,也不知道什么是最好的。

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

谢谢!

最佳答案

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

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

关于hadoop - 使用 spark 保存和处理大量小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41058119/

相关文章:

hadoop - 使用 Hive 从文件中收集数据

java - 为什么在 Windows 10 上 Hadoop 安装错误期间运行 "hdfs namenode -format"命令时出现错误?

elasticsearch - 如何针对 ElasticSearch 执行 SQL 查询(使用 org.elasticsearch.spark.sql 格式)?

scala - 如何让 Spark slave 在 Hadoop+Spark 集群中使用 HDFS 输入文件 'local'?

hadoop - 直接从网站获取数据到 hdfs

shell - hadoop fs -put 命令

hadoop - 如何为 Hadoop 的 Map-reduce 作业设置配置?

java - Spark 流停止

java.lang.NoClassDefFoundError : kafka/common/TopicAndPartition 错误

Hadoop 流式传输 "GC overhead limit exceeded"