一直想写一个关于hadoopMR和作业调度,还有存储过程(hdfs)等的详细总结,因为这一段时间巩固并且学到了很多,所以借此来写一个好一点的详细一点的,以后忘了好再看着回忆一下;
先从作业提交开始 ,首先来一个简略的,作为动作级别的;
首先你有了一个作业,比如MR,然后你作为客户端,向服务器提交作业,首先提交至ResourceManager,获取一个作业ID,如果没有,则生成,如果有的话,就抛出异常;
现在假设生成了ID,得到了ID,ResourceManager就开始保存提交的作业配置,函数等,并且通过调度器在某个节点通过NodeManager生成有一个ApplicationMaster,这玩意是占有一定资源,是一个子进程;然后AM(ApplicationMaster)来初始化多个map,reduce任务,
然后监控任务执行的程度,其中map reduce中经过shuffle,首先是map函数,然后将map的输出通过环形缓冲区,排序,分区,溢写成文件,多个溢写文件合并,reduce端fetch数据,归并,排序,执行reduce函数,结束,输出到hdfs;
详细版的:
首先你写了一个mapreduce的自定义函数;
首先你有两个类,一个实现Mapper接口的类,一个实现了Reducer接口的类,其中分别重写了map函数和reduce函数;当然这两个函数中不光有这两个函数,还有setup,cleanup等函数,setup,cleanup都是只执行一个(在一个map循环),一个reduce执行;
其实这两个函数的作用都是对数据进行处理的,MR基于key,value的,其中的value就是你所要处理的数据,而key一般是行的偏移量(看你的输入格式了,或者你要套用什么数据结构,也可以自定义);
然后这就是你主要使用的计算函数了,也是原始hadoop]中的最重要,最基础的计算部分,这就是你要提交的作业;
你要做什么作业,作为大数据处理,简化一下,无非就是获得输入流,处理,获得输出流,然后写到某个地方;这也是基础流程,而大数据,当然解决的是大量数据的处理,输入输出的问题,和一般量的数据处理,输入输出是不一样的,它