在单节点集群上运行 Hadoop 时 HDFS 如何工作?

Joã*_*elo 5 hadoop mapreduce hdfs

有很多内容解释数据局部性以及如何MapReduceHDFS多节点集群上工作。但我找不到有关单节点设置的太多信息。在过去的三个月里,我Hadoop一直在阅读有关映射器和减速器数量的教程和线程,并编写自定义分区器来优化作业,但我总是想,它是否适用于单节点集群?

MapReduce与多节点集群相比,单节点集群上运行作业的损失是多少?

在这种情况下,通过分割输入数据提供的并行性是否仍然适用?

HDFS从单个节点读取输入和从本地文件系统读取有什么区别?

我认为由于我的经验很少,我无法清楚地回答这些问题,因此感谢您的帮助!

提前致谢!

编辑:我知道 Hadoop 不适合单节点设置,因为 @TC1 列出了所有因素。那么,搭建伪分布式Hadoop环境有什么好处呢?

TC1*_*TC1 3

我总是阅读有关映射器和减速器数量的教程和线程,并编写自定义分区器来优化作业,但我总是想,它是否适用于单节点集群?

  • 这取决于。组合器在映射和归约之间运行,如果使用得当,即使在单个节点上,您也肯定会感受到影响。自定义分区程序 - 可能不会,数据在减少之前会到达同一磁盘。它们会影响逻辑,即您的减速器接收哪些数据,但可能不会影响性能

与多节点集群相比,在单节点集群上运行 MapReduce 作业的损失是多少?

  • 加工能力。如果您可以通过单节点设置来处理数据,那么您可能一开始就不应该使用 Hadoop 进行处理。

在这种情况下,通过分割输入数据提供的并行性是否仍然适用?

  • 不,瓶颈通常是 I/O,即访问磁盘。在这种情况下,您仍然访问同一磁盘,只是从更多线程访问它。

从单节点HDFS读取输入和从本地文件系统读取有什么区别?

  • 几乎不存在。HDFS的想法是

    • 将文件存储在大的连续块中,以避免磁盘查找
    • 在节点之间复制这些块以提供弹性;

    当在单个节点上运行时,这两者都是没有意义的。

编辑:

“单节点”和“伪分布式”之间的区别在于,在单模式下,所有 Hadoop 进程都在单个 JVM 上运行。不涉及网络通信,甚至不通过localhost等方式进行通信。即使只是在小数据上测试作业,我也建议使用伪分布式,因为这本质上与集群相同。

  • 并行性之所以适用,是因为每个映射器都独立运行,但除非作业受 CPU 限制,否则您只需让许多映射器从单个 HDD 读取数据,而 HDD I/O 是整个设置中最慢的部分。您的映射器闲置在那里,因为它们没有获得足够的数据,而这仅仅是因为磁盘太慢。Hadoop 集群机器通常针对磁盘 I/O 进行了优化,并且具有大量 RAID 0 磁盘,或者现在仅具有 SSD。 (2认同)