版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MapReduce编程入门随着互联网的发展,加入互联网的用户越来越多,互联网的用户规模已不容小视。互联网市场潜力巨大,各大网站的运营商都在采取积极措施,分析用户的特征,根据不同的客户群向其提供差异化的服务,进而达到精准营销的目的。随着一些网站用户的增加,企业越来越难把握用户的需求。为了能更好地满足用户需求,应依据用户的历史浏览记录研究用户的兴趣偏好,分析用户的需求和行为,发现用户的兴趣点,从而将用户分成不同的群体。企业再根据不同的群体提供差异化的服务,改善用户体验。某竞赛网站每年都会开展数据挖掘的竞赛,在竞赛期间网站会有大量的用户访问,当用户访问网站页面时,系统会记录用户访问网站时的日志数据,共有6个数据字段。任务背景字段名称说明Id序号Content_id网页IDUserid用户IDSessionid缓存生成IDDate_time访问时间
Page_path网址网站运营方的工作重点之一,是向目标用户提供更优质的服务。要提高服务品质,必须根据服务对象的特点设计有针对性的服务方案。因此对用户访问网站的日志进行数据分析,是一项非常重要的工作任务。网站的访问次数分布情况对网站运营商而言也是非常重要的指标之一,网站运营商从数据库中抽取了网站2020年5月至2021年2月用户登录网站的行为日志数据,针对用户访问网站的日志数据,网站运营方提出了两个统计需求。根据访问时间统计网站每日的总访问次数,按访问日期输出结果。对统计需求(1)的结果再进行处理,将结果按访问次数进行升序排序。任务背景通常,网站的用户访问日志文件的数据量非常庞大,而且文件中的记录数也较多,文件大多数为文本格式。为了保证较高的处理效率与灵活性,将选用MapReduce编程进行数据处理。本章将详细讲解使用MapReduce编程解决实际问题。首先介绍MapReduce开发环境的搭建过程。接着介绍MapReduce编程原理与执行流程。结合Hadoop官方的示例源码WordCount介绍MapReduce编程的基本思路与处理逻辑。最后通过编写MapReduce程序实现竞赛网站每日访问次数的统计,并对统计的结果根据访问次数进行升序排序。任务背景1通过源码初识MapReduce编程目录在IDEA中搭建MapReduce开发环境2统计网站的访问次数3网站每日访问量按访问次数升序排序4Hadoop框架是基于Java语言开发的,而IntelliJIDEA是一个常用的Java集成开发工具,因此通常选用IntelliJIDEA作为MapReduce的编程工具。为了能够成功地进行MapReduce编程,本小节的任务如下。在本机系统(通常是Windows系统)安装Java。安装IntelliJIDEA工具。在IntelliJIDEA中创建一个MapReduce工程,并配置MapReduce集成环境。任务描述JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心,包含了Java的运行环境、Java工具和Java基础的类库。本书后续章节的Hadoop开发是基于Java语言的,因此需要在Windows下安装JDK,本书使用的JDK版本为JDK1.8,具体安装步骤如下。双击JDK安装包jdk-8u281-windows-x64.exe,进入“JavaSE开发工具包”安装向导对话框,单击“下一步”按钮进入安装。在Windows下安装Java单击“更改”按钮,选择JDK的安装目录,用户可以根据本机系统的磁盘空间自定义安装目录,单击“下一步”按钮,等待JDK安装完成。在Windows下安装Java安装JDK后,系统将弹出一个提示对话框,,需选择JRE的安装位置。单击“更改”按钮,用户可以根据本机系统的磁盘空间自定义JRE的安装目录。需要注意,JDK和JRE的安装目录最好在同一个文件夹下,如均安装在“C:\ProgramFiles\java\”目录下。单击“下一步”按钮进行JRE的安装。JRE安装完成后单击“关闭”按钮即可完成JDK的安装。在Windows下安装Java安装完Java后,需要在Windows系统配置环境变量,只有配置了环境变量,Java编译环境才可以正常使用。在Windows系统配置环境变量的操作步骤如下。右键单击“此电脑”桌面快捷方式,选择“属性”选项,在出现的系统设置窗口中选择“高级系统设置”选项,进入到“系统属性”对话框,单击“环境变量”按钮,弹出“环境变量”对话框。在Windows下安装Java单击“系统变量”组中的“新建”按钮,新建一个变量,变量名为“JAVA_HOME”,变量的值为JDK实际的安装目录。在Windows下安装Java在“环境变量”对话框中,选择“系统变量”组中的“Path”变量,并单击“编辑”按钮,在弹出的“编辑环境变量”对话框中,单击右侧的“新建”按钮,输入“%JAVA_HOME%\bin”的值,再次单击“新建”按钮,输入“%JAVA_HOME%\jre\bin”的值。最后单击“确定”按钮完成Path变量编辑,返回“环境变量”对话框。在Windows下安装Java在“环境变量”对话框中,单击“系统变量”组中的“新建”按钮,新建一个变量,输入变量名“ClassPath”,输入变量值“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”,单击“确定”按钮完成变量设置。测试环境变量是否配置成功。在个人计算机的开始菜单的搜索文本框中搜索“cmd”关键字,查询并打开cmd命令提示符交互式界面,输入“java-version”目录,若出现下图所示的信息,则说明安装配置成功。在Windows下安装Java在IDEA官网中下载IntelliJIDEA的安装包,安装包名称为ideaIC-2018.3.6.exe(Community版),Community版即社区版,是免费开源的,读者也可以自行购买发行版。双击下载好的IDEA安装包,在弹出的安装向导界面中单击“Next”按钮,并设置IDEA的安装目录,用户可根据本机系统的磁盘空间自定义IDEA的安装目录,并单击“Next”按钮。单击“Finish”按钮完成IDEA的安装。下载与安装IntelliJIDEA1.下载与安装IDEA双击桌面生成的IDEA工具图标,或从个人计算机的开始菜单中,依次选择“JetBrains”→“IntelliJIDEACommunityEdition2018.3.6”选项,运行IntelliJIDEA。启动过程中将询问是否导入以前的设定,选择“Donotimportsettings”单选按钮,表示不导入,并单击“OK”按钮进入下一步。下载与安装IntelliJIDEA2.启动IntelliJ
IDEA进入下图所示的界面,选择IDEA设计界面的主题,可以选择白色或黑色背景。考虑代码和结果展示的清晰度,单击“Light”单选按钮,并单击界面左下角的“SkipRemainingandSetDefaults”按钮,跳过其他设置并采用默认设置。设置完成后,即可进入IDEA的运行界面。下载与安装IntelliJIDEA安装好IntelliJIDEA开发工具后,即可在IDEA中创建MapReduce工程。在进入IDEA后,单击“CreateNewProfile”选项,弹出“NewProject”对话框,在左侧列表栏中选择“Maven”选项,并单击界面右上方的“New…”按钮,在弹出的对话框中选择JDK的安装目录,单击“OK”按钮后,再单击“Next”按钮。新建MapReduce工程进入左图所示的对话框,“GroupId”是项目组织唯一的标识符,实际对应JAVA的包的结构,设置为“”;ArtifactId是项目的唯一的标识符,实际对应项目的名称,设置为“Hadoop”;“Version”是项目的版本号,设置为“1.0-SNAPSHOT”,其中1.0是版本号,SNAPSHOT代表不稳定、尚处于开发中的版本。单击“Next”按钮后进入头秃所示的对话框,填写工程的名称并选择工程保存的位置,单击“Finish”按钮完成创建。新建MapReduce工程MapReduce工程创建完成后,在IDEA的主界面中可以查看该工程的目录结构。新建MapReduce工程虽然创建了MapReduce工程,但是该工程并不能运行MapReduce程序,因为没有配置MapReduce环境,所以程序找不到Hadoop相关的JAR包。因此,在IDEA创建工程后,需要配置MapReduce环境,配置步骤如下。在Hadoop工程界面中,选择菜单栏中的“File”→“ProjectStructure”命令,也可以直接使用“Ctrl+Alt+Shift+S”快捷键,打开“ProjectStructure”的对话框。配置MapReduce环境单击“ProjectStructure”的对话框左侧的“Libraries”选项,再右侧单击“+”选项,在弹出的选项栏中单击“Java”选项。在弹出的对话框,选择要添加的jar包,这里需要将Hadoop安装目录的/share/hadoop目录下的全部JAR包导入,单击“OK”按钮进入下一步。全部JAR包导入后,单击“Apply”按钮,再单击“OK”按钮,即可完成MapReduce环境配置。配置MapReduce环境Hadoop安装包需要在本地先解压1通过源码初识MapReduce编程目录在IDEA中搭建MapReduce开发环境2统计网站的访问次数3将网站每日访问量根据访问次数进行升序排序4进行MapReduce编程前,需要先掌握MapReduce的基本原理,对MapReduce的核心模块Mapper与Reducer的执行流程有一定的认识。Hadoop官方提供了一些示例源码,十分适合初学者学习。本小节的任务如下。先理解MapReduce的工作原理、核心组成和MapReduce的执行流程。再通过Hadoop官方示例源码WordCount(词频统计)掌握MapReduce的编程方法。任务描述MapReduce在名称上即体现出了它的核心原理,即由Map和Reduce两个阶段组成。MapReduce通常也被简称为MR。了解MapReduce工作原理及核心组成Map“映射”,在Map阶段进行的一系列数据处理任务被称为Mapper模块。Reduce“归约”,在Reduce阶段进行的一系列数据处理任务被称为Reducer模块。用比喻的方式解读MapReduce的核心组成,MapReduce可以被视为一个专业处理大数据的工程队,主要成员如下。了解MapReduce工作原理及核心组成Mapper·映射器Mapper助理InputFormat·输入文件读取器Shuffle·运输队Shuffle助理Sorter·排序器Reducer·归约器Reducer助理OutputFormat·输出结果写入器一个基本完整的MapReduce程序了解MapReduce工作原理及核心组成了解MapReduce工作原理及核心组成数据分片数据映射MapReduce通过数据分片的方式切分数据,将数据分发给多个单元进行处理,这也是分布式计算的第一步。在数据分片完成后,由Mapper助理InputFormat从文件的输入目录中读取数据,再由Mapper中的map()方法对文件的数据进行解析,并重新组织成新的格式,Mapper会将数据转换为<键,值>的键值对形式,再进行处理。最后Mapper将处理结果输出,等待Shuffle运输队取走结果。了解MapReduce工作原理及核心组成数据归约Reducer接收已排序的结果后,由Reducer中的reduce()方法对结果进行汇总与计算,得到最终结果。最后由Reducer助理OutputFormat将结果输出至指定位置。数据输出Reduce阶段处理完数据后即可将数据文件输出到HDFS,输出的存储数据文件个数和Reduce的个数一致。数据混洗由Shuffle运输队将获取的结果按照相同的键(Key)进行汇集,再将结果发送至Shuffle助理Sorter,由Sorter负责对汇集的结果进行排序,并且Sorter是根据键(Key)进行排序的,再将排序后的结果提交给Reducer。了解MR实现词频统计的执行流程理解MapReduce的基本原理和核心组成后,以词频统计为例,进一步了解MapReduce各阶段的执行流程。单词的输入与词频统计输出内容输入输出HelloWorldOurWorldHelloBigDataRealBigDataHelloHadoopGreatHadoopHadoopMapReduceBigData 2Great 1Hadoop 3Hello 3MapReduce 1Our 1Real 1World 2键值对(Key-ValuePair)是一种数据格式,每个键都有一个对应的值。输入文件的每一行记录经过映射处理后输出为若干组键值对。Map阶段生成键值对后,提交中间输出结果进入Reduce阶段。了解MR实现词频统计的执行流程1.Map阶段的处理过程在Map阶段输出与Reduce阶段输入之间有一个Shuffle过程。Shuffle过程也被称为数据混洗过程,作用是将键相同的键值对进行汇集,并将键相同的值存入同一列表中。了解MR实现词频统计的执行流程2.Reduce阶段的处理过程本小节的任务是以Hadoop官方提供的示例源码中的WordCount程序为例,进行代码级别的分析和说明。首先获取WordCount的源代码。在Hadoop3.1.4的安装目录中,进入\share\hadoop\mapreduce\sources目录,该目录下面有一个hadoop-mapreduce-examples-3.1.4-sources.jar文件,解压该缩文件。在org/apache/hadoop/examples子目录中即可找到一个WordCount.java的文件,即为WordCount程序的源代码。读懂官方提供的WordCount源码Driver程序主要指的是main方法,即MapReduce程序的入口,在main方法里面进行MapReduce程序的一些初始化设置,并提交任务,等待程序运行完成。读懂官方提供的WordCount源码1.应用程序Driver模块读懂官方提供的WordCount源码第1部分(代码第69行)初始化相关Hadoop配置,通过new关键字创建一个实例即可。第2部分(代码第75行)新建Job并设置主类。Job实例化需要两个参数,第一个参数conf是Configuration的实例对象,第二个参数word
count指的是MapReduce任务的任务名称。第3部分(代码第77~79行)设置Mapper、Combiner、Reducer。读懂官方提供的WordCount源码第4部分(代码第80~81行)设置输出键值对格式。第5部分(代码第82~86行)设置输入与输出路径。若有必要,则可以增加对文件输入与输出格式的设置。最后部分(代码第87行)提交任务等待运行。在MapReduce程序中,主要的代码实现包括了Mapper模块中的map()方法以及Reducer模块中的reduce()方法。在WordCount源码中,Mapper模块对应源码中的TokenizerMapper类。自定义TokenizerMapper(代码第36~37行),需要继承Mapper父类,同时需要设置输入/输出键值对格式,其中输入键值对格式要和输入格式设置的类需要读取生成的键值对格式匹配
,而输出键值对格式需要和Driver中设置的Mapper输出的键值对格式匹配。读懂官方提供的WordCount源码2.Mapper模块Mapper类共有3个方法,分别是setup()、map()、cleanup()。若TokenizerMapper类要使用Mapper类的方法,则需要重写Mapper类里面的方法。Mapper任务启动后首先执行setup()方法,该方法主要用于初始化工作。map()方法针对每条输入键值对执行方法中定义的逻辑处理,并按规定的键值对格式输出。在所有键值对处理完成后,再调用cleanup()方法,cleanup方法主要用于关闭资源等操作。map()方法的代码实现要与实际业务逻辑挂钩,由开发者自行编写。读懂官方提供的WordCount源码在WordCount源码中,Reducer模块对应源码中的IntSumReducer类。自定义IntSumReducer类(代码第52~53行),需要继承Reducer父类,和Mapper一样,需要设置输入/输出键值对格式。其中输入键值对格式需要和Mapper的输出键值对格式保持一致,输出键值对格式需要和Driver中设置的输出键值对格式保持一致。读懂官方提供的WordCount源码3.Reduce模块Reducer也有3个方法:setup()、cleanup()、reduce()。且IntSumReducer类如果需要使用Reducer类中的方法,那么所使用的Reducer类中的方法需要重写。setup()、cleanup()方法和Mapper的同名方法功能一致。setup()方法也是在最开始执行一次。cleanup()方法在最后执行一次。核心部分是reduce()方法的实现,reduce()方法需要实现实际业务相关的处理逻辑。进行MapReduce编程时,开发者主要实现Mapper与Reducer这两个模块,其中包括定义输入/输出的键值对格式、编写map()与reduce()方法中定义的处理逻辑等。读懂官方提供的WordCount源码1通过源码初识MapReduce编程目录在IDEA中搭建MapReduce开发环境2统计网站的访问次数3将网站每日访问量根据访问次数进行升序排序4网站的访问次数分布情况对网站运营商而言是十分重要的指标,网站运营商可以根据实际的访问情况总结用户可能感兴趣的内容,调整网站的版块和内容设计。本小节的任务是通过MapReduce编程实现网站每日的访问量统计。编写MapReduce程序首先需要考虑Map阶段和Reduce阶段各自的处理逻辑。再根据处理逻辑编写Mapper模块与Reducer模块的代码。最后将完整代码编译打包后提交至Hadoop集群运行。任务描述根据Map阶段的处理逻辑编写Mapper模块的代码,Mapper模块中主要实现的部分为map()方法。map()方法的主要任务是读取用户访问文件中的数据,输出所有访问日期与初始次数的键值对。访问日期是数据文件中的第5列,因此先定义一个数组,再提取第5个元素的前9个字符,与初始次数1一起构成输出键值对,即<访问日期,1>。分析思路与处理逻辑2.Mapper模块的逻辑实现根据Reduce阶段的处理逻辑编写Reducer模块的代码,Reducer模块中主要实现的部分为reduce()方法。reduce()方法的主要任务就是读取Map阶段的输出键值对,即<访问日期,1>。Reduce阶段的处理逻辑与官方示例WordCount中Reduce阶段的处理逻辑完全相同,因此Reducer类的主要代码也相同,在此不再详述。分析思路与处理逻辑3.Reducer模块的逻辑实现编写核心模块代码编写Mapper模块读取日志数据并按“,”分隔符分割数据,以日期作为键,以1作为值。编写Reducer模块读取Mapper模块的输出键值对,并将相同键的值进行累加,即可统计出网站每日的访问次数。编写Driver模块设置Hadoop集群的初始化配置。第一部分,根据网站每日访问次数的统计需求,分析Map阶段和Reduce阶段的处理逻辑,编写Mapper模块、Reducer模块和Driver模块的代码。定义一个dailyAccessCount类,封装Mapper模块、Reducer模块和Driver模块的实现。任务实现第二部分,编译生成JAR包文件,并提交至Hadoop集群执行,操作步骤如下。·
编译生成dailyAccessCount.jar。·上传dailyAccessCount.jar至master节点。·在master节点中,通过hadoop
jar命令提交MapReduce任务。·在HDFS中的服务监控端口中,进入HDFS的/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目录下查看输出结果。结果包含两列数据,第一列是访问日期,已自动按日期的值进行排序;第二列是每个日期对应的总访问次数。任务实现1通过源码初识MapReduce编程目录在IDEA中搭建MapReduce开发环境2统计网站的访问次数3将网站每日访问量根据访问次数进行升序排序4在上一小节中虽然已实现了网站每日访问次数的统计,并将输出结果保存至HDFS,但是网站每日的访问次数是根据日期进行升序排序的,不能直观地看出访问次数大致的分布情况。本小节的任务如下。读取/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目录中的输出结果。按照访问次数进行升序排序。将排序后的结果存储至HDFS。任务描述首先,对需要处理的数据文件进行分析,网站每日访问次数的数据有两个字段,访问日期与访问次数。现需要根据第2列即访问次数对文件中的数据进行升序排序。分析思路与处理逻辑2020/10/1 180162020/10/2 186542020/10/3 26692020/10/4 12122020/10/5 1426
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中语文2026教资面试经典考题试卷及答案
- 2026初中政治教资面试试讲全真模拟试卷及解析
- 房地产企业介绍课件
- 房地产照片课件
- 护理学职业访谈
- 脑淤血病人的保养护理
- 风电成本控制课件
- 《系统的过程与控制》教学设计-2026-2027学年湘科版(新版)小学信息科技六年级上册
- 八年级科学科学猜想过关检测教案
- 帆船素描课件
- 2025年人教版七年级下册历史全册知识点
- 建设工程监理工作标准(2026版)
- 2026年农村住宅行业洞察报告及未来五至十年发展趋势报告
- 2026年重大事故隐患判定考试题库与答案
- 2026年云南省昆明市公安招聘辅警考试试卷带答案
- 学校后勤服务采购合同协议三篇
- DELE A1西班牙语全真模拟试题(含详细答案解析)
- 僵人综合征疾病研究
- 2026年新疆中考语文真题及答案解析
- 2026年《安全员》考试试题及答案
- 出土坡道施工方案
评论
0/150
提交评论