18.2.3 Hadoop Eclipse的使用举例
首先打开Hadoop视图(图略),然后右键点击Project Explorer空白处选择New→Project。在创建工程向导中选择创建Map/Reduce工程,然后输入工程名,点击finish,此时Project Explore中会出现新创建的工程。接下来就是编写具体的MapReduce代码了,有两种做法。一种是右键点击新建工程然后新建一个class,并输入自己完整的MapReduce的代码以新建class代码区。注意,代码中的类名要和创建类时输入的类名相同,代码编写完之后直接选择Run on Hadoop即可。另外一种方法是分别建立MapReduce Driver、Mapper、Reducer,再在Hadoop上运行MapReduce Driver。下面详细介绍这两种方法。
1.方法一
方法一是在MapReduce工程下创建符合MapReduce程序框架的普通class文件,然后在Hadoop运行。这种办法直接明了,灵活性比较高。具体步骤如下:
首先在刚才新创建的Hadoop工程上右键点击依次选择New→class,然后点击Next,输入类名TestMapReduce之后点击finish。然后在class文件中输入自己的MapReduce框架函数(本书第6章的程序都可以)。
然后选中TestMapReduce之后选择Run on Hadoop。在输出窗口就可以看到程序在Hadoop上执行的实时信息。
需要注意的是,如果选择Run as Java Application,程序会在类似于单机模式的Hadoop上运行,这时程序的输入和输出都是本地的目录,而不是HDFS上的目录。
2.方法二
方法二是在创建三个MapReduce框架的类时,会自动添加上继承的类和实现的接口以及接口中需要覆盖的函数,这样大家只需要修改类中的函数即可,非常方便。具体步骤如下:
首先在刚才新创建的Hadoop工程上右键点击依次选择New→Other→Map/Reduce→Mapper,然后点击Next,输入类名TestMapper之后点击finish。在自动生成的Map函数中输入自己的处理函数。需要注意的是,Mapper抽象类中Map方法的参数类型和自动生成的不匹配,只需要按照提示修改自动生成Map函数的参数类型就可以了。
接下来在刚才新创建的Hadoop工程上右键点击依次选择New→Other→Map/Reduce→Reducer,然后点击Next,输入类名TestReducer之后点击finish。在自动生成的Reduce函数中输入自己的处理函数。同样需要按照提示修改自动生成Map函数的参数类型,使其和Reducer抽象类中Reduce方法的类型匹配。
最后在刚才新创建的Hadoop工程上右键点击依次选择New→Other→Map/Reduce→MapReduceDriver,然后点击Next,输入类名TestDriver之后点击finish。如果生成的代码中有下面两行内容:
conf.setInputPath(new Path("src"));
conf.setOutputPath(new Path("out"));
这两个内容是配置MapReduce Job在集群上的输入和输出路径,使用的API和Hadoop中的API不匹配。因此需要将这两段代码改成:
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path("In"));
FileOutputFormat.setOutputPath(conf, new Path("Out"));
同时还需要确认Map/Reduce工程下已经创建了输入文件夹In且没有输出文件夹Out。在自动生成的代码中还有下面的两行:
conf.setMapperClass(org.apache.hadoop.mapred.lib.IdentityMapper.class);
conf.setReducerClass(org.apache.hadoop.mapred.lib.IdentityReducer.class);
它们的作用是配置MapReduce Job中Map过程的执行类和Reduce过程的执行类,也就是前两个步骤编写的两个Class。所以将这两行修改成下面的内容:
conf.setMapperClass(TestMapper.class);
conf.setReducerClass(TestReducer.class);
最后在TestDriver类名上点击右键依次选择Run As→Run on Hadoop,并选择之前已经配置的Hadoop server,点击finish,接下来就可以看到Eclipse开始运行TestDriver了。这里需要注意的问题有两个:
1)如果任务执行失败,出错提示为Java space heap。这主要是因为Eclipse执行任务时内存不够,导致任务失败,解决的办法是选中工程并点击Run→Run Configuretions,点击出现窗口中间的Arguments选项卡,在VM arguments中写入:-Xms512m-Xmx512m,然后点击Apply,接下来就可以正常执行程序了。这句话的主要作用是配置这个工程可以使用的内存最小值与最大值都是512MB。
2)如何调试MapReduce程序。安装有Hadoop Eclipse插件的Eclipse可以调试MapReduce程序,调试的办法就是正常Java程序在Eclipse中的调试办法,即设置断点,启动Debug,按步调试。