2013-03-28 1000 views
4

我是Hadoop的新学员。为什么HDFS只写入一次并多次读取?

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

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

回答

0

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

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

1

这种技术的一个优点是你不必担心同步。由于您只写一次,您的读者可以保证数据在读取时不会被操纵。

3

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/

5

有迹象表明,HDFS有它具有设计三大理由,

  • HDFS是由亦步亦趋地复制谷歌的政府飞行服务队,其目的仅支持

    批次计算的设计设计
  • HDFS最初不是用于任何事物,而是批量计算

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

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

随着时间的推移,没有一个真正的可变文件系统变得越来越烦人,因为像Spark和Flink这样的Hadoop相关系统的工作量已经越来越多地转向运行,接近实时或实时操作。对此问题的回答包括:

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

  • Kudu。 Cloudera基本上放弃了在HDFS之上实现可行的变异,并宣布Kudu没有时间表的全面可用性。 Kudu实现了表格式的结构,而不是完全一般的可变文件。

  • Apache Nifi和商业版HDF。 Hortonworks也基本上放弃了HDFS,并宣布了将应用程序批量分发(由HDFS支持)和流媒体(由HDF支持)的策略。

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

  • 其他。有一些本质上已经停止的努力来补救HDFS的一次写入性质。这些包括KFS(Kosmix文件系统)等。这些都没有显着的采用。