存储和处理大量小文件

Storing and processing a lot of tiny files

我们的服务器上有很多大小从 1Kb 到 5Mb 的文件。这些文件的总大小约为 7Tb。处理算法 - 阅读并做出有关此文件的一些决定。文件可能有多种格式:doc、txt、png、bmp 等。因此我无法合并这些文件以获得更大的文件。 我如何才能有效地存储和处理这些文件?什么技术很适合这项任务?

  1. 首先根据类型将文件分成不同的目录。您甚至可以使用单独的目录进行分区。例子 /data/images/YYYY-MM-DD , /data/text/YYYY-MM-DD
  2. 对每个路径使用 multipleInputs 和适当的 InputFormat。
  3. 如果需要,在将数据发送到 reducer 之前将数据规范化为通用格式。

有多种方法可以根据您的需要摄取数据。

  1. 使用kafka根据type(image , text )存储不同主题下的数据,然后从kafka复制到hdfs
  2. 使用Flume

由于您拥有大量数据,

  1. 请每周汇总 HDFS 中的数据。您可以使用 oozie 或 falcon 来自动化每周汇总过程
  2. 在您的 Spark 或 MR 代码中使用 CombinedInPutFormat。

最后但并非最不重要的一点是,使用 Hive 将数据映射为 table 以将其公开给外部客户端。

您可以使用各种技术来存储和处理这些文件。下面提到的是您可以使用的技术。

1 Apache Kafka:您可以为每种格式创建不同的主题,并将您的数据推送到这些主题中。 优势:

  • 根据您的负载,您可以轻松提高消费速度。

2 Hadoop:您可以将数据存储在 hdfs 格式中,并可以设计 MR 作业来处理。

3您可以使用任何文档存储NOSQL数据库来存储您的数据

注意:以上所有解决方案都将以分布式格式存储您的数据,您可以运行在商用机器上

  1. 将您的数据存储在云(AWS、Google、Azure)中并在那里使用 API 来获取和处理数据。 (如果您还希望与其他应用程序共享您的数据)

Hadoop archieves (HAR) 是解决这个问题的常用方法。 有关此的更多详细信息,请访问:https://hadoop.apache.org/docs/r2.7.0/hadoop-archives/HadoopArchives.html

您还可以选择使用 SequenceFile、HBase,如中所述:https://blog.cloudera.com/blog/2009/02/the-small-files-problem/

但是,查看您的用例 HAR 符合要求。