美文网首页
15.在eclipse下使用hadoop进行数据处理的小demo

15.在eclipse下使用hadoop进行数据处理的小demo

作者: 文茶君 | 来源:发表于2019-12-04 20:20 被阅读0次

    对于大数据这方面的文章。我确实没怎么用心写,我就是把当成我的笔记了,方便我哪里忘了及时复习,前面比较忙,所以直接贴图,只有我自己看得懂。我觉得一是方便自己也方便他人,二是在学校实验室,有闲暇时间就来写文章吧

    在上面14节中,配置环境已经搭好了

    本次写的在我12节里12hadoop使用eclipse编程所需要的环境配置 - 简书的基础上进行,首先拷贝配置文件

    拷贝

    最后文件情况如上图所示

    然后开启hadoop

    3

    开启rm,node08和node09

    4 5

    编写单词统计代码

    对于以上程序,我们需要注意setMapperClass()

    和setReduceClass()

    由于没有这两个类,所以我们应该创建

    在创建的时候,我们应该了解他的原理,这样我们就能更好地理解了

    重点介绍map

    MapReduce计划分三个阶段执行,即映射阶段,shuffle阶段,合并减少阶段。

    涉及到的角色:

    1、客户端(client):编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;

    2、JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行;

    3、TaskTracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个(JobTracker只能有一个就和hdfs里namenode一样存在单点故障,我会在后面的mapreduce的相关问题里讲到这个问题的)

    4、Hdfs:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面

    map阶段:映射或映射器的工作是处理输入数据。一般输入数据以存储在HDFS的文件或目录的形式,输入文件被传递到映射器功能线路,映射器处理该数据,并创建数据的若干小块。

    reduce阶段:这个阶段是Shuffle阶段和Reduce阶段的组合。减速器的工作是处理该来自映射器中的数据。处理之后,它产生一组新的输出,这将被存储在HDFS。

    Mapper任务的执行过程详解

    每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们覆盖的map方法处理后,转换为很多的键值对再输出。整个Mapper任务的处理过程又可以分为以下几个阶段,如图所示。

    在上图中,把Mapper任务的运行过程分为六个阶段。

    1.第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。如果数据块(Block)的大小是默认值64MB,输入文件有两个,一个是32MB,一个是72MB。那么小的文件是一个输入片,大文件会分为两个数据块,那么是两个输入片。一共产生三个输入片。每一个输入片由一个Mapper进程处理。这里的三个输入片,会有三个Mapper进程处理。

    2.第二阶段是对输入片中的记录按照一定的规则解析成键值对。有个默认规则是把每一行文本内容解析成键值对。“键”是每一行的起始位置(单位是字节),“值”是本行的文本内容。

    3.第三阶段是调用Mapper类中的map方法。第二阶段中解析出来的每一个键值对,调用一次map方法。如果有1000个键值对,就会调用1000次map方法。每一次调用map方法会输出零个或者多个键值对。

    4.第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。比较是基于键进行的。比如我们的键表示省份(如北京、上海、山东等),那么就可以按照不同省份进行分区,同一个省份的键值对划分到一个区中。默认是只有一个区分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。

    5.第五阶段是对每个分区中的键值对进行排序。首先,按照键进行排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果是<1,3>、<2,1>、<2,2>。如果有第六阶段,那么进入第六阶段;如果没有,直接输出到本地的linux文件中。

    6.第六阶段是对数据进行归约处理,也就是reduce处理。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少。归约后的数据输出到本地的linxu文件中。本阶段默认是没有的,需要用户自己增加这一阶段的代码

    摘自Hadoop MapReduce执行过程详解(带hadoop例子),reduce任务在文章中,就不赘述了

    摘抄那么多文字的目的就是为了引出下面的程序

    在这里主要分析extend的Mapper<>里的四个参数。四个参数分别为KEYIN,VALUEIN,KEYOUT,VALUEOUT

    object(KEYIN)传进来的数据的索引,对应的是,在这就是int

    第二阶段是对输入片中的记录按照一定的规则解析成键值对。有个默认规则是把每一行文本内容解析成键值对。“键”是每一行的起始位置(单位是字节),“值”是本行的文本内容。

      Text(VALUEIN)进来的数据 就是“值”

    Text(KEYOUT)输出的key,是字符串。

    第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。比较是基于键进行的。比如我们的键表示省份(如北京、上海、山东等),那么就可以按照不同省份进行分区,同一个省份的键值对划分到一个区中。默认是只有一个区分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。

    IntWritable(VALUEOUT) 此时输出的值是value int类型,但是要包装,用hadoop里提供的IntWritable进行包装

    对于reduce也是同样

    接受map传入的值进行处理,所以in是text,IntWritable。处理后out输出也是text,IntWritable。就是输出到文件的类型

    这里的reduce方法进行迭代计算,对value值进行加减。

        这里返回的是int

    注意这里是values,而只是key,因为这是传入的都是处理过后的。key值是相等的

    这里还应该抛出异常

    10

    因为你传过去是序列化,hadoop自动帮你序列化了,但是反序列化必须要知道对象类型。所以有了

    setMapOutKeyClass()

    setMapOutValueClass()

    将程序打包

    打包界面 利用ftp传输

    hadoop jar wc.jar com.sxt.mr.wc.MyWc

    在Linux上运行jar包

    执行 可视化界面(eclipse)

    下面看一下源码

    mapper类:输入KV通过map进行中间级的映射

    map方法,通过调用run来运行

    run方法通过nextkeyvalue来一行一行读取

    setup()建立关系

    cleanup()清理

    这是reduce的run方法

    相关文章

      网友评论

          本文标题:15.在eclipse下使用hadoop进行数据处理的小demo

          本文链接:https://www.haomeiwen.com/subject/auslgctx.html