Map Reduce
MapReduce
客户端程序提交job之后,就会退出,那么如何判断mr程序有没有执行成功呢?
1、到yarn的网页上看 8088端口;
2、可以让客户端程序不退出,等待mr程序运行完成以后,再退出
具体实现,将客户端程序中 job.submit() 换成 job.waitForCompletion(true) //阻塞方法
此方法,必须有return才会停止,客户端程序才会退出,
在此之间客户端程序会在客户端的机器上启动一个服务监听一个端口
然后与mrAppMaster进行通信,实时得到mr执行进度
所以,此时也可以得到一个返回值,如果是true,证明mr程序运行成功,如果是false则执行失败
boolean res = job.waitForCompletion(true);
system.exit(res ? 0:1)
MR 程序的两种运行模式
分布式运行模式:必须在yarn平台上
核心特点:
整个运行流程由MRAppMaster控制;
每一个task(maptask,reducetask)以及MRAppMaster,都是以独立的进程在nodemanager所提供的容器中执行;
本地运行模式:在本地以单进程多线程方式运行
核心特点:整个运行流程由LocalJobRunner控制,每一个task(maptask,reducetask )都以线程的方式执行
决定mr程序运行模式的关键:
jobclient端的参数:mapreduce.framework.name = local?yarn?
也可以在jobclient所运行的机器的Hadoop配置文件(mapred-site.xml)中配置
注意:如果以分布式模式运行MR,则你所访问的文件系统一定是HDFS
如果是本地文件系统运行MR,则既可以是HDFS,也可以是本地的文件系统