MapReduce原理

MapReduce

Map:映射,多个,具体根据资源以及需求去设定,Reduce:聚和,生产上默认是一个。

MR2.x的架构设计(MR on Yarn流程、Mr提交job)

在这里插入图片描述

  1. Yarn:ResourceManager和NodeManager
  2. ResourceManager:Applications Manager(应用程序管理器)和Resource Scheduler(资源memory和cpu调度器)
  3. NodeManager中的红色框
    container虚拟概念,属于NM节点上, 一个Application通常会被分解成多个任务并行执行,其中,每个任务要使用一定量的资源,这些资源被封装成container。详细说来,container不仅包含一个任务的资源说明,还包含很多其他信息,比如Container对应的节点、启动container所需的文件资源、环境变量和命令等信息,MR、Spark等技术的最小单元
    map task和reduce Task是两种任务
  4. 用户向Yarn提交应用程序(job app application),jar文件、sql到ResourceManager的ApplicationsManager上面,其中包裹ApplicationMaster程序、启动ApplicationMaster命令等
  5. RM为该job分配第一个(hadoop02节点)container,运行job的ApplicationMaster
  6. ApplicationMaster向Applications Manager注册,这样就可以在RM WEB界面查询这个job的运行状态
  7. Application Master采用轮询的方式通过RPC协议向RM申请和领取资源
  8. Application Master拿到资源,就对应的与NodeManager通信,要求启动任务
  9. NodeManager为任务设置好运行环境(jar包等),将任务启动命令写在一个脚本里,并且通过该脚本启动任务即map task和reduce task
  10. 各个task通过rpc协议向Application Master汇报自己的状态和进度,以此让Application Master随时掌握各个task的运行状态,从而在task运行失败,重启任务
  11. 任务结束Application Master向Applications Manager注销且关闭自己

总结Yarn运行流程分为两步:1、启动Application Master,申请资源;2、运行任务,直到任务运行完成
具体详细的流程包含代码请参考:http://blog.itpub.net/30089851/viewspace-2095837/

Map Task的数量

[hadoop@hadoop01 hadoop]$ hdfs dfs -put 2.log  /wordount/input 
19/12/08 21:21:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop01 hadoop]$ 
[hadoop@hadoop01 hadoop]$ 
[hadoop@hadoop01 hadoop]$ hdfs dfs -ls /wordount/input
19/12/08 21:21:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 hadoop supergroup         86 2019-11-30 20:39 /wordount/input/1.log
-rw-r--r--   1 hadoop supergroup         20 2019-12-08 21:21 /wordount/input/2.log
[hadoop@hadoop01 hadoop]$ 


[hadoop@hadoop01 hadoop]$ hadoop jar ./share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar wordcount /wordount/input /wordount/output11
19/12/08 21:21:58 INFO input.FileInputFormat: Total input paths to process : 2
19/12/08 21:21:58 INFO mapreduce.JobSubmitter: number of splits:2
   Job Counters 
                Launched map tasks=2
                Launched reduce tasks=1

Map Task数量:
当文件的size小于block块的size(128M)的时候,maptask的数量和文件数量有关系;当文件的size大于block块的size的时候,maptask的数量和文件被切割为多少块有关;所以生产上控制一个文件的size要稍微小于一个blocksize,当blocksize为128M:的时候,文件的size设置在120M左右

比如:我们设定hdfs的块大小是64mb,如果我们输入有三个文件,大小分别是3mb、65mb和127mb,那么mapreduce会把3mb文件分为一个输入分片(input split),65mb则是两个输入分片(input split),而127mb也是两个输入分片(input split),这样就会有5个map任务执行,3mb的文件就会执行的很快,但是127mb的文件就会执行很慢,导致机器资源浪费。所以生产上要合并小文件,或者压缩文件,这个也是mapreduce优化计算的一个关键点。
压缩文件参考:
https://ruozedata.github.io/2018/04/18/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%8E%8B%E7%BC%A9%EF%BC%8C%E4%BD%A0%E4%BB%AC%E7%9C%9F%E7%9A%84%E4%BA%86%E8%A7%A3%E5%90%97%EF%BC%9F/

  1. 文件格式:txtfile,orc,parquet
    Parquet是一个基于列式存储的文件格式,它将数据按列划分进行存储
    Orc也是一个列式存储格式,产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度
    Hive: orc/parquet + bzip2
    Hbase: hfile + snappy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值