问题描述
在研究了一段hadoop后,对hadoop的分布式架构有了一定的了解,都知道移动计算比移动数据效率更高,那么hadoop是如何将计算移动到各个节点上进行计算的呢?我猜想是将计算的逻辑和其依赖的包都分发到了各个节点上,然后再在各自的节点上进行计算,不知道是不是这样,希望大家能把细节补充的更完善。
解决方案
Hadoop 的NameNode 知道集群的计算资源分布,数据存储分布.在分布任务的时候,需要对数据进行切分,然后进行计算. 这个时候分配就需要考虑数据的存储位置.Hadoop会尽量将计算分布到数据存储的节点上.如果存储的节点没用资源,比如CPU完全被占用.那会尽量将计算分布到数据存贮节点相同机架上的节点进行计算.最后如果还是没办法做到,那就只能随机的选取一个节点了.
解决方案二:
最简单的还是打成一个包, 同时帮你找了个相关文章讲解了如何通过libjars引入第三方的包(比如Spring).http://www.linuxidc.com/Linux/2012-07/65006.htm如果问题弄明白了,记得结贴.
解决方案三:
不知道楼主问的是不是mapreduce,如果是的话..首先hdfs是一个分布式的存储系统,大文件被分成小块存在不同机器上,一般每个部分还有三个副本,这是为了减小机器挂掉之后的损失,也方便了分配计算任务给就近的机器。在MapReduce进行的时候,master会根据要处理的文件大小、使用者指定的任务数来确定需要集群内的哪些机器来进行运算工作。移动计算应该指的是这个时候对于具体执行机的选择。由于传输慢、带宽限制,大文件的传输肯定是代价很高的,这时候寻找距离数据更近的机器显然有较大收益,最好就在三个副本存储的位置的其中一个。这样就避免移动数据了嘛。至于移动计算,那就是把程序和依赖打好包分发到每个执行机上咯。更具体的去看一看官网教程咯:http://hadoop.apache.org/docs/r0.19.1/cn/mapred_tutorial.html
解决方案四:
1.移动计算数据在hadoop是必须的,这样是为什么hadoop适合离线计算的重要原因之一(磁盘IO开销比较大)因为在shuffle后不一定计算的数据就在计算的节点上2.对于计算逻辑其实具体就是jar和相关的config,不要忘了还有个hdfs和分布式缓存(hadoop)内部的。其实计算逻辑是会被放到hdfs上的,计算节点直接拉取后执行。不知道这样有没有回答到你的问题