上一篇已经介绍了hadoop集群在centos和windows环境的搭建。这篇简单介绍在hadoop环境中简单计算示例。
hadoop由三个核心模块组成:HDFS分布式文件系统,MapReduce处理数据,yarn资源调度。
特征:1.典型的 Master/Slave 架构 2.分块存储(block机制) 3.命名空间(NameSpace) 4.NameNode元数据管理 5.DataNode数据存储 6.副本机制 7.⼀次写⼊,多次读出
Mapper
⽤户⾃定义⼀个Mapper类继承Hadoop的Mapper类
Mapper的输⼊数据是KV对的形式(类型可以⾃定义)
Map阶段的业务逻辑定义在map()⽅法中
Mapper的输出数据是KV对的形式(类型可以⾃定义)
注意:map()⽅法是对输⼊的⼀个KV对调⽤⼀次!!
Reduce
⽤户⾃定义Reducer类要继承Hadoop的Reducer类
Reducer的输⼊数据类型对应Mapper的输出数据类型(KV对)
Reducer的业务逻辑写在reduce()⽅法中
Reduce()⽅法是对相同K的⼀组KV对调⽤执⾏⼀次
Driver
创建提交YARN集群运⾏的Job对象,其中封装了MapReduce程序运⾏所需要的相关参数⼊输⼊数据路
径,输出数据路径等,也相当于是⼀个YARN集群的客户端,主要作⽤就是提交我们MapReduce程序运
⾏。
ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资
源分配与调度;
NodeManager(nm):单个节点上的资源管理、处理来⾃ResourceManager的命令、处理来⾃
ApplicationMaster的命令;
ApplicationMaster(am):数据切分、为应⽤程序申请资源,并分配给内部任务、任务监控与容错。
Container:对任务运⾏环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运
⾏相关的信息。
yarn有三种资源调度器FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.9.2默认的资源调度器是Capacity Scheduler。
MapReduce的一个作业用例
MapReduce编程
有三个⽂件fifile1、fifile2、fifile3,⽂件中每⼀⾏都是⼀个数字,如下所示。
输⼊⽂件
fifile1:
fifile2:
fifile3:
请编写 MapReduce 程序实现如下需求:
MapReduce 程序读取这三个⽂件,对三个⽂件中的数字进⾏整体升序排序,并输出到⼀个结果⽂件
中,结果⽂件中的每⼀⾏有两个数字(两个数字之间使⽤制表符分隔), 第⼀个数字代表排名,第⼆个
数字代表原始数据
期望输出
2
32
654
32
15
756
65223
5956
22
650
92
26
54
6
1 2
2 6
3 15
4 22
5 26
6 32
7 32
8 54
9 9210 650
11 654
12 756
13 5956
14 65223
实现代码:
有需要深入了解的小伙伴,私聊。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。