1.map:局部处理;reduce:汇总
mapper对数据做切分,一份程序在不同的DataNode上独立运行对数据进行处理,reduce程序将所有DataNode上的统计数据进行汇总
Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>,以key-value的形式对数据进行输入输出
前两个指定mapper输入数据的类型
后两个指定mapper输入数据的类型
map():MapReduce框架每读一行数据就调用一次该方法
reducer对数据做汇总
reduce():框架在map处理完成之后,将所有kv对缓存起来,进行分组,然后传递一个组<key, value{}>,调用一次reduce方法
2.
对所要用到的MapReduce类进行描述,即指定特定的类进行处理
还需要指定该作业要处理的数据所在的路径以及该作业输出的结果放到哪个路径
指定reduce的输出数据kv类型
job.setOutputKeyClass(Text.class)
job.setOutputValueClass(LongWritable.class)
指定mapper的输出数据kv类型
job.setMapOutputKeyClass(Text.class)
job.setMapOutputValue(LongWritable.class)
指定原始输入数据存放位置
FileInputFormat.setInputPaths(job,new Path(dirname));//读取目录下所有的文件进行处理
指定计算结果的输出位置
FileOutputFormat.setOutputPath(job,newPath(dirname));
指定整个job所用的那些类在哪个jar包
job.setJarByClass(WCRunner.class)
将job提交至集群运行
job.waitForCompletion(true);
3.YARN框架——主要进行资源调度(不懂mapreduce相关逻辑,只负责资源的调度和分配)
1)Run jar ------>向resource manager申请执行一个job
2)然后返回job相关资源提交的路径staging-dir(HDFS中的/tmp/xx/xx/yarn-staging/jobID/)和为本job产生的jobID给Runjar
3)然后提交资源到hdfs中
4)汇报提交结果(提交完成)
5)resource manager将本job加入任务队列(并分配相关的node manager 运行job)
6)node manager领取任务(通过心跳机制和resource manager进行通信,从任务队列中领取任务)
7)node manager中为各个job分配运行资源和容器(container)
-------------------------------------------------------------------------------------------------分配资源完毕
8)resource manager 启动MRAppMaster(动态随机产生)类进行MapReduce程序的分配和调度(和yarn框架没有关系),yarn框架的工作到此结束
9)MRAppMaster向Resource Manager注册资源
10)MRAppMaster在资源容器中启动map任务进程(yarnChild子进程)
11)MRAppMaster启动reduce task(yarnChild子进程)
12)job完成后,MRAppMaster向resource manager注销自己
Yarn具有较强的通用性,只负责资源的分发,与具体的计算模型没有较强的依赖性,可以跑各种不同的运行模型框架(Storm,Spark),只需启动不同计算模型的AppMaster类便可实现不同的计算模型框架
Runjar通过RPC进行通信
4.mapreduce框架通过MRAppMaster来控制mapreduce程序的执行,由yarn框架执行
resource manager
node manager1 node manager2 node manager3
5.mr程序的几种提交运行模式
本地模式
1)在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localobrunner执行
--输入输出数据放在本地路径下(c:/wc/srcdata)
--输入输出数据放在hdfs中(hdfs://localhost)
2)在linux的eclipse里面直接运行main方法,但是不要添加yarn相关配置,也会提交给local执行
集群模式
1)将工程打成jar包,用hadoop jar命令提交运行
2)在linux的eclipse中直接运行main方法,也可以提交到集群中去运行,但是,必须采取一下措施
在工程的src目录下,加入mapred-site.xml和yarn-site.xml
将工程打成jar包,同时在main方法中添加一个conf的配置 参数 conf.set("","")
3)在windows下的eclipse运行