如何将Hadoop MapReduce与HDFS分离?

如何将Hadoop MapReduce与HDFS分离?,hadoop,hdfs,Hadoop,Hdfs,我很好奇,您是否可以从本质上将HDFS文件系统与MapReduce框架分开。我知道Hadoop的要点是在有问题的数据的机器上运行maps和reduces,但我想知道您是否可以更改*.xml文件来更改jobtracker、namenode和datanodes在哪台机器上运行的配置 目前,我的配置是2个VM设置:一个(主)带有Namenode、Datanode、JobTracker、Tasktracker(和SecondaryNameNode),另一个(从)带有Datanode、Tasktracke

我很好奇,您是否可以从本质上将HDFS文件系统与MapReduce框架分开。我知道Hadoop的要点是在有问题的数据的机器上运行maps和reduces,但我想知道您是否可以更改*.xml文件来更改jobtracker、namenode和datanodes在哪台机器上运行的配置

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


谢谢

在配置文件中不指定此类选项。 你要做的是注意在每台机器上启动什么样的deamons(你称它们为VM,但我认为你指的是机器)

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

如果您看一下这个脚本,您将看到它所做的是调用与启动datanodes、TaskTracker和namenode、jobtracker相对应的许多子脚本

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

  • 修改主文件和从属文件如下: 主文件应包含machine1的名称 从属服务器应包含machine2的名称

  • 运行start-mapred.sh

  • 修改主文件和从属文件如下: 主文件应包含机器1 从属文件应包含machine1

  • 运行start-dfs.sh


  • 我必须告诉你,我从来没有尝试过这样的配置,所以我不确定这是否可行,但你可以试试。无论如何,解决办法就是朝这个方向

    在配置文件中不指定此类选项。 你要做的是注意在每台机器上启动什么样的deamons(你称它们为VM,但我认为你指的是机器)

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

    如果您看一下这个脚本,您将看到它所做的是调用与启动datanodes、TaskTracker和namenode、jobtracker相对应的许多子脚本

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

  • 修改主文件和从属文件如下: 主文件应包含machine1的名称 从属服务器应包含machine2的名称

  • 运行start-mapred.sh

  • 修改主文件和从属文件如下: 主文件应包含机器1 从属文件应包含machine1

  • 运行start-dfs.sh

  • 我必须告诉你,我从来没有尝试过这样的配置,所以我不确定这是否可行,但你可以试试。无论如何,解决办法就是朝这个方向

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

    首先,我不知道为什么要将计算与存储分开。本地先生的全部目的都失去了,以为你可以成功地执行任务

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

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

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

    首先,我不知道为什么要将计算与存储分开。本地先生的全部目的都失去了,以为你可以成功地执行任务

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


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

    这可能可行,但要停止群集,必须再次更改主/从文件。这可能可行,但是为了停止集群,必须再次更改主/从文件。要回答为什么有人要将MR与HDFS分开的问题,可能需要插入一个不同的DFS来代替HDFS。我们用MR+