分享

Ubuntu14.04安装配置Hadoop2.6.0(完全分布式)与 wordcount实例运行


问题导读
1、hadoop怎么去创建目录?
2、怎么想hdfs写入内容?
3、怎么在hdfs里面创建目录?
4、在hdfs上面文件怎么拷贝?
5、hdfs里面文件怎么查看?
6、在hdfs上面怎么去执行wordcount程序?
7、怎么去查看wordcount的执行结果?








实例运行(运行wordcount程序)

1.创建 input目录   
  在Hadoop-2.6.0目录下创建input目录命令如下:mkdir input
15011909481626.png

2.在input创建f1、f2并写内容
命令如下:
cat input/f1 Hello world  bye jj
cat input/f2 Hello world  bye jj
或者手动创建文本文件,并在里面放下英文文章

150119094959341.png

3.在hdfs创建/porrylee/input目录
命令如下:
bin/hadoop fs  -mkdir /porrylee
bin/hadoop fs  -mkdir /porrylee/input

4.将f1、f2文件copy到hdfs /porrylee/input目录
命令如下:
bin/hadoop fs  -put input/ /porrylee

5.查看hdfs上是否有f1、f2文件
命令如下:
bin/hadoop fs -ls /porrylee/input/

150119094959342.png

6、执行wordcount程序
命令如下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /porrylee/input/ /output/wordcount3
执行完毕后如下,

150119094959343.png

7.查看执行结果
命令如下:
hadoop@master:~/hadoop-2.6.0$ bin/hdfs dfs -cat /output/wordcount3/*
执行后,可以看到统计结果

150119094959344.png
7.附录(核心代码)
  1. package com.felix;
  2. import java.io.IOException;
  3. import java.util.Iterator;
  4. import java.util.StringTokenizer;
  5. import org.apache.hadoop.fs.Path;
  6. import org.apache.hadoop.io.IntWritable;
  7. import org.apache.hadoop.io.LongWritable;
  8. import org.apache.hadoop.io.Text;
  9. import org.apache.hadoop.mapred.FileInputFormat;
  10. import org.apache.hadoop.mapred.FileOutputFormat;
  11. import org.apache.hadoop.mapred.JobClient;
  12. import org.apache.hadoop.mapred.JobConf;
  13. import org.apache.hadoop.mapred.MapReduceBase;
  14. import org.apache.hadoop.mapred.Mapper;
  15. import org.apache.hadoop.mapred.OutputCollector;
  16. import org.apache.hadoop.mapred.Reducer;
  17. import org.apache.hadoop.mapred.Reporter;
  18. import org.apache.hadoop.mapred.TextInputFormat;
  19. import org.apache.hadoop.mapred.TextOutputFormat;
  20. /**
  21. *
  22. * 描述:WordCount explains by Felix
  23. * @author Hadoop Dev Group
  24. */
  25. public class WordCount
  26. {
  27.     /**
  28.     * MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)
  29.     * Mapper接口:
  30.     * WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。
  31.     * Reporter 则可用于报告整个应用的运行进度,本例中未使用。
  32.     *
  33.     */
  34.     public static class Map extends MapReduceBase implements
  35.             Mapper<LongWritable, Text, Text, IntWritable>
  36.     {
  37.         /**
  38.         * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,
  39.         * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。
  40.         */
  41.         private final static IntWritable one = new IntWritable(1);
  42.         private Text word = new Text();
  43.         
  44.         /**
  45.         * Mapper接口中的map方法:
  46.         * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
  47.         * 映射一个单个的输入k/v对到一个中间的k/v对
  48.         * 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。
  49.         * OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。
  50.         * OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output
  51.         */
  52.         public void map(LongWritable key, Text value,
  53.                 OutputCollector<Text, IntWritable> output, Reporter reporter)
  54.                 throws IOException
  55.         {
  56.             String line = value.toString();
  57.             StringTokenizer tokenizer = new StringTokenizer(line);
  58.             while (tokenizer.hasMoreTokens())
  59.             {
  60.                 word.set(tokenizer.nextToken());
  61.                 output.collect(word, one);
  62.             }
  63.         }
  64.     }
  65.     public static class Reduce extends MapReduceBase implements
  66.             Reducer<Text, IntWritable, Text, IntWritable>
  67.     {
  68.         public void reduce(Text key, Iterator<IntWritable> values,
  69.                 OutputCollector<Text, IntWritable> output, Reporter reporter)
  70.                 throws IOException
  71.         {
  72.             int sum = 0;
  73.             while (values.hasNext())
  74.             {
  75.                 sum += values.next().get();
  76.             }
  77.             output.collect(key, new IntWritable(sum));
  78.         }
  79.     }
  80.     public static void main(String[] args) throws Exception
  81.     {
  82.         /**
  83.         * JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作
  84.         * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等
  85.         */
  86.         JobConf conf = new JobConf(WordCount.class);
  87.         conf.setJobName("wordcount");          //设置一个用户定义的job名称
  88.         conf.setOutputKeyClass(Text.class);    //为job的输出数据设置Key类
  89.         conf.setOutputValueClass(IntWritable.class);  //为job输出设置value类
  90.         conf.setMapperClass(Map.class);        //为job设置Mapper类
  91.         conf.setCombinerClass(Reduce.class);      //为job设置Combiner类
  92.         conf.setReducerClass(Reduce.class);        //为job设置Reduce类
  93.         conf.setInputFormat(TextInputFormat.class);    //为map-reduce任务设置InputFormat实现类
  94.         conf.setOutputFormat(TextOutputFormat.class);  //为map-reduce任务设置OutputFormat实现类
  95.         /**
  96.         * InputFormat描述map-reduce中对job的输入定义
  97.         * setInputPaths():为map-reduce job设置路径数组作为输入列表
  98.         * setInputPath():为map-reduce job设置路径数组作为输出列表
  99.         */
  100.         FileInputFormat.setInputPaths(conf, new Path(args[0]));
  101.         FileOutputFormat.setOutputPath(conf, new Path(args[1]));
  102.         JobClient.runJob(conf);        //运行一个job
  103.     }
  104. }
复制代码



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条