问题导读
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
2.在input创建f1、f2并写内容
命令如下:
cat input/f1 Hello world bye jj
cat input/f2 Hello world bye jj
或者手动创建文本文件,并在里面放下英文文章
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/
6、执行wordcount程序
命令如下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /porrylee/input/ /output/wordcount3
执行完毕后如下,
7.查看执行结果
命令如下:
hadoop@master:~/hadoop-2.6.0$ bin/hdfs dfs -cat /output/wordcount3/*
执行后,可以看到统计结果
7.附录(核心代码)
- package com.felix;
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.StringTokenizer;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.IntWritable;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapred.FileInputFormat;
- import org.apache.hadoop.mapred.FileOutputFormat;
- import org.apache.hadoop.mapred.JobClient;
- import org.apache.hadoop.mapred.JobConf;
- import org.apache.hadoop.mapred.MapReduceBase;
- import org.apache.hadoop.mapred.Mapper;
- import org.apache.hadoop.mapred.OutputCollector;
- import org.apache.hadoop.mapred.Reducer;
- import org.apache.hadoop.mapred.Reporter;
- import org.apache.hadoop.mapred.TextInputFormat;
- import org.apache.hadoop.mapred.TextOutputFormat;
- /**
- *
- * 描述:WordCount explains by Felix
- * @author Hadoop Dev Group
- */
- public class WordCount
- {
- /**
- * MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)
- * Mapper接口:
- * WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。
- * Reporter 则可用于报告整个应用的运行进度,本例中未使用。
- *
- */
- public static class Map extends MapReduceBase implements
- Mapper<LongWritable, Text, Text, IntWritable>
- {
- /**
- * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,
- * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。
- */
- private final static IntWritable one = new IntWritable(1);
- private Text word = new Text();
-
- /**
- * Mapper接口中的map方法:
- * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
- * 映射一个单个的输入k/v对到一个中间的k/v对
- * 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。
- * OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。
- * OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output
- */
- public void map(LongWritable key, Text value,
- OutputCollector<Text, IntWritable> output, Reporter reporter)
- throws IOException
- {
- String line = value.toString();
- StringTokenizer tokenizer = new StringTokenizer(line);
- while (tokenizer.hasMoreTokens())
- {
- word.set(tokenizer.nextToken());
- output.collect(word, one);
- }
- }
- }
- public static class Reduce extends MapReduceBase implements
- Reducer<Text, IntWritable, Text, IntWritable>
- {
- public void reduce(Text key, Iterator<IntWritable> values,
- OutputCollector<Text, IntWritable> output, Reporter reporter)
- throws IOException
- {
- int sum = 0;
- while (values.hasNext())
- {
- sum += values.next().get();
- }
- output.collect(key, new IntWritable(sum));
- }
- }
- public static void main(String[] args) throws Exception
- {
- /**
- * JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作
- * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等
- */
- JobConf conf = new JobConf(WordCount.class);
- conf.setJobName("wordcount"); //设置一个用户定义的job名称
- conf.setOutputKeyClass(Text.class); //为job的输出数据设置Key类
- conf.setOutputValueClass(IntWritable.class); //为job输出设置value类
- conf.setMapperClass(Map.class); //为job设置Mapper类
- conf.setCombinerClass(Reduce.class); //为job设置Combiner类
- conf.setReducerClass(Reduce.class); //为job设置Reduce类
- conf.setInputFormat(TextInputFormat.class); //为map-reduce任务设置InputFormat实现类
- conf.setOutputFormat(TextOutputFormat.class); //为map-reduce任务设置OutputFormat实现类
- /**
- * InputFormat描述map-reduce中对job的输入定义
- * setInputPaths():为map-reduce job设置路径数组作为输入列表
- * setInputPath():为map-reduce job设置路径数组作为输出列表
- */
- FileInputFormat.setInputPaths(conf, new Path(args[0]));
- FileOutputFormat.setOutputPath(conf, new Path(args[1]));
- JobClient.runJob(conf); //运行一个job
- }
- }
复制代码
|