大数据HelloWorld----WordCount

  俗话说一个程序员开始学习书法的时候拿起笔就是写 HelloWorld.没错我们学习一个新的语言或者新的知识的时候都是从基本的HelloWorld开始。大数据的HelloWorld我们可以参考

       /hadoop-3.1.3/share/hadoop/mapreduce  目录下的  hadoop-mapreduce-examples-3.1.3.jar  文件  可以在linux中使用sz  + 文件名的方式下载到windows中  解压使用反编译工具进行反编译。然后根据源码我们参考编写自己的WordCount
源码如下:

 

 

 

 

编码实操

需求:

输入数据  ,期望输出 【统计单词次数】

banzhang 1
cls 2
hadoop 1
jiao 1
ss 2
xue 1

 

步骤:

  一;环境准备

    ①加入依赖

      ②加入日志文件

  二:编码

    Map阶段:
                        1. map()方法中把传入的数据转为String类型
                        2. 根据空格切分出单词
                        3. 输出<单词,1>
            Reduce阶段:
                     1. 汇总各个key(单词)的个数,遍历value数据进行累加
                    2. 输出key的总数
             Driver
                    1. 获取配置文件对象,获取job对象实例
                    2. 指定程序jar的本地路径
                    3. 指定Mapper/Reducer类
                   4. 指定Mapper输出的kv数据类型
                   5. 指定最终输出的kv数据类型
                   6. 指定job处理的原始数据路径
                   7. 指定job输出结果路径

 

 

   依赖

         <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.9.2</version>

</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.9.2</version>
</dependency>

 

log4.j

  log4j.rootLogger=INFO, stdout
       log4j.appender.stdout=org.apache.log4j.ConsoleAppender
        log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
       log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
      log4j.appender.logfile=org.apache.log4j.FileAppender
     log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
   log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

 

 

 

Mapper类

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

Text k = new Text();
IntWritable v = new IntWritable(1);
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {


//1.获取一行
String line=value.toString();

//2.切割
String[] word = line.split(" ");


//3.输出
for (String s : word) {
k.set(s);
context.write(k,v);
}



}

 

 

 

 

Reduce类

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

int sum;
IntWritable v = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

//1.累加求和
sum=0;
for (IntWritable count : values) {
sum+=count.get();
}
//2.输出
v.set(sum);
context.write(key,v);
}
}

 

 

Driver类

public static void main(String[] args) throws Exception {
//1.获取配置信息获取job信息
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);

//2.关联本Driver程序的jar
job.setJarByClass(WordCountDriver.class);

//3.关联mapper和reduce的jar
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordContReduce.class);

//4.设置mapper 输出的kv类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

//5.设置最终的输出kv类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

//6设置输入和输出的路径
FileInputFormat.setInputPaths(job,new Path("E:\\bigData\\guigu\\input"));
FileOutputFormat.setOutputPath(job,new Path("E:\\bigData\\guigu\\output2"));

//7.提交job
boolean b = job.waitForCompletion(true);
System.exit(b?0:1);


}


}

 

成功时候可以在输出的路径中看到对应的文件

 

 打开文件即可看到我们想看到的结果。

 

    

 

posted @ 2021-10-22 22:11  徽亭小镇  阅读(224)  评论(0编辑  收藏  举报