2017-09-01 55 views
1

我希望能够在HDFS上存储数百万个小文件(二进制文件 - 图像,exe等)(〜1Mb),我的要求基本上是能够查询随机文件而不是运行MapReduce作业。 我的主要问题是Namenode内存问题,而不是MapReduce映射问题。HDFS小文件设计

所以我的选择是:

  1. HAR文件 - 骨料小文件,只比他们的HAR他们节省://路径在另一个地方
  2. 序列文件 - 添加他们,因为他们进来,这更适合于MapReduce作业,所以我几乎消灭它
  3. HBase的 - 保存小文件,HBase的是在几篇文章中所描述的谷歌

我猜我阿斯金的另一个解决方案g如果有什么我错过了?我可以通过将二进制文件添加到大Avro/ORC/Parquet文件来实现我所需要的吗?然后通过名称或从Java /客户端程序散列来查询它们?

感谢,

回答

1

如果追加多个文件到大文件,那么你就需要保持其大文件的每个小文件驻留在这基本上是什么HBase的会为你做一个索引。它将数据合并到大文件中,将它们存储在HDFS中,并使用键上的排序来支持快速随机访问。在我看来,Hbase会满足您的需求,如果您自己手动推出某些内容,那么最终可能会重做许多Hbase已经完成的工作。