将方法存储在除HAR或序列文件之外的Hadoop HDFS中的方法+对它们的怀疑

时间:2016-07-18 08:28:09

标签: java algorithm hadoop apache-spark hdfs

我已阅读大量博客条目以及有关hadoop"中的" Small Files问题的文章,但其中很多似乎只是一个复制粘贴之前的。此外,他们似乎都有点过时了,最后的(2015年)描述了this cloudera blog在2009年初所做的事情。
这是否意味着6年内没有找到归档解决方案?

以下是我研究的原因:我需要移动和编目文件,因为它们来自不同的数字,有时甚至是单一的,然后将它们存储在HDFS中
这些文件将以后访问在Web服务层中返回(必须快速),以供人员或软件打开和查看。
这些文件可能是视频,图片,文档,以及稍后需要使用我使用Java类UUID生成的ID来访问的文件。
使用hdfs的选择是我PM的完整个人,因为我已经建议HBase补偿HDFS索引的不足(尽管我不确定它是否是最佳解决方案)但是,如果不得不处理更大的文件,他已经让我看看HBase的外观(到目前为止1000中最大的是2MB,但我们期待1Gb的视频)。 据我所知,当你使用MapReduce作业,内存消耗时会发生小文件问题,但我想知道:
如果我使用Spark来提取它们,HDFS中有多少文件真的很重要吗?或者,如果我使用webhdfs / v1 /?还是Java?

谈到存储小文件的到目前为止,我发现了三个主要解决方案,所有这些在生产环境中都非常不方便:

  • HAR :使用索引文件提取看起来很棒,但我无法追加或添加新文件的事实非常麻烦。 HAR的开放和娱乐是否会对系统造成太大影响?
  • 序列文件具有相反的优点和缺点:可以附加文件,但它们没有编入索引,因此有一个O(n)外观 - 时间。 值得吗?
  • 合并他们:不可能在我的情况下做。

我是否遗漏了一些关于这个常见问题的新技术? Avro或Parquet用于文件的东西?

1 个答案:

答案 0 :(得分:1)

这里有一些反馈给您的解决方案:

a)HAR不可附加。您可以通过HDFS命令行界面使用新文件解压缩和存档har存档。这两种方法都是作为MapReduce作业实现的,因此执行时间取决于您的计算群集以及归档文件的大小。我和我的同事使用并开发了AHAR。一种工具,允许您在不重写整个存档的情况下更高效地附加数据。

b)据我所知,你的指数查找时间很长。但请注意,使用HAR,由于采用两步索引策略,因此查找时间也更长。

这个post让您对小文件问题和可能的解决方案有了很好的了解。也许你可以“只”增加NameNode的内存。