ITPub博客

首页 > 大数据 > Hadoop > 在伪分布模式下运行wordcount

在伪分布模式下运行wordcount

Hadoop 作者:graritti 时间:2013-12-24 17:36:07 0 删除 编辑
这篇文章的前提是你先安装了VM虚拟机,安装ubuntu,并在Ubuntu上搭建好了Hadoop伪分布环境。

1.网上搜索WordCount.java程序
我这里用的是xceman1997的代码

package hadoopWordCount;  

  

import java.io.IOException;  

import java.util.*;  

  

import org.apache.hadoop.fs.Path;  

import org.apache.hadoop.conf.*;  

import org.apache.hadoop.io.*;  

import org.apache.hadoop.mapreduce.*;  

import org.apache.hadoop.mapreduce.lib.input.*;  

import org.apache.hadoop.mapreduce.lib.output.*;  

import org.apache.hadoop.util.*;  

  

public class hadoopWordCount extends Configured implements Tool  

 

    public static class MapWordCount extends Mapper  

     

        public void map (LongWritable key, Text value, Context context) throws IOException, InterruptedException  

         

            String line value.toString();  

            StringTokenizer tokenizer new StringTokenizer (line);  

            while (tokenizer.hasMoreTokens())  

             

                context.write (new Text(tokenizer.nextToken()), new IntWritable(1));  

             

         

     

  

    public static class ReduceWordCount extends Reducer  

     

        public void reduce (Text key, Iterable values, Context context) throws IOException, InterruptedException  

         

            int sum 0;  

            for (IntWritable val: values)  

                sum += val.get();  

  

            context.write (key, new IntWritable(sum));  

         

     

  

    public int run (String [] args) throws Exception  

     

        Job job new Job (getConf());  

        job.setJarByClass (hadoopWordCount.class);  

        job.setJobName ("hadoop word count");  

  

        job.setOutputKeyClass (Text.class);  

        job.setOutputValueClass (IntWritable.class);  

        job.setMapperClass (MapWordCount.class);  

  

        job.setReducerClass (ReduceWordCount.class);  

        job.setInputFormatClass (TextInputFormat.class);  

        job.setOutputFormatClass (TextOutputFormat.class);  

  

        FileInputFormat.setInputPaths (job, new Path(args[1]));  

        FileOutputFormat.setOutputPath (job, new Path(args[2]));  

  

        boolean success job.waitForCompletion (true);  

  

        return success 0:1;  

     

  

  

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

     

        System.out.println ("hello world for hadoop word count!");  

  

        ToolRunner.run (new hadoopWordCount(),args);  

     

}  


2.javac编译

我把该WordCount.java放在/home/taohang/hadoopWordCount/src/hadoopWordCount.java

hadoopWordCount

           |

           bin和src两个文件夹

                            

javac -classpath /home/taohang/Hadoop/hadoop-core-1.2.1.jar   -d  /home/taohang/hadoopWordCount/bin           /home/taohang/hadoopWordCount/src/hadoopWordCount.java


javac 中的-classpath参数指明这些类库的位置,这些类库都打包在hadoop-core-1.2.1.jar

/home/taohang/hadoopWordCount/bin 是编译后的文件放置的目录

/home/taohang/hadoopWordCount/src/hadoopWordCount.java是源文件所在的目录

 

3.打包成.jar

接下来,用jar命令打jar包。首先写MANIFEST.MF文件,主要作用在于指定jar包中main函数所在的类;如果有多个main函数,则指定运行jar包的时候,具体进入哪个main函数。把MANIFEST.MF放到src文件夹中,MANIFEST.MF文件内容如下:

Manifest-Version: 1.0  

Created-By: 1.6.0 (Sun Microsystems Inc.)  

Main-Class: hadoopWordCount.hadoopWordCount  


接下来,cdbin目录下——这个很重要,在别的目录下运行jar命令,虽然也能顺利打出jar包,但是当用java命令或者hadoop jar命令来运行的时候,总是找不到入口类(main函数)——然后运行jar命令打包,如下:

 

jar -cvfm helloWordCount.jar /home/taohang/hadoopWordCount/src/MANIFEST.MF 


4.准备输入的数据文件

 

首先建立一个input路径,用命令

bin/hadoop fs -mkdir input

检查是否创建成功,用命令

bin/hadoop fs -ls


hadoopWordCount下新建一个文件夹data,放入try.txt,try.txt的内容是hello hello hello world。接下来,将这个文件放到hdfs./input目录中,用命令

bin/hadoop fs -put   /home/taohang/hadoopWordCount/data/try.txt  ./input

第一个是本地路径,第二个是hadoop路径。


5.hadoop上运行hadoopWordCount程序

~/hadoop$ hadoop jar /home/taohang/hadoopWordCount/bin/helloWordCount.jar hadoopWordCount input/try.txt outputwordcount

第一个参数是jar包的本地路径;第二个参数其实由helloWordCount类的main函数决定(args[1]),是输入数据的路径,是hdfs路径;第三个参数是输出结果的路径。需要注意的是,输出结果的路径必须是不存在的。否则hadoop认为这已经有了结果,会拒绝执行任务


查看输出结果

hadoop dfs -ls outputwordcount

在terminal中会出现在伪分布模式下运行wordcount


查看程序运行结果:
hadoop dfs -cat outputwordcount/part-r-00000

结果是

hello    3
    world    1

在伪分布模式下运行wordcount

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7570695/viewspace-1119946/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论