我是Hadoop的新手。
在阅读 Apache HDFS 时,我了解到 HDFS 是一次写入文件系统。其他一些发行版 (Cloudera) 提供附加功能。了解这个设计决策背后的理性是件好事。在我看来,这种设计对 Hadoop 造成了很多限制,使其适用于有限的问题集(类似于日志分析的问题)。
专家评论将帮助我更好地理解 HDFS。
我是Hadoop的新手。
在阅读 Apache HDFS 时,我了解到 HDFS 是一次写入文件系统。其他一些发行版 (Cloudera) 提供附加功能。了解这个设计决策背后的理性是件好事。在我看来,这种设计对 Hadoop 造成了很多限制,使其适用于有限的问题集(类似于日志分析的问题)。
专家评论将帮助我更好地理解 HDFS。
HDFS 拥有其设计的三个主要原因,
HDFS 是通过盲目复制 Google 的 GFS 的设计而设计的,该 GFS 旨在仅支持批量计算
HDFS 最初并非用于批处理计算
设计一个真正的分布式文件系统可以支持高性能的批处理操作以及实时的文件修改是困难的,并且超出了 HDFS 原始实现者的预算和经验水平。
Hadoop 不能被构建为完全读/写的文件系统并没有内在的原因。MapR FS 就是证明。但是实现这样的事情远远超出了原始 Hadoop 项目的范围和能力,并且 HDFS 原始设计中的架构决策基本上排除了改变这个限制。一个关键因素是 NameNode 的存在,因为 HDFS 要求所有元数据操作(例如文件创建、删除或文件长度扩展)都通过 NameNode 往返。MapR FS 通过完全消除 NameNode 并在整个集群中分布元数据来避免这种情况。
随着时间的推移,没有真正的可变文件系统变得越来越烦人,因为 Spark 和 Flink 等 Hadoop 相关系统的工作负载越来越转向可操作、近实时或实时操作。对这个问题的回应包括
MapR FS。如前所述... MapR 实现了 HDFS 的全功能高性能重新实现,包括 POSIX 功能以及 noSQL 表和流 API。该系统多年来一直在一些最大的大数据系统中运行。
苦度。Cloudera 基本上放弃了在 HDFS 之上实施可行的变异,并宣布 Kudu 没有普遍可用性的时间表。Kudu 实现了类似表的结构,而不是完全通用的可变文件。
Apache Nifi 和商业版 HDF。Hortonworks 也在很大程度上放弃了 HDFS,并宣布将应用程序分叉成批处理(由 HDFS 支持)和流(由 HDF 支持)孤岛。
伊西隆。EMC 将 HDFS 有线协议作为其 Isilon 产品线的一部分实施。这允许 Hadoop 集群拥有两个存储孤岛,一个用于基于 HDFS 的大规模、高性能、经济高效的批处理,另一个用于通过 Isilon 访问中型可变文件。
其他。有许多基本上已经失效的努力来弥补 HDFS 的一次写入性质。其中包括 KFS(Kosmix 文件系统)等。这些都没有显着采用。
HDFS 对其文件和应用程序遵循一次写入、多次读取的方法。它假定 HDFS 中的文件一旦写入就不会被修改,尽管它可以被访问 'n' 次(尽管未来版本的 Hadoop 也可能支持此功能)!目前,HDFS 中任何时候都严格有一个 writer。这种假设可以实现高吞吐量数据访问,还可以简化数据一致性问题。网络爬虫或 MapReduce 应用程序最适合 HDFS。
由于 HDFS 的工作原理是“一次写入,多次读取”,因此流式数据访问的特性在 HDFS 中极为重要。因为 HDFS 更多地是为批处理而不是用户交互使用而设计的。重点是数据访问的高吞吐量,而不是数据访问的低延迟。HDFS 的重点不是存储数据,而是如何以尽可能快的速度检索数据,尤其是在分析日志时。在 HDFS 中,读取完整数据比从数据中获取单个记录所花费的时间更重要。HDFS 忽略了一些 POSIX 要求以实现流数据访问。
http://www.edureka.co/blog/introduction-to-apache-hadoop-hdfs/
这种技术的一个优点是您不必为同步而烦恼。由于您只写一次,因此可以保证您的读者在阅读时不会对数据进行操作。
Though this design decision does impose restrictions, HDFS was built keeping in mind efficient streaming data access. Quoting from Hadoop - The Definitive Guide:
HDFS is built around the idea that the most efficient data processing pattern is a write-once, read-many-times pattern. A dataset is typically generated or copied from source, and then various analyses are performed on that dataset over time. Each analysis will involve a large proportion, if not all, of the dataset, so the time to read the whole dataset is more important than the latency in reading the first record.