我是Hadoop和HDFS的新手,我很困惑为什么HDFS不适合需要低延迟的应用程序。在大数据场景中,我们将数据分布在不同的社区硬件上,因此访问数据应该更快。
答案 0 :(得分:1)
Hadoop完全是批处理系统,旨在存储和分析结构化,非结构化和半结构化数据。
Hadoop的 map / reduce 框架相对较慢,因为它旨在支持不同的格式,结构和大量数据。
我们不应该说 HDFS 比较慢,因为HBase no-sql数据库和基于MPP的数据源如Impala,Hawq都位于HDFS上。这些数据源的作用更快,因为它们不遵循mapreduce执行数据检索和处理。
发生缓慢只是因为基于map / reduce的执行的性质,它产生大量中间数据,节点之间交换大量数据,从而导致巨大的磁盘IO延迟。此外,它必须在磁盘中保留大量数据以实现阶段之间的同步,以便它可以支持从故障中恢复作业。此外,mapreduce中没有办法将数据的全部/子集缓存在内存中。
Apache Spark 是另一个批处理系统,但它比Hadoop mapreduce快,因为它通过RDD将大部分输入数据缓存在内存中,并将中间数据保存在内存中,最终写入完成后或在需要时将数据写入磁盘。
答案 1 :(得分:0)
还有一个事实是HDFS作为一个文件系统,针对大块数据进行了优化。例如,单个块通常为64-128 MB,而不是通常的.5 - 4 KB。因此,即使对于小型操作,读取或写入磁盘也会有明显的延迟。再加上它的分布式特性,与传统的文件系统相比,您将看到显着的开销(间接,同步,复制等)。
从HDFS的角度来看,我认为这是你的主要问题。 Hadoop作为一个数据处理框架有自己的一套权衡和效率低下(在@hserus答案中更好地解释),但它们基本上是针对相同的利基:可靠的批量处理。
答案 2 :(得分:0)
低延迟或实时应用程序通常需要特定数据。他们需要快速提供最终用户或应用程序正在等待的一些少量数据。
HDFS
是通过在分布式环境中存储大数据来设计的,该环境提供容错和高可用性。数据的实际位置仅为Namenode
所知。它几乎随机地将数据存储在任何Datanode
上。它再次将数据文件拆分为固定大小的较小块。因此,由于网络延迟和数据分布以及特定数据的过滤,数据可以快速传输到实时应用程序。因为它有助于运行MapReduce或数据密集型作业,因为可执行程序被转移到本地保存数据的机器上(数据位置原则)。