5

我是 Hadoop 和 HDFS 的新手,这让我很困惑为什么 HDFS 不适合需要低延迟的应用程序。在大数据场景中,我们将数据分布在不同的社区硬件上,因此访问数据应该更快。

4

3 回答 3

4

Hadoop 完全是一个批处理系统,旨在存储和分析结构化、非结构化和半结构化数据。

Hadoop的map/reduce框架相对较慢,因为它旨在支持不同的格式、结构和海量数据。

我们不应该说HDFS更慢,因为 HBase no-sql 数据库和基于 MPP 的数据源(如 Impala、Hawq)位于 HDFS 上。这些数据源动作更快,因为它们不遵循 mapreduce 执行数据检索和处理。

缓慢的发生只是因为基于 map/reduce 的执行的性质,它会产生大量的中间数据,在节点之间交换大量数据,从而导致巨大的磁盘 IO 延迟。此外,它必须将大量数据保存在磁盘中以在阶段之间进行同步,以便它可以支持从故障中恢复作业。mapreduce 也没有办法在内存中缓存数据的全部/子集。

Apache Spark是另一个批处理系统,但它比 Hadoop mapreduce 相对快,因为它通过 RDD 将大部分输入数据缓存在内存中,并将中间数据保存在内存中,最终在完成或需要时将数据写入磁盘。

于 2015-05-05T10:54:05.913 回答
0

还有一个事实是,HDFS 作为一个文件系统,针对大数据块进行了优化。例如,单个块通常为 64-128 MB,而不是更常见的 0.5-4 KB。因此,即使是小型操作,读取或写入磁盘也会有明显的延迟。再加上它的分布式特性,与传统文件系统相比,您将看到显着的开销(间接、同步、复制等)。

这是从 HDFS 的角度来看的,我认为这是您的主要问题。作为数据处理框架的 Hadoop 有其自身的权衡和效率低下(在 @hserus 答案中得到更好的解释),但它们基本上针对的是相同的利基:可靠的批量处理。

于 2015-09-23T13:12:40.323 回答
0

低延迟或实时应用程序通常需要特定数据。他们需要快速提供最终用户或应用程序正在等待的少量数据。

HDFS是通过在提供容错和高可用性的分布式环境中存储大数据而设计的。数据的实际位置只有Namenode. 它几乎随机地将数据存储在任何Datanode. 它再次将数据文件拆分为固定大小的较小块。因此,由于网络延迟和数据分布以及特定数据的过滤,数据可以快速传输到实时应用程序。因为它有助于运行 MapReduce 或数据密集型作业,因为可执行程序被传输到本地保存数据的机器(数据局部性原则)。

于 2015-09-23T16:09:30.067 回答