最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[MapReduce] 解读MapReduce程序实例

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-22 19:42:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  Mapreduce 是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上。MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理。
    Hadoop 的四大组件:
(1)HDFS:分布式存储系统;
(2)MapReduce:分布式计算系统;
(3)YARN: hadoop 的资源调度系统;
(4)Common: 以上三大组件的底层支撑组件,主要提供基础工具包和 RPC 框架等;
    在 MapReduce 组件里, 官方给我们提供了一些样例程序,其中非常有名的就是 wordcount 和 pi 程序,这些程序代码都在 hadoop-example.jar 包里,jar包的安装目录在Hadoop下,为:
/share/hadoop/mapreduce
    下面我们来逐一解读这两个样例程序。
    测试前,先关闭防火墙,启动Zookeeper、Hadoop集群,依次顺序为 :
./start-dfs.sh./start-yarn.sh
    成功启动后,查看进程是否完整。这些可参考之前博客中关于集群的搭建。
    一、pi样例程序
    (1)执行命令,带上参数
[hadoop@slave01 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.6.jar pi55Number of Maps  =5Samples per Map =5Wrote inputforMap#0Wrote inputforMap#1Wrote inputforMap#2Wrote inputforMap#3Wrote inputforMap#4Starting Job......省略一部分......18/06/2716:22:56INFO mapreduce.Job:map0% reduce0%18/06/2716:28:12INFO mapreduce.Job:map73% reduce0%18/06/2716:28:13INFO mapreduce.Job:map100% reduce0%18/06/2716:29:26INFO mapreduce.Job:map100% reduce100%18/06/2716:29:29INFO mapreduce.Job: Job job_1530087649012_0001 completed successfully18/06/2716:29:30INFO mapreduce.Job: Counters:49File System CountersFILE: Number of bytesread=116FILE: Number of bytes written=738477FILE: Number ofreadoperations=0FILE: Number of largereadoperations=0FILE: Number ofwriteoperations=0HDFS: Number of bytesread=1320HDFS: Number of bytes written=215HDFS: Number ofreadoperations=23HDFS: Number of largereadoperations=0HDFS: Number ofwriteoperations=3Job Counters Launchedmaptasks=5Launched reduce tasks=1Data-localmaptasks=5Totaltimespent by all maps in occupied slots (ms)=1625795Totaltimespent by all reduces in occupied slots (ms)=48952Totaltimespent by allmaptasks (ms)=1625795Totaltimespent by all reduce tasks (ms)=48952Total vcore-milliseconds taken by allmaptasks=1625795Total vcore-milliseconds taken by all reduce tasks=48952Total megabyte-milliseconds taken by allmaptasks=1664814080Total megabyte-milliseconds taken by all reduce tasks=50126848Map-Reduce FrameworkMap input records=5Map output records=10Map output bytes=90Map output materialized bytes=140Inputsplitbytes=730Combine input records=0Combine output records=0Reduce input groups=2Reduce shuffle bytes=140Reduce input records=10Reduce output records=0Spilled Records=20Shuffled Maps =5Failed Shuffles=0Merged Map outputs=5GCtimeelapsed (ms)=107561CPUtimespent (ms)=32240Physical memory (bytes) snapshot=500453376Virtual memory (bytes) snapshot=12460331008Total committed heap usage (bytes)=631316480Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=590File Output Format Counters Bytes Written=97Job Finished in452.843secondsEstimated value of Pi is3.68000000000000000000
    执行程序,参数含义:
第1个参数5指的是要运行5次map任务 ;
第2个参数5指的是每个map任务,要投掷多少次 ;
    2个参数的乘积就是总的投掷次数(pi代码就是以投掷来计算值)。
    通过上面我们获得了Pi的值:3.680000,当然也可以改变参数来验证得出的结果和参数的关系,比如我的参数换成10和10,则得出的结果为:3.20000。由此可见:参数越大,结果越是精确。
    (2)查看运行进程
    在执行过程中,它的时间不定,所以我们可以通过访问界面,查看具体的运行进程,访问:
slave01:8088
    界面显示如下:





    从上面我们可以看出:当Progress进程结束,即代表运算过程结束,也可以点击查看具体的内容,这里不做演示了。
    二、wordcount样例程序
    (1)准备数据,上传HDFS
    简单的说就是单词统计,这里我们新建一个txt文件,输入一些单词,方便统计:
[hadoop@slave01 mapreduce]$ touch wordcount.txt
[hadoop@slave01 mapreduce]$ vim wordcount.txt
    输入以下单词,并保存:
hello word !you canhelpme ?yes , I canHowdoyoudo?
    上传到HDFS,先在hdfs上创建文件夹,在将txt文件放到该文件夹下,下面是一种创建方式,或者是hadoop fs -mkdir 的方式,二者择其一,注意路径:
[hadoop@slave01 bin]$ hdfs dfs -mkdir -p /wordcount
[hadoop@slave01 bin]$ hdfs dfs -put ../share/hadoop/mapreduce/wordcount.txt /wordcount
[hadoop@slave01 bin]$
    我们可以通过访问 slave01:50070,查看HDFS文件系统:





    成功上传。
    (2)运行程序
    执行下面的命令,注意路径:
[hadoop@slave01 bin]$ yarn jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /wordcount /word_output18/06/2717:34:24INFO client.RMProxy:Connecting to ResourceManager at slave01/127.0.0.1:803218/06/2717:34:30INFO input.FileInputFormat:Total input paths to process :118/06/2717:34:30INFO mapreduce.JobSubmitter:number ofsplits:118/06/2717:34:31INFO mapreduce.JobSubmitter:Submitting tokensforjob:job_1530087649012_000318/06/2717:34:32INFO impl.YarnClientImpl:Submitted application application_1530087649012_000318/06/2717:34:33INFO mapreduce.Job:The url to track thejob:http://slave01:8088/proxy/application_1530087649012_0003/18/06/2717:34:33INFO mapreduce.Job:Runningjob:job_1530087649012_000318/06/2717:34:52INFO mapreduce.Job:Job job_1530087649012_0003 runninginuber mode :false18/06/2717:34:52INFO mapreduce.Job:map0% reduce0%18/06/2717:35:02INFO mapreduce.Job:map100% reduce0%18/06/2717:35:31INFO mapreduce.Job:map100% reduce100%18/06/2717:35:32INFO mapreduce.Job:Job job_1530087649012_0003 completed successfully......省略部分......Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=59File Output Format Counters Bytes Written=72
    命令参数的含义:
    第一个指的是jar包路径,第二个指的是要执行的样例程序名称wordcount,第三个指的是文件所在的HDFS路径,第四个指的是要输出的文件目录(不要是已经存在的)。
    上面是输出结果,同样的我们可以通过访问 slave01:8088 查看进程。
    执行结束后,在HDFS文件系统上,可以看到输出的目录已经创建好了,且里面存在了输出的文件:





    通过命令,可以查看执行后的结果文件:
[hadoop@slave01 bin]$ hdfs dfs -text /word_output/part*!1,1?2How1I1can2do2hello1help1me1word1yes1you2[hadoop@slave01 bin]$
    从上面可以看出:单词已经统计完成,我们可以对照文件进行验证。
    好了,上面是对两个已有样例的解读,至于代码方面有空再一起讨论吧。



作者:大数据首席数据师
链接:https://www.jianshu.com/p/8e2430f35770


楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-26 00:42

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表