MR任务和普通的JAVA进程不太一样的地方是:它们是将jar包等搬到YARN上(MR的资源调度平台)去执行的。调试起来有些地方就不太懂了。
最近自己摸索了下,用于解决如下两个场景,将其跑通:
1.在提交MR任务后,跟踪MR任务逻辑处理;
2.在整个调试过程中,同时印证MR的工作原理;
还未搞明白的问题:
1.业务逻辑代码对应的jar包,经过MR的接口处理后,会放在HDFS上;但其第三方依赖jar包又是放在哪里,在业务程序运行过程中,没跟踪到;
2.配置文件应是在读取到内存后,以序列化传递给MR;(猜测)
3.各类日志(container维度,task 维度),放在HDFS上吗?(猜测)
基本原理:
1.MR收到客户端提交的任务后,跟YARN打交道,将本次的任务提交给YARN;
2.YARN会先选择一个节点,拉起AM进程(也是跑在某个container中),来管理MR所提交的这个MR任务;
3.这个AM会根据MR所提交的MR任务逻辑,分配细化任务,向YARN申请资源;一般先申请Map阶段资源,等Map跑完,又继续申请Reduce资源;
4.Yarn分配资源,NodeManage实施资源分配(分配container),整个串起来是由AM编号,AM下的各个container也有编号;
5.而整个计算逻辑执行由MR框架监控执行。每个MR任务会被细分为task(可以有多个map task和多个reduce task),每个task一般都是分配一个container来执行;