hadoop学习笔记--6.MapReduce的初识

MapReduce是一种用于处理大规模数据集的并行运算架构,简化大数据处理的编程难度。本文介绍了MapReduce的起源、作用及特点,并详细阐述了其处理过程,最后通过一个实例展示了其在流量统计中的应用。
一、MapReduce的概念


1.1 MapReduce的起源
        MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。通过对大数据计算模型的封装,使得开发者降低开发难度。基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并且以可靠性高,容错率高的方式并行处理大批数据。

1.2 MapReduce的作用
        MapReduce简单来说就是大数据处理,即接收批量数据,然后根据用户的需求返回结果集。以价值为导向,对数据进行加工,处理,挖掘和优化等。
       MapReduce的核心思想即为“先分后汇”,MapReduce分为Mapper和Reduce。Mapper主要负责“分”,将一个复杂的任务根据一定的逻辑分为若干个简单的小任务。这个逻辑包括:1:将任务分配到就近的数据节点进行计算,以减少数据传输所需的时间和带宽。2:小任务之间彼此没有联系,可以单独计算工作。
         Reduce主要对Mapper阶段的结果集按用户的需求进行汇总。,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。
网上的一张图片,这个非常的生动形象。
这里写图片描述

1.3 MapReduce的特点
        1:易于编程
        2:良好的扩展性
        3:高容错性
        4:适合PB级以上海量数据的离线处理
        5:不适合实时计算,无法在短时(毫秒级或秒级)返回结果。
        6:不适合流式计算
          (1):MapReduce的输入数据是静态的,不能支持动态改变。
          (2):MapReduce自身的设计特点决定了数据源必须是静态的

二、MapReduce的原理


2.1 MapReduce的键值对
        为了适应多样化的数据环境,MapReduce将关键字/值数据对(Key-Value Pair)作为基础数据单元。关键字和值可以是简单的基本数据类型,例如整数,浮点数,字符串等,也可以是复杂的数据结构,例如列表,数组等。
        Mapper阶段和Reduce阶段都将关键字/值作为输入输出,其中Mapper阶段首先是遍历输入数据,并将之解析为关键字/值对作为Mapper的输入。

2.2 MapReduce的处理过程

        首先上一张图,这张图表示的非常清楚。
这里写图片描述
        MapReduce的基本处理过程表示如下:
       (1):遍历输入数据,并将之解析成Key/Value对。MapReduce应用将这些Key/Value对拆分为单独的Key/Value对,分发给对应的Mapper进行处理。
        (2):Mapper根据函数定义,对《K1,V1》进行处理,生成[《K2,V2》]列表。
        (3):所有的Mapper的处理结果聚合在一起构成一个大的[《K2,V2》]列表,这个列表中相同的关键字的数据会被合并作为一个新的关键字/值数据对《K2,[V2]》,即K2,和一系列的V2。
        (4):Reduce按照函数定义的处理过程,对这些新数据再一次进行处理,获得最终的处理结果,并与《k3,V3》列表输出。
注:以上的《》,在实际过程中应该为英语的符号。

2.3 MapReduce的实例分析
本实例对手机网站访问的数据进行分析。
这里写图片描述
        此表格数据包括了用户的手机号,访问网站的信息,流量以及访问时间。结果是为了获取每个用户各自使用流量的总值。MapReduce的流量统计处理流程图如下所示。

这里写图片描述

        输入的数据经过划分后由3个Mapper函数分别处理,Mapper函数的功能是为了提取文件中每行数据中的手机号和流量。mapper处理后的中间数据在MapReduce运行环境中经过排序,分组和合并后,生成了以手机号码为关键字,流量列表为值的数据对,输入至Reduce的函数,Reduce函数需要做的是将流量列表中的每个流量值相加,运算后即得到最终结果。

参考资料

(1):刘军,《Hadoop大数据处理》
(2):周旭龙,《Hadoop学习笔记》
http://www.cnblogs.com/edisonchou/p/4287784.html
(3)伯乐在线,《我是如何向老婆解释MapReduce的》:
http://blog.jobbole.com/1321/

执行`hadoop jar`命令时提示`Not a valid JAR`错误,通常是由于JAR文件路径错误、JAR文件损坏或文件权限问题导致的。以下是一些可能的解决办法: ### 检查JAR文件路径 确保JAR文件的路径是正确的,包括文件名和版本号。在你给出的错误信息中,路径为`/develop/server/hadoop-2.7.6/hadoop-mapreduce-examples-2.7.6.jar`,需要确认该文件确实存在于这个位置。可以使用以下命令检查文件是否存在: ```bash ls /develop/server/hadoop-2.7.6/hadoop-mapreduce-examples-2.7.6.jar ``` 如果文件不存在,需要确认文件的实际位置,或者重新下载该JAR文件。参考正确的命令示例,如`hadoop jar hadoop-mapreduce-examples-2.7.6.jar wordcount /root/input/data.txt ~/output/wc1130`,这里仅指定了JAR文件名,前提是该文件在当前工作目录下[^2]。 ### 检查JAR文件是否损坏 可以尝试重新下载`hadoop-mapreduce-examples-2.7.6.jar`文件,以确保文件没有损坏。下载完成后,再次执行`hadoop jar`命令。 ### 检查文件权限 确保你有足够的权限访问该JAR文件。可以使用以下命令检查文件权限: ```bash ls -l /develop/server/hadoop-2.7.6/hadoop-mapreduce-examples-2.7.6.jar ``` 如果权限不足,可以使用以下命令修改文件权限: ```bash chmod +r /develop/server/hadoop-2.7.6/hadoop-mapreduce-examples-2.7.6.jar ``` ### 示例命令 假设文件路径正确且文件未损坏,权限也正常,可以使用以下命令运行WordCount程序: ```bash hadoop jar /develop/server/hadoop-2.7.6/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /output ``` 这里`/input`是输入目录,`/output`是输出目录,输出目录在执行前不应该存在,因为Hadoop会创建它[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值