【问题标题】:How to separate Hadoop MapReduce from HDFS?如何将 Hadoop MapReduce 与 HDFS 分离?
【发布时间】:2012-07-07 11:22:12
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

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

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

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

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

    1. 修改主从文件如下: 主文件应包含 machine1 的名称 从站应包含 machine2 的名称

    2. 运行 start-mapred.sh

    3. 修改主从文件如下: 主文件应包含 machine1 从属文件应包含 machine1

    4. 运行 start-dfs.sh

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

    【讨论】:

    • 这可能有效,但要停止集群,必须再次更改主/从文件。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 回答您的问题,即为什么有人想要将 MR 与 HDFS 分开——人们可能想要插入不同的 DFS 来代替 HDFS。我们使用 MR + Ceph 组合进行了一些实验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多