Hadoop:如何将作业发送到master和mapreduce上的节点?

时间:2016-01-10 18:29:46

标签: hadoop

我正在学习Hadoop地图减少基本原则,我无法理解很多东西。如何将作业从客户端发送到主节点和节点。

假设我们有客户端,主服务器和两个从服务器。据我所知,Mapper类在java类的客户端上。客户端连接到master以及下一步是什么?如何将Mapper类中的代码传递给master,然后传递给节点?或者我理解一切都错了?

2 个答案:

答案 0 :(得分:3)

如图所示,这是发生的事情:

  • 使用hadoop jar命令在客户端上运行作业,在该命令中传递jar文件名,类名和其他参数,例如输入和输出
  • 客户端将获得新的应用程序ID,然后它将jar文件和其他作业资源复制到具有高复制因子的HDFS(在大型集群上默认为10)
  • 然后客户端将实际通过资源管理器
  • 提交申请
  • 资源管理器跟踪集群利用率并提交应用程序主机(协调作业执行)
  • 应用程序主机将与namenode通信并确定输入块的位置,然后使用nodemanagers提交任务(以容器的形式)
  • 容器只是JVM,它们运行map和reduce任务(mapper和reducer类),当JVM被引导时,HDFS上的作业资源将被复制到JVM。对于映射器,这些JVM将在存在数据的相同节点上创建。处理开始后,将执行jar文件以在该机器上本地处理数据(典型值)。

Anatomy of map reduce job using YARN

答案 1 :(得分:0)

假设我们有一个1000个节点的集群,我们有50 gb的文件要处理,假设我们把块大小当作64mb,输入分割的数量将是50 * 1024/64,所以占用的块数将是800并假设800块将具有存储在300个数据节点中的数据,因此如果您将jar发送到集群中的所有节点,它将是无用的,因为我们只需要300个数据节点中的jar。