• Hadoop集群WordCount详解


    Hadoop集群WordCount详解

    • MapReduce理论介绍
    • MapReduce处理过程
    • MapReduce代码

    1.MapReduce 理论介绍

    1.1 MapReduce编程模型

    MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是”任务的分解与结果的汇总”。

    在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。

    在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。

    需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

    1.2 MapReduce处理过程

    在Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job又可以分为两种阶段:map阶段和reduce阶段。这两个阶段分别用两个函数表示,即map函数和reduce函数。map函数接收一个

    public static void main(String[] args) throws Exception {
      Configuration conf = new Configuration();
      String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
      if (otherArgs.length != 2) {
        System.err.println("Usage: wordcount  ");
        System.exit(2);
      }
      Job job = new Job(conf, "word count");
      job.setJarByClass(WordCount.class);
      job.setMapperClass(TokenizerMapper.class);
      job.setCombinerClass(IntSumReducer.class);
      job.setReducerClass(IntSumReducer.class);
      job.setOutputKeyClass(Text.class);
      job.setOutputValueClass(IntWritable.class);
      FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
      FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
      System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在MR程序中,首先创建一个Job,并进行配置,然后通过调用Job的waitForCompletion方法将Job提交到MapReduce集群。这个过程中,Job存在两种状态:Job.JobState.DEFINE和Job.JobState.RUNNING,创建一个Job后,该Job的状态为Job.JobState.DEFINE,Job内部通过JobClient基于org.apache.hadoop.mapred.JobSubmissionProtocol协议提交给JobTracker,然后该Job的状态变为Job.JobState.RUNNING。

    运行WorkCount

    1.准备工作

    • 1)创建本地示例文件

      首先在”/home/hadoop”目录下创建文件夹”file”。
        
      这里写图片描述

      接着创建两个文本文件file1.txt和file2.txt,使file1.txt 内容为”Hello World”,而file2.txt的内容为”Hello Hadoop”。

      这里写图片描述

    • 2)在HDFS上创建输入文件夹

    这里写图片描述

    • 3)上传本地file中文件到集群的input目录下

    这里写图片描述

    2 运行例子

    • 1)在集群上运行WordCount程序

      备注:以input作为输入目录,output目录作为输出目录。

      已经编译好的WordCount的Jar在”/usr/hadoop”下面,就是”hadoop-examples-1.0.0.jar”,所以在下面执行命令时记得把路径写全了,不然会提示找不到该Jar包。
        这里写图片描述

    3 查看结果

    • 1)查看HDFS上output目录内容

    这里写图片描述

    • 2)查看结果输出文件内容

    这里写图片描述

    3WordCount源码分析

    Hadoop提供了如下内容的数据类型,这些数据类型都实现了WritableComparable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储,以及进行大小比较。

    BooleanWritable:标准布尔型数值
    
    ByteWritable:单字节数值
    
    DoubleWritable:双字节数
    
    FloatWritable:浮点数
    
    IntWritable:整型数
    
    LongWritable:长整型数
    
    Text:使用UTF8格式存储的文本
    
    NullWritable:当中的key或value为空时使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

  • 相关阅读:
    MySQL原理和优化
    使用 Hugging Face Transformer 微调 BERT
    使用CSS实现图片的磨砂玻璃效果
    一文学会如何使用适配器模式
    [附源码]计算机毕业设计springboot医学图像管理平台
    RabbitMQ(七)【SpringBoot案例】
    数据库相关概念复习--个人复习使用
    Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布
    2.5 计算机网络
    Android Jetpack Compose之UI的重组和自动刷新
  • 原文地址:https://blog.csdn.net/m0_67402125/article/details/126717489