1

我很好奇您是否可以从本质上将 HDFS 文件系统与 MapReduce 框架分开。我知道 Hadoop 的主要目的是在有问题的数据的机器上运行映射和减少,但我想知道你是否可以只更改 *.xml 文件来更改 jobtracker、namenode 和机器的配置数据节点正在运行。

目前,我的配置是 2 个 VM 设置:一个(主)带有 Namenode、Datanode、JobTracker、Tasktracker(和 SecondaryNameNode),另一个(从)带有 DataNode、Tasktraker。本质上,我想要改变的是让主节点具有 NameNode 数据节点、JobTracker,并让从节点只有 TaskTracker 来执行计算(稍后,有更多的从节点上只有 TaskTracker;每个都有一个) . 瓶颈将是两个 VM 之间用于计算 map 和 reduce 的数据传输,但由于这个阶段的数据非常小,我主要不关心它。我只想知道这种配置是否可行,以及如何进行。有小费吗?

谢谢!

4

2 回答 2

1

您没有在配置文件中指定此类选项。你需要做的是照顾你在每台机器上启动什么样的守护进程(你称它们为 VM,但我认为你的意思是机器)。

我想您通常使用 start-all.sh 脚本启动所有内容,您可以在 hadoop 安装目录下的 bin 目录中找到该脚本。

如果你看一下这个脚本,你会发现它的作用是调用一些与启动 datanodes、tasktrackers 和 namenode、jobtracker 相对应的子脚本。

为了实现你所说的,我会这样做:

  1. 修改 masters 和 slaves 文件如下: Master 文件应该包含 machine1 的名字 Slaves 应该包含 machine2 的名字

  2. 运行 start-mapred.sh

  3. 修改 masters 和 slaves 文件如下: Master 文件应该包含 machine1 Slaves 文件应该包含 machine1

  4. 运行 start-dfs.sh

我必须告诉你,我从未尝试过这样的配置,所以我不确定这是否可行,但你可以试一试。无论如何,解决方案是朝着这个方向!

于 2012-07-07T01:06:06.220 回答
0

本质上,我想要改变的是让主节点带有 NameNode DataNode(s)、JobTracker,并让从节点只有 TaskTracker 来执行计算(稍后,有更多的从节点上只有 TaskTracker;每个都有一个) .

首先,我不确定为什么要将计算与存储分开。MR locality 的全部目的都丢失了,以为您可能能够成功运行该作业。

使用dfs.hosts,dfs.hosts.exclude参数来控制哪些数据节点可以连接到 namenode 和mapreduce.jobtracker.hosts.filename,mapreduce.jobtracker.hosts.exclude.filename参数来控制哪些 tasktracker 可以连接到 jobtracker。这种方法的一个缺点是数据节点和任务跟踪器在被排除且不属于 Hadoop 集群的节点上启动。

另一种方法是修改代码,让 tasktracker 和 datanode 有一个单独的从属文件。目前,这在 Hadoop 中不受支持,需要更改代码。

于 2012-07-07T03:22:12.780 回答