Algorithm 在5台计算机集群中以完全分布式模式运行Hadoop比在一台计算机中运行要花费更多的时间

Algorithm 在5台计算机集群中以完全分布式模式运行Hadoop比在一台计算机中运行要花费更多的时间,algorithm,hadoop,mapreduce,cluster-computing,Algorithm,Hadoop,Mapreduce,Cluster Computing,我在一个由5台机器组成的集群中运行hadoop,1台主机器和4台从机器。我正在为普通推荐中的朋友运行一个map reduce算法,我正在使用一个包含49995行或49995人的文件,每个人后面跟着他的朋友 问题是,在集群上执行算法比在一台机器上执行算法需要更多的时间 我不知道这是否正常,因为文件不够大,因此由于机器之间的延迟,时间变慢了,或者我必须更改一些内容以便在不同的节点上并行运行算法,但我认为这是自动完成的 通常,在一台计算机上运行算法需要: real 3m10.044s us

我在一个由5台机器组成的集群中运行hadoop,1台主机器和4台从机器。我正在为普通推荐中的朋友运行一个map reduce算法,我正在使用一个包含49995行或49995人的文件,每个人后面跟着他的朋友

问题是,在集群上执行算法比在一台机器上执行算法需要更多的时间

我不知道这是否正常,因为文件不够大,因此由于机器之间的延迟,时间变慢了,或者我必须更改一些内容以便在不同的节点上并行运行算法,但我认为这是自动完成的

通常,在一台计算机上运行算法需要:

   real 3m10.044s
   user 2m53.766s
   sys  0m4.531s
在群集上时,需要以下时间:

    real    3m32.727s
    user    3m10.229s
    sys 0m5.545s
以下是我在主机上执行start_all.sh脚本时的输出:

    ubuntu@ip:/usr/local/hadoop-2.6.0$ sbin/start-all.sh 
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    Starting namenodes on [master]
    master: starting namenode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-namenode-ip-172-31-37-184.out
    slave1: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-datanode-slave1.out
    slave2: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-datanode-slave2.out
    slave3: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-datanode-slave3.out
    slave4: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-datanode-slave4.out
    Starting secondary namenodes [0.0.0.0]
    0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-ubuntu-secondarynamenode-ip-172-31-37-184.out
    starting yarn daemons
    starting resourcemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-ubuntu-resourcemanager-ip-172-31-37-184.out
    slave4: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-ubuntu-nodemanager-slave4.out
    slave1: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-ubuntu-nodemanager-slave1.out
    slave3: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-ubuntu-nodemanager-slave3.out
    slave2: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-ubuntu-nodemanager-slave2.out
下面是我执行stop_all.sh脚本时的输出:

   ubuntu@ip:/usr/local/hadoop-2.6.0$ sbin/stop-all.sh 
   This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
   Stopping namenodes on [master]
   master: stopping namenode
   slave4: no datanode to stop
   slave3: stopping datanode
   slave1: stopping datanode
   slave2: stopping datanode
   Stopping secondary namenodes [0.0.0.0]
   0.0.0.0: stopping secondarynamenode
   stopping yarn daemons
   stopping resourcemanager
   slave2: no nodemanager to stop
   slave3: no nodemanager to stop
   slave4: no nodemanager to stop
   slave1: no nodemanager to stop
   no proxyserver to stop

提前谢谢你

一个可能的原因是您的文件没有上传到HDFS上。换句话说,它存储在一台机器上,所有其他运行的机器都必须从该机器获取数据。 在运行mapreduce程序之前。您可以执行以下步骤:

1-确保HDFS已启动并正在运行。打开链接: 船长:50070 其中master是运行namenode的节点的IP,并在该链接上检查是否所有节点都处于活动和运行状态。因此,如果您有4个datanodes,您应该看到:datanodes 4 live

2-电话:

hdfs dfs-放置您的文件/someFolderOnHDFS/yourfile

通过这种方式,您已将输入文件上载到HDFS,并且数据现在分布在多个节点之间

现在试着运行你的程序,看看它是否更快


祝你好运

1你的成绩如何?在任何事情发生之前进行分析是没有意义的。2尝试创建一个更大的文件,看看是否会再次发生这种情况。3您的文件是分发的还是在一台机器上?如果是后者,如果算法相对简单,那么分发就没有好处here@amit我更新了我的问题,以向您提供更多详细信息。不幸的是,我无法创建另一个比我拥有的文件更大的文件,因为生成它并不简单。我认为我的文件分布在不同的从机上,因为在不同的从机上执行hdfs dfs-ls/user/ubuntu/Folder会得到我发送的文件。我还在主机上执行了hdfs dfs-put myfile.txt Folder命令,因此它应该分布在所有主机上。