问题
最近学习Hadoop过程中遇到这样一个问题:本地开发mapreduce程序,如果mapreduce到输入和输出都是设置本地,那么是可以进行本地Debug的。但是在我把输入源设成服务器的HDFS,输出设为HBase时,发现应用启动就报某个mapper或Outputformat类找不到;经过几天摸索,终于找到解决办法;
解决方法
项目配置文件mapred-site.xml增加配置:
<property>
<name>mapreduce.framework.name</name>
<value>local</value>
</property>
配置解读:
一,本地模式(LocalJobRunner实现)
mapreduce.framework.name设置为local,则不会使用YARN集群来分配资源,在本地节点执行。在本地模式运行的任务,无法发挥集群的优势。注:在web UI是查看不到本地模式运行的任务。
二,Yarn模式(YARNRunner实现)
mapreduce.framework.name设置为yarn,当客户端配置mapreduce.framework.name为yarn时, 客户端会使用YARNRunner与服务端通信, 而YARNRunner真正的实现是通过ClientRMProtocol与RM交互, 包括提交Application, 查询状态等功能。