C/C++教程

大数据HelloWorld----WordCount

本文主要是介绍大数据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);


    }


}

 

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

 

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

 

    

 

这篇关于大数据HelloWorld----WordCount的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!