MapReduce 工作原理及架构


Open Passion Value 2014-3-11 MapReduce 冼 茂 源冼 茂 源冼 茂 源冼 茂 源 xianmaoyuan@hotmail.com 2014-3-112 大 纲大 纲大 纲大 纲 › MapReduce 工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾 › 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧 › 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧 2014-3-113 回 顾回 顾回 顾回 顾——MapReduce 工 作 原 理工 作 原 理工 作 原 理工 作 原 理 2014-3-114 回 顾回 顾回 顾回 顾——工 作 原 理工 作 原 理工 作 原 理工 作 原 理 2014-3-115 回 顾回 顾回 顾回 顾——基 本 架 构基 本 架 构基 本 架 构基 本 架 构 › Hadoop Map/Reduec 体 系 结 构体 系 结 构体 系 结 构体 系 结 构 – Client : 进 行 任 务 切 分、 提 交Map-reduce 任 务 – JobTracker : 协 调 整 个job 的 运 行, 一 个Java 进 程 – TaskTracker : 运 行 此job 的task , 处 理input split , 一 个Java 进 程 – HDFS :hadoop 分 布 式 文 件 系 统,用于在各个进程间共享Job 相 关 的 文 件 2014-3-116 回 顾回 顾回 顾回 顾——基 本 架 构基 本 架 构基 本 架 构基 本 架 构((((mapreduce V2 )))) 回 顾回 顾回 顾回 顾——环 境 搭 建环 境 搭 建环 境 搭 建环 境 搭 建 › 下 载下 载下 载下 载 – 开 源 社 区 – Github • git://git.apache.org/hadoop-common.git – http://archive.cloudera.com/cdh4/ › Hadoop 编 译编 译编 译编 译 – 开 源 • 1.x – ant jar • 2.x – mvn package -DskipTests – Cdh • https://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4- Installation-Guide/cdh4ig_topic_32_2.html • rpm -ivh hadoop-2.0.0+1518-1.cdh4.5.0.p0.24.src.rpm • rpmbuild -ba hadoop.spec › Eclipse 环 境环 境环 境环 境 2014-3-118 大 纲大 纲大 纲大 纲 › MapReduce 工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾 › 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧 › 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧——配 置配 置配 置配 置 › /conf 中 三 个 文 件中 三 个 文 件中 三 个 文 件中 三 个 文 件::::core-site.xml 、、、、mapred-site.xml 、、、、 hdfs-site.xml › Log 目 录目 录目 录目 录::::/conf/hadoop-env.xml 中中中中 HADOOP_LOG_DIR。。。。 2014-3-119 2014-3-1110 MapReduce 性 能 优 化性 能 优 化性 能 优 化性 能 优 化 › 有有有有200 多 个 可 以 调 节 的 参 数多 个 可 以 调 节 的 参 数多 个 可 以 调 节 的 参 数多 个 可 以 调 节 的 参 数,,,, 有 些 在 配 置 文 件 中有 些 在 配 置 文 件 中有 些 在 配 置 文 件 中有 些 在 配 置 文 件 中,,,, 有 些 需 要 编 码 实 现有 些 需 要 编 码 实 现有 些 需 要 编 码 实 现有 些 需 要 编 码 实 现 › Hadoop 任务的优化需要从多个角度考虑任务的优化需要从多个角度考虑任务的优化需要从多个角度考虑任务的优化需要从多个角度考虑,,,,没有一种普适行的调节方法没有一种普适行的调节方法没有一种普适行的调节方法没有一种普适行的调节方法 › 基 本 步 骤基 本 步 骤基 本 步 骤基 本 步 骤 – 合 理 设 定Map/Reduce 数 量 – 如 果 可 能, 使 用Combiner 减 少 中 间 数 据 输 出 – 对中间数据和最终结果启用压缩 – 减 少Shuffle 过 程 中 写 入 磁 盘 的 数 据 – 适 当 增 大 每 个 节 点 的slot 数 量 2014-3-1111 合 理 设 定合 理 设 定合 理 设 定合 理 设 定Map/Reduce 数 量数 量数 量数 量 › Mapper 数 量 不 能 直 接 设 定数 量 不 能 直 接 设 定数 量 不 能 直 接 设 定数 量 不 能 直 接 设 定 – 可 以 通 过 选 择BlockSize 间 接 调 整Mapper 数 量 – 压 缩 输 入 文 件 – 重 写InputFormat , 覆 盖getSplits 方 法 › 适 当 选 择适 当 选 择适 当 选 择适 当 选 择Reducer 数 量数 量数 量数 量 – Reducer 数 量 由 程 序 指 定, 默 认 为1 – Reducer 数量过小导致并发度不够, 过 大 导 致Overhead 过 高。 • 每 个Reducer 处 理1-2G 的 数 据 比 较 合 适 • Jobtracker 上每个任务需要维护一个(MapNum * ReduceNum) 的 矩 阵 • 每 个reducer 很 有 可 能 要 从 所 有 的mapper 获 取 数 据 2014-3-1112 减 少 中 间 数 据减 少 中 间 数 据减 少 中 间 数 据减 少 中 间 数 据 › 如 果 可 能 使 用如 果 可 能 使 用如 果 可 能 使 用如 果 可 能 使 用Combiner 减 少 中 间 数 据 输 出减 少 中 间 数 据 输 出减 少 中 间 数 据 输 出减 少 中 间 数 据 输 出 – Combiner 一 定 要 能 减 少reducer 的 数 据 – Combiner 可 能 在Map 或reducer 端 分 别 进 行, 也 可 能 不 执 行 – Combiner 的输入和输出数据类型是相同的 › 对中间数据和最终结果启用压缩对中间数据和最终结果启用压缩对中间数据和最终结果启用压缩对中间数据和最终结果启用压缩 – mapred.compress.map.output = true – mapred.map.output.compression.codec = com.hadoop.compression.lzo.LzoCodec – mapred.output.compress = true – mapred.output.compression.codec = com.hadoop.compression.lzo.LzoCodec – mapred.output.compression.type = BLOCK mapred.compress.map.output true mapred.map.output.compression.codec org.apache.hadoop.io.compress.SnappyCodec 2014-3-1113 减 少减 少减 少减 少Shuffle 到 磁 盘 的 数 量到 磁 盘 的 数 量到 磁 盘 的 数 量到 磁 盘 的 数 量 › 什 么 是什 么 是什 么 是什 么 是Shuffle – Map 到Reduce 的 数 据 需 要 进 行 排 序/分 区 和 归 并 – Map 侧 和Reduce 侧 都 有 工 作 – Map 侧 将 数 据 进 行 部 分 排 序,由设定的内存决定以此排序的大小 – Reduce 侧 从 多 个Map 拷 贝 数 据, 并 进 行 归 并 排 序( 外 排) 2014-3-1114 Mapper 侧侧侧侧shuffle 2014-3-1115 Reduce 侧侧侧侧shuffle 2014-3-1116 Shuffle 占 内 存占 内 存占 内 存占 内 存 2014-3-1117 Shuffle 相 关 参 数相 关 参 数相 关 参 数相 关 参 数 › io.sort.mb – 推 荐:100 – 不 宜 过 大,否则严重占用系统内存 › io.sort.record.percent 和和和和io.sort.spill.percent – io.sort.record.percent :Kv 数组长度与内存量的百分比, 默 认0.05 ; io.sort.spill.percent : 多 大 比 例 时 开 始spill , 默 认0.80 , 基 本 不 需 要 调 整 › io.sort.factor – Reducer 侧一次对多少文件进行归并排序, 推 荐:100 › mapred.job.shuffle.input.buffer.percent – Reducer 侧 的shuffle buffer 占 其heap 的 比 例 › mapred.reduce.parallel.copies – Reducer 侧 同 时 并 发 拷 贝 的 数 量, 推 荐20-50 › mapred.reduce.parallel.copies › 其 他 参 数其 他 参 数其 他 参 数其 他 参 数… 2014-3-1118 增 大 每 个 节 点 的增 大 每 个 节 点 的增 大 每 个 节 点 的增 大 每 个 节 点 的slot 数 量数 量数 量数 量 › mapred.tasktracker.map.tasks.maximum & mapred.tasktracker.reduce.tasks.maximum – 由 系 统 管 理 员 设 定 – Map 的 数 量 大 约 为CPU 数 量1.5-2倍 – Reduce 的 数 量 大 约 为CPU 数 量 的0.7-1倍 – 考 虑 机 群 的 内 存 状 况, 特 别 要 计 算TaskTracker/DataNode 等 进 程 的 内 存 占 用 量 › 特 殊 情 况 特 殊 处 理特 殊 情 况 特 殊 处 理特 殊 情 况 特 殊 处 理特 殊 情 况 特 殊 处 理 › Scheduler 会进一步限制每个用户的会进一步限制每个用户的会进一步限制每个用户的会进一步限制每个用户的slot 数 量数 量数 量数 量 2014-3-1119 其他一些常用的优化方法其他一些常用的优化方法其他一些常用的优化方法其他一些常用的优化方法 › ulimit 调高同时打开文件描述符及网络连接、 关 闭swap › JVM 参 数:-XX:+UseConcMarkSweepGC -XX:NewSize=300M -XX:MaxNewSize=300M -XX:+DoEscapeAnalysis -XX:+UseCompressedOops - XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/ - XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly" › mapreduce.jobtracker.heartbeat.interval.min › 多 盘 读 写:mapred.local.dir › 增 加rpc handler :mapred.job.tracker.handler.count › split 数 量:mapred.min.split.size/mapred.max.split.size › speculative :mapred.map.tasks.speculative.execution 、 mapred.reduce.tasks.speculative.execution › 任 务 失 败 次 数:mapred.max.map.failures.percent/reduce, mapred.map.max.attempts/reduce › 多 任 务 共 享VM: mapred.job.reuse.jvm.num.tasks › 任 务 超 时:mapred.task.timeout › DistributedCache › 慢 启 动:mapred.reduce.slowstart.completed.maps › 优 先 级:mapred.job.priority › 用 户 端 设 置:mapred.child.java.opts 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧——benchmark › Sort benchmark – 两 步 骤: 产 生 随 机 测 试 数 据、 执 行 排 序 任 务 – 产 生 随 机 测 试 数 据: • hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar randomwriter - Dtest.randomwrite.bytes_per_map=100 -Dtest.randomwriter.maps_per_host=10 /user/mapred/testRandomData • Tips : 不 要 放 弃 代 码 2014-3-1120 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧——benchmark › Sort benchmark – 执 行 排 序 任 务 • hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar sort /user/mapred/testRandomData /user/mapred/sortedData – 验 证 结 果 • hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-test.jar testmapredsort - sortInput /user/mapred/testRandomData -sortOutput /user/mapred/sortedData › 常 用 的常 用 的常 用 的常 用 的benchmark – hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-test.jar • TestDFSIO, 测 试hdfs IO 性 能 • nnbench, namenode 压 力 测 试, 检 验Namenode 的 硬 件 能 力 • mrbanch, 一 系 列 小 任 务 顺 序 提 交 – TeraSort :1T 数 据 排 序 • hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar 2014-3-1121 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧——Reuse JVM › 默 认 情 况默 认 情 况默 认 情 况默 认 情 况:::: 一 个 任 务一 个 任 务一 个 任 务一 个 任 务((((map 或 者或 者或 者或 者reduce )))) 启 动 一 个 独 立 的启 动 一 个 独 立 的启 动 一 个 独 立 的启 动 一 个 独 立 的javaVM 执 行执 行执 行执 行 › mapred.job.reuse.jvm.num.tasks – 节 省java 虚 拟 机 启 动 时 间 – 同 一 个job 的 不 同task 在 一 个VM 中 顺 序 被 执 行, 直 到 数 字 达 到 mapred.job.reuse.jvm.num.tasks 配 置 的 值 – 配 置 为-1时 , 相 同job 的task 在 一 个VM 中 顺 序 执 行 – 注 意: 与mapred.tasktracker.map.tasks.maximum 和 mapred.tasktracker.reduce.tasks.maximum 区 别 2014-3-1122 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧——设置失败百分比及跳过坏记录设置失败百分比及跳过坏记录设置失败百分比及跳过坏记录设置失败百分比及跳过坏记录 2014-3-1123 › mapred.max.map.failures.percent/reduce, mapred.map.max.attempts/reduce, mapred.reduce.slowstart.completed.maps – mapred.reduce.slowstart.completed.maps * 100 <= 100 - mapred.max.map.failures.percent › mapred.skip.map.max.skip.records – 记 录 失 败mapred.skip.attempts.to.start.skipping=2 ( 默 认 为2) 次 之 后 进 入 跳 过 模 式, 跳 过 坏 记 录 数 由跳 过 坏 记 录 数 由跳 过 坏 记 录 数 由跳 过 坏 记 录 数 由mapred.skip.map.max.skip.records 定定定定 义义义义 选 择 其 他 调 度 器选 择 其 他 调 度 器选 择 其 他 调 度 器选 择 其 他 调 度 器 › 默 认默 认默 认默 认FIFO › FairScheduler mapred.jobtracker.taskScheduler org.apache.hadoop.mapred.FairScheduler 在HADOOP_HOME/lib 下 需 要 存 在fairscheduler.jar 文 件 › 其 它其 它其 它其 它::::CapacityScheduler 大 纲大 纲大 纲大 纲 › MapReduce 工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾工 作 原 理 及 架 构 回 顾 › 运 维 技 巧运 维 技 巧运 维 技 巧运 维 技 巧 › 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择 › 处 理 类 型 必 须 是 是处 理 类 型 必 须 是 是处 理 类 型 必 须 是 是处 理 类 型 必 须 是 是org.apache.hadoop.io.Writable 接 口 实 现接 口 实 现接 口 实 现接 口 实 现 – 定义数据序列化及反序列化 – 用 于 输 入、 输 出 及 中 间 数 据 › Key 必 须 是必 须 是必 须 是必 须 是org.apache.hadoop.io.WritableComparable 接 口 实 现 – 除 了除 了除 了除 了Writable ,,,, 还 要 具 备还 要 具 备还 要 具 备还 要 具 备Comparable 功 能功 能功 能功 能 › 示 例: – Map • 输 入输 入输 入输 入::::(key: LongWritable, value: Text) • 输 出:(key: Text, value: IntWritable) 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择 › 示 例示 例示 例示 例 – Reduce • 输 入:(key: Text, value: IntWritable) • 输 出:(key: Text, value: IntWritable) › Map reduce 共 用 输 出共 用 输 出共 用 输 出共 用 输 出key/value 类 型类 型类 型类 型 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择 › 定 义定 义定 义定 义map 特 殊 的 输 出特 殊 的 输 出特 殊 的 输 出特 殊 的 输 出kv 类 型类 型类 型类 型 › 内 置 的 可 用 于内 置 的 可 用 于内 置 的 可 用 于内 置 的 可 用 于key 的 类 型的 类 型的 类 型的 类 型 – IntWritable, LongWritable, BooleanWritable, FloatWritable, ByteWritable – Text :UTF8 文 本 – BytesWritable: 字 节 序 列 – VIntWritable/VLongWritable :长度可变的整型及长整型 – NullWritable › 内 置 的 可 用 于内 置 的 可 用 于内 置 的 可 用 于内 置 的 可 用 于value 的 类 型的 类 型的 类 型的 类 型 – ArrayWritable 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择数 据 类 型 选 择 › 可 用 作value 的 类 型 – TwoDArrayWritable :::: 二 维二 维二 维二 维writable 队 列队 列队 列队 列 – MapWritable/SortedMapWritable 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——实 现 自 定 义实 现 自 定 义实 现 自 定 义实 现 自 定 义Value › 实 现实 现实 现实 现org.apache.hadoop.io.Writable 接 口(无参数构造函数需保留) 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——实 现 自 定 义实 现 自 定 义实 现 自 定 义实 现 自 定 义Key › 实 现实 现实 现实 现 org.apache.hadoop.io.WritableComparable接 口 – 扩 展扩 展扩 展扩 展org.apache.hadoop.io.Writable 并 同 时 扩 展java.lang.Comparable 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——Map 输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型Value › 问 题问 题问 题问 题::::Reduce 只 接 受 确 定 的 唯 一 类 型只 接 受 确 定 的 唯 一 类 型只 接 受 确 定 的 唯 一 类 型只 接 受 确 定 的 唯 一 类 型value › 解 决 方 法解 决 方 法解 决 方 法解 决 方 法:::: 用用用用GenericWritable 适 配适 配适 配适 配 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——Map 输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型Value › Map 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——Map 输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型输 出 不 同 类 型Value › Reduce › 其 他其 他其 他其 他::::org.apache.hadoop.io.ObjectWritable , 序 列 化 时 存 储 类 名 达 到 区 分 不 同 类 的 目 的, 性 能 差 些。 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——选 择 适 合 的选 择 适 合 的选 择 适 合 的选 择 适 合 的InputFormat › TextInputFormat › NLineInputFormat › SequenceFileInputFormat › DBInputFormat: 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——同时处理不同类型的输入同时处理不同类型的输入同时处理不同类型的输入同时处理不同类型的输入 › 一 次一 次一 次一 次Map/Reduce 任务需要同时处理不同类型的输入任务需要同时处理不同类型的输入任务需要同时处理不同类型的输入任务需要同时处理不同类型的输入 – MultipleInputs • 不 同 输 入 类 型 • 不 同 输 入 类 型 及 不 同mapper 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——定 制定 制定 制定 制InputFormat 开 发 技 巧开 发 技 巧开 发 技 巧开 发 技 巧——定 制定 制定 制定 制InputFormat › protected boolean isSplitable(JobContext context, Path file) › public List getSplits(JobContext job) › InputSplit: getLocations() 、、、、getLength() › createRecordReader – Extends RecordReader – Initialize – nextKeyValue – getCurrentKey/getCurrentValue 谢 谢谢 谢谢 谢谢 谢
还剩38页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

jxxmskulong

贡献于2014-04-16

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf