有很多内容解释了数据局部性以及MapReduce
和HDFS
如何在多节点集群上工作。但是我找不到有关单节点设置的太多信息。在我尝试Hadoop
的过去三个月里,我一直在阅读有关映射器和化简器数量的教程和线程,并编写自定义分区程序来优化作业,但我总是认为,它适用于单节点集群吗?
相比,在单节点群集上运行MapReduce
作业的损失是多少?
在这种情况下,通过拆分输入数据提供的并行性是否仍然适用?
从单个节点读取输入HDFS
和从本地文件系统读取有什么区别?
我认为由于我的经验很少,我无法清楚地回答这些问题,所以任何帮助都非常感谢!
提前感谢!
编辑:我知道Hadoop不适合单节点设置,因为@TC1列出的所有因素。那么,设置伪分布式Hadoop环境有什么好处呢?
我一直在阅读有关映射器和化简器数量的教程和线程,并编写自定义分区程序以优化作业,但我总是认为,它适用于单节点集群吗?
- 这要看情况。组合器在映射和归约之间运行,如果使用得当,即使在单个节点上,您也肯定会感受到影响。自定义分区程序 - 可能没有,数据在减少之前到达同一个磁盘。它们会影响逻辑,即您的化简器接收哪些数据,但可能不会影响性能
与多节点集群相比,在单节点集群上运行MapReduce作业的损失是多少?
- 处理能力。如果你可以对数据进行单节点设置,那么你可能不应该首先使用Hadoop来处理。
在这种情况下,通过拆分输入数据提供的并行性是否仍然适用?
- 不,瓶颈通常是 I/O,即访问磁盘。在这种情况下,您仍在访问同一磁盘,只是从更多线程访问它。
从单节点 HDFS 读取输入和从本地文件系统读取有什么区别?
-
几乎不存在。HDFS的理念是
- 将文件存储在大的连续块中,以避免磁盘寻道
- 在节点之间复制这些块以提供弹性;
在单个节点上运行时,这两者都没有意义。
编辑:
"单节点"和"伪分布式"之间的区别在于,在单模式下,所有Hadoop进程都在单个JVM上运行。不涉及网络通信,甚至不通过localhost
等。即使只是在小数据上测试作业,我也建议使用伪分布式,因为这本质上与集群相同。