Hadoop1.1.2开发笔记(一)

本文参考hadoop权威指南,开发一个单词统计的程序,首先需要下载hadoop相应版本的依赖文件,本人是采用的maven项目管理,在pom.xml文件加入依赖

<dependency>

          <groupId>org.apache.hadoop</groupId>

          <artifactId>hadoop-core</artifactId>

          <version>1.1.2</version>

          <type>jar</type>

          <scope>compile</scope>

      </dependency>

编写map类,用于分解任务

public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {

    

    private final static IntWritable one = new IntWritable(1);



    private Text word = new Text();



    public void map(Object key, Text value, Context context



                    ) throws IOException, InterruptedException {



      StringTokenizer itr = new StringTokenizer(value.toString());



      while (itr.hasMoreTokens()) {



        word.set(itr.nextToken());



        context.write(word, one);



      }

    }

}

编写Reduce类,用于规约

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,  

            Context context) throws IOException, InterruptedException {  

        int sum = 0;  

        for (IntWritable val : values) {  

            sum += val.get();  

        }  

        result.set(sum);  

        context.write(key, result);  

    }  



}

编写WordCount类,定义作业

public class WordCount {

    public static void main(String[] args) throws Exception {



        Configuration conf = new Configuration();



        /** 创建一个job,起个名字以便跟踪查看任务执行情况 **/

        Job job = new Job(conf, "word count");



        /**

         * 当在hadoop集群上运行作业时,需要把代码打包成一个jar文件(hadoop会在集群分发这个文件),

         * 通过job的setJarByClass设置一个类,hadoop根据这个类找到所在的jar文件

         **/



        job.setJarByClass(WordCount.class);



        /** 设置要使用的map、combiner、reduce类型 **/



        job.setMapperClass(WordCountMapper.class);



        job.setCombinerClass(WordCountReducer.class);



        job.setReducerClass(WordCountReducer.class);



        /**

         * 设置map和reduce函数的输入类型,这里没有代码是因为我们使用默认的TextInputFormat,针对文本文件,按行将文本文件切割成

         * InputSplits, 并用 LineRecordReader 将 InputSplit 解析成 <key,value&gt:

         * 对,key 是行在文件中的位置,value 是文件中的一行

         **/



        /** 设置map和reduce函数的输出键和输出值类型 **/



        job.setOutputKeyClass(Text.class);



        job.setOutputValueClass(IntWritable.class);



        /** 设置输入和输出路径 **/



        FileInputFormat.addInputPath(job, new Path("D:\\JAVA\\workspacejee\\hadoop\\path1"));



        FileOutputFormat.setOutputPath(job, new Path("D:\\JAVA\\workspacejee\\hadoop\\path2"));



        /** 提交作业并等待它完成 **/



        System.exit(job.waitForCompletion(true) ? 0 : 1);



    }



}

在输入路径存放我们需要统计词语的文件,运行上面的WordCount类,即可在输出路径看到运行的结果

本人是在win2003系统运行,会遇到相关目录权限检测错误,需要改写org.apache.hadoop.fs包里面的FileUtil类,将方法checkReturnValue里面的代码注释掉即可

---------------------------------------------------------------------------

本系列Hadoop1.1.2开发笔记系本人原创

转载请注明出处 博客园 刺猬的温驯

本文链接 http://www.cnblogs.com/chenying99/archive/2013/05/09/3068233.html

你可能感兴趣的:(hadoop)