为什么HDFS一次写入并多次读取?

时间:2013-03-28 06:09:02

标签: hdfs

我是Hadoop的新学习者。

在阅读Apache HDFS时,我了解到HDFS是一次写入文件系统。其他一些发行版(Cloudera)提供了追加功能。了解这一设计决策背后的理性将是一件好事。在我看来,这种设计在Hadoop上创造了许多限制,使其适用于有限的一组问题(类似于日志分析的问题)。

专家评论将帮助我更好地理解HDFS。

4 个答案:

答案 0 :(得分:6)

HDFS的设计有三个主要原因,

  • HDFS是通过盲目复制Google的GFS设计而设计的,该设计仅用于支持批量计算

  • HDFS最初不是用于批量计算的任何东西

  • 设计一个真正的分布式文件系统,可以支持高性能的批处理操作以及实时文件修改,这很难超出HDFS原始实现者的预算和经验水平。

没有内在的原因,Hadoop无法构建为完全读/写文件系统。 MapR FS证明了这一点。但是实现这样的事情远远超出了原始Hadoop项目的范围和功能,并且HDFS原始设计中的架构决策基本上排除了改变这种限制。关键因素是NameNode的存在,因为HDFS要求所有元数据操作(如文件创建,删除或文件长度扩展)通过NameNode进行往返。 MapR FS通过完全消除NameNode并在整个集群中分发元数据来避免这种情况。

随着时间的推移,没有真正的可变文件系统变得越来越烦人,因为与Hadoop相关的系统(如Spark和Flink)的工作负载越来越多地转向运营,接近实时或实时的操作。对此问题的回答包括

  • MapR FS。如上所述...... MapR实现了HDFS的全功能高性能重新实现,包括POSIX功能以及noSQL表和流API。该系统已在一些最大的大数据系统中运行多年。

  • 捻。 Cloudera基本上放弃了在HDFS之上实现可行的突变,并宣布Kudu没有时间表可用于普遍可用性。 Kudu实现了类似表格的结构,而不是完全通用的可变文件。

  • Apache Nifi和商业版HDF。 Hortonworks也基本放弃了HDFS,并宣布他们的战略是将应用程序分批(由HDFS支持)和流媒体(由HDF支持)孤岛。

  • Isilon的。 EMC将HDFS线路协议作为其Isilon产品线的一部分实施。这使得Hadoop集群可以拥有两个存储孤岛,一个用于基于HDFS的大规模,高性能,经济高效的批处理,另一个用于通过Isilon进行中等规模的可变文件访问。

  • 其他。为解决HDFS的一次写入性质,有许多基本上已经不复存在的努力。这些包括KFS(Kosmix文件系统)等。这些都没有被大量采用。

答案 1 :(得分:4)

HDFS遵循其文件和应用程序的一次写入,多次读取方法。它假设一旦写入HDFS中的文件将不会被修改,尽管它可以被访问'n'次(虽然未来版本的Hadoop也可能支持此功能)!目前,HDFS在任何时候都严格拥有一位作家。该假设实现了高吞吐量数据访问,并且还简化了数据一致性问题。 Web爬网程序或MapReduce应用程序最适合HDFS。

由于HDFS的工作原理是“一次写入,多次读取”,因此流式数据访问的特性在HDFS中非常重要。由于HDFS设计更多用于批处理而不是用户的交互式使用。重点是数据访问的高吞吐量而不是数据访问的低延迟。 HDFS的重点不在于存储数据,而在于如何以尽可能最快的速度检索数据,尤其是在分析日志时。在HDFS中,读取完整数据比从数据中获取单个记录所花费的时间更重要。 HDFS忽略了一些POSIX要求,以实现流数据访问。

http://www.edureka.co/blog/introduction-to-apache-hadoop-hdfs/

答案 2 :(得分:2)

这种技术的一个优点是你不必费心同步。由于您只需编写一次,因此您的读者可以保证在读取数据时不会对其进行操作。

答案 3 :(得分:1)

虽然这个设计决定确实施加了限制,但HDFS的构建始终牢记有效的流数据访问。 引自 Hadoop - 权威指南

  

HDFS是围绕最有效的数据处理模式的想法而建立的   一次写入,多次读取模式。通常生成或复制数据集   从源,然后随着时间的推移对该数据集执行各种分析。   每个分析都涉及很大比例(如果不是全部)数据集,所以时间   读取整个数据集比读取第一个数据集的延迟更重要   记录。