我想能够存储上百万的小文件(二进制文件-图像,exe等)(~1mb)的hdfs,我的要求基本上是能够查询随机文件,而不是运行mapreduce作业。对我来说,主要的问题是namenode内存问题,而不是mapreduceMap器问题。
所以我的选择是:
har文件-聚合小文件,而不是将它们与其路径一起保存到另一个位置
序列文件-在它们进入时附加它们,这更适合mapreduce作业,所以我几乎消除了它
hbase—将小文件保存到hbase是另一个在google上的几篇文章中描述的解决方案
我想我是在问我有没有遗漏什么?我可以通过将二进制文件显示为大的avro/orc/parquet文件来实现我所需要的吗?然后从java/客户机程序中按名称或哈希查询它们?
谢谢,
1条答案
按热度按时间5jvtdoz21#
如果将多个文件附加到大文件中,则需要维护每个小文件所在的大文件的索引。这基本上就是hbase将为您做的事情。它将数据组合成大文件,存储在hdfs中,并使用密钥排序来支持快速随机访问。在我看来,hbase会满足您的需要,如果您自己动手做一些事情,您可能会重做hbase已经做的大量工作。