MapReduce 原理深度剖析
2017-12-19 00:04
176 查看
一 . MapReduce 工作机制详解
1. MapTask工作机制
2. ReduceTask工作机制
3. Shuffle 机制
Shuffle 就是从map的输出 到 Reduce阶段的输入在这一过程中经历了OutPutCollection阶段的根据HashPartition的分区,到maptask阶段的缓存区的2:8划分 ,排序 ,Combiner的合并,当内存大于8的时候溢出到磁盘,在磁盘中又经过了文件的合并,排序。当reduce节点Copy磁盘中的数据到Partition中,经过了合并排序。 之所以Hadoop的效率低就是因为中间经历这些步骤。
补充 combiner这个是继承reducer,输入与reduce一致,输出与map段一致。这里有个排序,过滤,分区的操作。
二 . MapReduce 并行度 工作机制
1. MapTask 并行度机制
Map阶段并行度代表的是MapTask的数量,并不是Maptask的数量越多越好,因为每个Mapatask都会单独开启一个JVM实例进程,占用内存。然后Maptask的数量又是根据逻辑分配来决定。重点就是FileInputFormat 切片机制。FileInputFormat 切片机制
1. 文本数据过大 默认情况下,split size=block size但是又要针对不同的环境来说如果需要切分的是10G的文本数据,按照128M来切分会产生很多的MapTask,因此可以考虑 增加Block快的大小进而减小分配数 2. 修改切片参数的设置 FileInputFormat 中切片的大小的参数配置 在 FileInputFormat 中,计算切片大小的逻辑: Math.max(minSize, Math.min(maxSize, blockSize)); 切片主要由这几个值来运算决定: minsize :默认值: 1 配置参数: mapreduce.input.fileinputformat.split.minsize maxsize :默认值: Long.MAXValue 配置参数: mapreduce.input.fileinputformat.split.maxsize blocksize 3. bytesRemaining/splitSize > 1.1 不满足的话,那么最后所有剩余 的会作为一个切片。从而不会形成例如 129M 文件规划成两个切片的局面。 4. 无论怎么切 都不能让多个小文件“划入”一个 split
2. ReduceTask 并行度机制
就是RduceTask的数量 可以手动设置 。具体的数量应该根据业务需求去配置。reduce的数量不合理就会造成 数据倾斜 。 解决办法就是hash值打散 。Map阶段的输出key进行修改 。三 . MapReduce 优化参数 (了解)
1. 资源相关参数
//以下参数是在用户自己的 MapReduce 应用程序中配置就可以生效 (1) mapreduce.map.memory.mb: 一个 Map Task 可使用的内存上限(单位:MB),默认为 1024。 如果 Map Task 实际使用的资源量超过该值,则会被强制杀死。 (2) mapreduce.reduce.memory.mb: 一个 Reduce Task 可使用的资源上限(单位:MB),默认 为 1024。如果 Reduce Task 实际使用的资源量超过该值,则会被强制杀死。 (3) mapreduce.map.cpu.vcores: 每个 Maptask 可用的最多 cpu core 数目, 默认值: 1 (4) mapreduce.reduce.cpu.vcores: 每个 Reducetask 可用最多 cpu core 数目默认值: 1 (5) mapreduce.map.java.opts: Map Task 的 JVM 参数,你可以在此配置默认的 java heap size 等参数, 例如: “-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc” (@taskid@会被 Hadoop 框架自动换为相应的 taskid), 默认值: “” (6) mapreduce.reduce.java.opts: Reduce Task 的 JVM 参数,你可以在此配置默认的 java heap size 等参数, 例如: “-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”, 默 认值: “” //应该在 yarn 启动之前就配置在服务器的配置文件中才能生效 (1) yarn.scheduler.minimum-allocation-mb RM 中每个容器请求的最小配置,以 MB 为单 位,默认 1024。 (2) yarn.scheduler.maximum-allocation-mb RM 中每个容器请求的最大分配,以 MB 为单 位,默认 8192。 (3) yarn.scheduler.minimum-allocation-vcores 1 (4)yarn.scheduler.maximum-allocation-vcores 32 (5) yarn.nodemanager.resource.memory-mb 表示该节点上YARN可使用的物理内存总量, 默认是 8192(MB),注意,如果你的节点内存资源不够 8GB,则需要调减小这个值,而 YARN 不会智能的探测节点的物理内存总量。 //shuffle 性能优化的关键参数,应在 yarn 启动之前就配置好 (1) mapreduce.task.io.sort.mb 100 shuffle 的环形缓冲区大小,默认 100m (2) mapreduce.map.sort.spill.percent 0.8 环形缓冲区溢出的阈值,默认 80%
2. 容错相关参数
(1) mapreduce.map.maxattempts: 每个 Map Task 最大重试次数,一旦重试参数超过该值,则 认为 Map Task 运行失败,默认值:4。 (2) mapreduce.reduce.maxattempts: 每个Reduce Task最大重试次数,一旦重试参数超过该值, 则认为 Map Task 运行失败,默认值:4。 (3) mapreduce.map.failures.maxpercent: 当失败的 Map Task 失败比例超过该值,整个作业则 失败,默认值为 0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于 0 的 值,比如 5,表示如果有低于 5%的 Map Task 失败(如果一个 Map Task 重试次数超过 mapreduce.map.maxattempts,则认为这个 Map Task 失败,其对应的输入数据将不会产生任 何结果),整个作业扔认为成功。 (4) mapreduce.reduce.failures.maxpercent: 当失败的 Reduce Task 失败比例超过该值为,整个 作业则失败,默认值为 0. (5) mapreduce.task.timeout:如果一个task在一定时间内没有任何进入,即不会读取新的数据, 也没有输出数据,则认为该 task 处于 block 状态,可能是临时卡住,也许永远会卡住。为了 防止因为用户程序永远 block 不退出,则强制设置了一个超时时间(单位毫秒),默认是 600000,值为 0 将禁用超时。。
3. 效率稳定性参数
(1) mapreduce.map.speculative: 是否为 Map Task 打开推测执行机制,默认为 true, 如 果为 true,则可以并行执行一些 Map 任务的多个实例。 (2) mapreduce.reduce.speculative: 是否为 Reduce Task 打开推测执行机制,默认为 true (3)mapreduce.input.fileinputformat.split.minsize: FileInputFormat做切片时最小切 片大小,默认 0。 (5)mapreduce.input.fileinputformat.split.maxsize: FileInputFormat做切片时最大切 片大小 推测 执行 机制 ( Speculative Execution ): 它根据一定的法则推测出“拖后腿”的任务,并 为 这 样 的 任 务 启 动 一 个 备 份 任 务 ,让 该 任 务 与 原 始 任 务 同 时 处 理 同 一 份 数 据 ,并 最 终 选 用 最 先 成 功运行完成任务的计算结果作为最终结果
四 . MapReduce 其他功能 (了解)
1 . 计算器应用
2 . 多job串联
案例练习 (扩展视野)
案例 1. 倒排索引
案例 2. 数据去重
案例 3. Top N
相关文章推荐
- Java反射机制剖析(四)-深度剖析动态代理原理及总结
- Hive中Join的使用入门 & Common Join与Map Join原理深度剖析
- 深度剖析hdfs原理
- 深度剖析:CDN内容分发网络技术原理
- 深入剖析MapReduce架构及原理(二)
- MapReduce原理剖析
- 深度剖析:CDN内容分发网络技术原理
- Java反射机制剖析(四)-深度剖析动态代理原理及总结
- elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
- 第5讲 zend原理深度剖析
- 深度剖析Spark分布式执行原理
- ElasticSearch56:内核原理探秘_深度图解剖析document写入原始(buffer,segment,commit)
- 深度剖析:CDN内容分发网络技术原理
- java事务学习笔记(九)--深度剖析JTA原理与实现
- MapReduce/Hbase进阶提升(原理剖析、实战演练)
- mapreduce原理全剖析map+shuffle+reducer 全部过程
- Kinect原理深度剖析
- Java反射机制剖析(四)-深度剖析动态代理原理及总结
- MapReduce/Hbase进阶提升(原理剖析、实战演练)