写在前面:研究所里搭建了一套CDH5.9版本的hadoop集群,以前一直使用命令行去操作,这几天尝试Hue中使用Oozie的Workflows去执行MR程序,发现踩了好多坑(以前没使用过,也没找到相应的教程,如果有知道的好的教程不妨留下不甚感激)。
坑1:标准的MR程序在linux命令行执行的时候能够正常输出正确的结果,但是使用Workflows去执行的时候就会按照原文件的行数据输出。
坑2:MR程序的编写
坑3:无论用命令行还是Workflows执行MR程序,结果发现输出多文件,而且很多文件都是空文件。
1.新建一个workflow
新建一个workflow,这里取名为My test,还可以进行相关的描述,右上角的Workspace可以查看该workflow的工作目录,打开的时候里面是空的,只有当你提交了workflow后再工作目录下面就会生成相对应的workflow.xml还有lib目录(里面存放依赖的jar包)以及job.properties
2.编辑这个workflow
从上面的ACTIONS中拖一个Mapreduce action到Drop your action here地方去,然后就会转到mapreduce的编辑界面。
这里面,Jar name需要你选择相对应的你写好的wordcount程序打成的jar包,而且这个jar包必须上传到HDFS目录下,这里面我存放在/user/xudong目录下。
然后点击PROPERTIES+添加相对应的属性(一般指的是你在编写mr程序时main方法里面设置的一系列属性参数)。
这里需要注意的地方是:
a.如果在linux命令行下执行mr程序,需要你自己在程序里面写main方法然后设置job一系列的属性(指定job的map和reduce类,输出输入等);但是hue中使用Oozie的workflow执行mr的时候,不需要写main方法,也就是说只需要编写map类和reduce类(或者part