比较好的网站空间,国内免费建站网站,网页制作与网站管理,网站目标关键词MapReduce 基础介绍
起源与发展#xff1a;是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现#xff0c;最初用于大规模网页数据并行处理#xff0c;现成为 Hadoop 核心子项目之一#xff0c;是面向批处理的分布式计算框架。基本原理#xff1a;分为 map 和 reduce …
MapReduce 基础介绍
起源与发展是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现最初用于大规模网页数据并行处理现成为 Hadoop 核心子项目之一是面向批处理的分布式计算框架。基本原理分为 map 和 reduce 两个阶段。map 阶段将计算任务分发到数据节点并行运算各节点得出部分结果reduce 阶段汇总部分结果得到最终结果体现分而治之与并行运算思想遵循计算跟着数据走、移动计算而非数据的原则。
MapReduce 特点
计算与数据关系计算任务移动到数据所在节点数据不动降低分布式编程门槛。扩展性具有良好扩展性随着节点增加存储和计算能力近乎线性递增。
MapReduce 适用场景
离线批处理任务适合海量数据离线批处理如数据统计PVUV 统计、搜索引擎索引构建、海量数据查询、复杂数据分析算法实现等。
MapReduce 不适用场景
实时性要求高的场景不适合毫秒或秒级返回结果的场景如 OLAP、流计算因其计算效率达不到实时性要求且无法处理无界数据集和支持实时计算模式。DAG 运算场景不能进行有向无环图DAG运算由于中间结果需落盘、读盘和网络传输导致延迟高、效率低。
MapReduce 与 Spark 在 DAG 运算上的对比
MapReduce 的劣势做 DAG 运算慢中间结果落盘、读盘和网络传输过程繁琐效率低。Spark 的优势支持 DAG 运算数据存于内存可直接将结果给到下一个任务计算速度快但存在内存不足问题。 MAPREDUCE 作业运行原理与词频统计示例 以词频统计展示 MAPREDUCE 作业运行原理即统计英文文本中单词出现频率。若文本存于 HDFS其自动进行 split 操作若未存于 HDFS则按 128 兆一块进行数据块拆分每个数据块启动一个 map task。
map 任务处理过程
map task 将每行文本按空格拆分单词把单词作为 K给每个单词标 value 值为 1形成 K-V 形式中间结果。
reduce 节点聚合操作
把相同 K 的数据分发到同一个 reduce 节点进行聚合将相同 K 的 value 值累加得到最终词频结果其中难点在于如何把相同 K 分发到同一 reduce此过程需经过 shuffle洗牌阶段。
哈希取模分发机制
shuffle 阶段通过哈希取模实现分发先将字符串形式的 K 进行数字编码再对 reducer 个数进行哈希取模即转换后的数字除以 reducer 个数取余数余数对应相应的 reduce 节点以此保证相同 K 能聚合到同一 reducer。
生产中 reduce 个数设置
生产中 reduce 个数可手动指定实际应用中可能不像示例中有较多 reduce如可能只有两个 reduce此时单词会按哈希取模结果分发到这两个 reduce 中进行处理。 map reduce 执行流程
文件拆分与 map 任务启动文件上传至 HDFS 后会自动进行 split拆分成多个 block每个 block 启动一个 map 任务。map 任务处理与分组map 任务处理数据得到 key-value 结果并依据 key 对 reduce 个数进行哈希取模分组。例如有三个 reduce则按对三取模结果分为三组。reduce 任务拉取与处理reduce 任务启动 fetch 线程从各 map 拉取对应组数据将来自多个地方的同组数据合并为一个大文件后对文件按 key 进行 reduce 处理如词频统计中对相同 key 的 value 累加求和每个 reducer 会输出一个结果文件存于同一目录下这些文件总和即为最终结果。
执行阶段划分
按任务划分分为 map task 和 reduce task。按运行阶段划分包括 split 阶段、shuffle 阶段、reduce 阶段及输出阶段。其中 shuffle 阶段由 map task 和 reduce task 共同完成map task 负责对内存缓存区100 兆达 80%即 80 兆时触发的数据进行分组排序并落盘可能产生多个小文件后再合并成大文件reduce task 从 map 拉取数据到缓存有阈值超阈值也会落盘同样要对数据合并、分组排序后再进行 reduce 处理。
shuffle 阶段详细分析 map 端操作map 运算结果存放在 100 兆内存缓存区达到 80 兆时触发溢写到磁盘同时进行分组排序根据 reduce 个数哈希取模分组并在组内排序多次溢写会生成多个分组有序小文件最后需合并成大的分组有序文件。reduce 端操作reduce 启动 fetch 线程从 map 拉取数据到缓存缓存达到阈值后溢写生成小文件再合并成大文件并进行分组排序按 K 值分组排序最后对分组有序文件进行 reduce 处理。效率问题shuffle 阶段是 map reduce 执行慢的关键。其在 map 和 reduce 过程中大量数据落盘且 reduce 拉取数据时存在大量网络传输内存缓存使用量小仅几百兆频繁与磁盘交互及网络传输导致整体效率低下。 作业提交与运行
提交方式使用 hadoop -jar 命令提交作业需指定 jar 包名称及要运行的主类名并可添加参数。例如官方示例包中运行 MAREDUCE 作业统计π值时需按此方式提交。作业管理通过 yarn application - list 查看作业运行情况用 yarn application -kill 取消作业。
作业运行监控
运行状态显示作业提交后会生成作业 id运行时控制台会实时显示 map 和 reduce 的进度信息。需注意按 CTRL C 只能中断控制台输出无法终止后台作业。可视化监控可访问yarn集群主节点的 8088 端口进入可视化监控页面在 applications 中找到正在运行的作业点击作业 id 查看详细运行情况。 日志查看与排错 查看途径除可视化界面外可在作业运行节点查找日志。运维人员可登录节点依据 yarn node manager 相关配置找到日志存储目录通常在 log 目录下查看作业输出日志以分析运行状况。普通用户一般通过可视化界面查看日志。排错方法从日志信息中排查和解决作业运行问题。