2015-10-28 11:21:24 http://www.cnki.net/kcms/detail/51.1196.tp.20151028.1121.104.html 优 先 出 版 计 算 机 应 用 研 究 第 33 卷 Hadoop 平 台 中 一 种 Reduce 负 载 均 衡 贪 心 算 法 * 刘 朵, 曾 锋 *, 陈 志 刚, 姚 亦 韬 ( 中 南 大 学 软 件 学 院, 长 沙 410075) 摘 要 :MapReduce 是 目 前 广 泛 应 用 的 并 行 计 算 框 架, 是 Hadoop 平 台 的 重 要 组 成 部 分 主 要 包 括 Map 函 数 和 Reduce 函 数 Map 函 数 输 出 key-value 键 值 对 作 为 Reduce 的 输 入, 由 于 输 入 的 动 态 性, 不 同 主 机 上 的 Reduce 处 理 的 输 入 量 存 在 不 均 衡 性 如 何 解 决 Reduce 的 负 载 均 衡 是 优 化 MapReduce 的 一 个 重 要 研 究 方 向 本 文 首 先 对 整 体 数 据 进 行 抽 样, 通 过 适 量 的 样 本 分 析 数 据, 达 到 较 小 的 代 价 获 得 可 靠 的 key 分 布 ; 然 后, 提 出 贪 心 算 法 代 替 Hadoop 平 台 默 认 的 hash 算 法 来 划 分 数 据, 实 现 Reduce 负 载 均 衡 本 文 所 提 贪 心 算 法 主 要 思 想 是 根 据 抽 样 数 据, 求 取 所 有 key 频 次 的 和 对 于 Reduce 节 点 数 量 的 平 均 值, 然 后 依 次 为 每 一 个 Reduce 分 配 一 个 接 近 平 均 值 的 负 载, 从 而 达 到 整 体 的 负 载 均 衡 模 拟 实 验 表 明, 本 文 所 提 算 法 与 默 认 的 hash 分 区 算 法 相 比, 运 行 时 间 节 约 10.6%, 达 到 更 好 的 负 载 均 衡 关 键 词 :MapReduce; 贪 心 算 法 ;reduce 负 载 均 衡 ; 抽 样 中 图 分 类 号 :TP311 Greedy algorithm for Reduce load balancing on Hadoop platform Liu Duo, Zeng Feng *, Chen Zhigang, Yao Yitao (School of Software, Central South University, Changsha 410075) AbStract: MapReduce is used wildly as a parallel computing framework. mainly including the Map function and Reduce function. Map function has the output of the key-value pairs. which are the input of the Reduce function. As a result. the input of Reduce is dynamic. The load balancing of Reduce hosts has an important impact on the efficiency of MapReduce. In this paper. firstly. the overall data are sampled. The aim is to obtain reliable key distribution at a cheap price. Then. a greedy algorithm is proposed to divide data to achieve Reduce load balancing. taking the place of hash algorithm. The main idea of the greedy algorithm proposed in this paper is to assign the right job to a Reduce host for the best load balancing in each step. Simulation results show that proposed algorithm has better performance than the other two algorithms. Compared with the default hash partitioning algorithm. the proposed algorithm has the running CPU time decreased by 10.6%. and achieves better load balancing. Key Words: MapReduce; Greedy algorithm; load balancing of Reduce; sampling 0 引 言 大 数 据 的 处 理 目 前 被 广 泛 的 应 用 和 研 究,MapReduce 框 架 是 目 前 应 用 最 为 广 泛 的 并 行 计 算 框 架 [1] Hadoop 是 目 前 应 用 最 为 广 泛 的 一 个 MapReduce 实 现 [2] MapReduce 包 括 Map 函 数 和 Reduce 函 数 Map 函 数 处 理 输 入 的 key/value 键 值 对, 输 出 中 间 值 的 key/value 键 值 对, 作 为 Reduce 的 输 出 Map 处 理 的 数 据 是 静 态 的, 每 一 个 Map 处 理 的 数 据 大 小 是 相 同 的 而 每 一 个 Reduce 处 理 的 数 据 是 动 态 的, 数 据 量 可 能 不 相 同, 因 此, Reduce 负 载 存 在 不 均 衡 性 在 每 个 节 点 的 数 据 处 理 能 力 一 致 的 条 件 下, 任 务 的 执 行 时 间 由 处 理 数 据 量 最 大 的 Reduce 节 点 确 定 因 此 Reduce 的 负 载 均 衡 影 响 MapReduce 的 运 行 效 率 目 前 Hadoop 平 台 中 MapReduce 默 认 使 用 hash 算 法 对 数 据 进 行 划 分 该 算 法 并 没 有 考 虑 到 数 据 中 key 值 的 分 布, 以 及 每 个 key 产 生 的 hash 值 冲 突 情 况 例 如, 具 有 相 同 hash 值 的 key 会 被 分 配 到 同 一 Reduce 节 点, 从 而 导 致 Reduce 负 载 的 不 均 衡 可 见,hash 算 法 存 在 一 定 的 局 限 性, 没 有 考 虑 Reduce 的 负 载 均 衡 本 文 首 先 通 过 抽 样 获 取 key 的 频 次 分 布, 然 后 针 对 抽 样 数 据 提 出 贪 心 算 法 实 现 Reduce 节 点 的 负 载 均 衡 1 相 关 工 作 由 于 MapReduce 默 认 的 hash 算 法 没 有 考 虑 MapReduce 中 间 数 据 的, 从 而 影 响 整 个 MapReduce 的 运 行 效 率 为 解 决 这 个 问 题, 国 内 外 学 者 对 MapReduce 的 数 据 划 分 的 均 衡 性 进 行 了 研 究 文 献 [3] 提 出 了 基 于 虚 拟 分 区 的 负 载 均 衡 算 法 该 算 法 把 整 ---------------------------- 基 金 项 目 : 国 家 自 然 科 学 基 金 资 助 项 目 (61103202); 国 家 教 育 部 博 士 点 基 金 资 助 项 目 (20110162120046); 中 南 大 学 教 师 研 究 基 金 资 助 项 目 (2014JSJJ019) 作 者 简 介 : 刘 朵 (1991-), 男, 湖 南 隆 回 人, 硕 士 研 究 生, 主 要 研 究 方 向 为 大 数 据 ; 曾 锋 (1977-), 男 ( 通 信 作 者 ), 副 教 授, 硕 导, 博 士, 主 要 研 究 方 向 为 无 线 网 络 数 据 挖 掘 云 计 算 软 件 工 程 ; 陈 志 刚 (1964-), 男, 教 授, 博 导, 主 要 研 究 方 向 为 是 计 算 机 网 络 与 分 布 式 系 统 ; 姚 亦 韬 (1992-). 男, 硕 士 研 究 生 ; 主 要 研 究 方 向 为 大 数 据.
个 数 据 虚 拟 划 分 为 n 个 区, 在 map 后, 统 计 每 一 个 区 的 key 的 数 量, 然 后 考 虑 Reduce 负 载 均 衡 为 这 些 区 分 配 一 个 Reduce 节 点 文 献 [4] 假 设 节 点 存 在 不 一 样 的 执 行 能 力, 根 据 节 点 的 执 行 能 力 分 配 Reduce 负 载, 实 现 Reduce 的 负 载 均 衡 文 献 [5] 通 过 抽 样 后, 寻 找 分 位 数 的 方 法 来 确 定 数 据 划 分 文 献 [6] 通 过 数 据 抽 样 后, 将 key 划 分 为 大 负 载 key, 中 负 载 key 和 小 负 载 key, 针 对 不 同 的 key 分 别 做 不 同 的 处 理, 大 负 载 key 划 分 成 多 个 子 key, 然 后 分 配 到 不 同 的 Reduce 节 点 上, 将 中 负 载 key 打 包 后 直 接 分 配 到 Reduce 节 点, 小 负 载 key 直 接 使 用 hash 划 分 文 献 [7] 提 出 了 LAB 算 法 来 划 分 数 据, 用 一 种 启 发 式 的 方 法 把 特 定 的 key 对 应 的 数 据 集 分 配 到 最 适 合 的 Reduce 节 点 上, 然 后 为 下 一 个 key 寻 找 分 配 的 Reduce 节 点, 以 此 类 推, 把 每 个 key 分 适 合 的 节 点 上 文 献 [8] 提 出 了 Cluster 组 合 Cluster 分 割 两 种 算 法 来 对 数 据 进 行 划 分 Cluster 组 合 应 用 倾 斜 度 小 的 中 小 负 载 key, 将 key 按 频 次 排 序 然 后 依 次 划 分 到 Reduce 上,Cluster 分 割 应 用 于 倾 斜 度 大 的 大 负 载 key, 将 大 负 载 key 切 分 成 多 个 子 key, 然 后 依 次 划 分 文 献 [3,4,7] 提 出 的 算 法 都 需 要 在 MapReduce 程 序 运 行 过 程 中 进 行 调 整, 针 对 不 同 的 MapReduce 程 序 往 往 需 要 有 不 同 的 调 度 处 理, 操 作 复 杂 性 高 文 献 [5] 分 位 点 的 key 通 常 需 要 划 分 到 多 个 Reduce 上, 处 理 起 来 比 较 复 杂, 并 且 误 差 较 大 文 献 [6] 对 于 大 中 小 负 载 的 确 认 与 计 算 比 较 复 杂 文 献 [8] 没 有 考 虑 由 于 抽 样 误 差 导 致 未 抽 取 的 key 没 有 分 配 的 情 况 基 于 上 述 研 究 工 作, 本 文 尝 试 完 善 样 本 抽 样 和 Reduce 负 载 均 衡 机 制 首 先 通 过 抽 样 获 取 key 的 分 布, 分 析 抽 样 的 样 本 规 模 和 准 确 度 之 间 的 关 系, 其 次 理 论 分 析 hash 算 法 的 不 足, 提 出 贪 心 算 法 实 现 Reduce 负 载 均 衡, 并 通 过 大 规 模 的 数 据 实 验 验 证 算 法 的 有 效 性 2 算 法 分 析 与 设 计 2.1 问 题 分 析 Hadoop 平 台 中 MapReduce 默 认 的 划 分 数 据 方 法 是 hash 算 法, 根 据 处 理 对 象 的 key 分 配 Reduce 主 机, 如 式 (1) 所 示 num = (key.hashcode() & Integer.MAX_VALUE) % nreducetsk (1) 其 中 num 是 Reduce 编 号,nReduceTsk 是 Reduce 的 数 量 key.hashcode 为 哈 希 码, 使 用 的 是 BKDR 算 法 字 符 串 str 的 hash 码 计 算 如 式 (2) 所 示 n Hash str[ i]* 31( n i) (2) i 0 从 公 式 (1) 和 公 式 (2) 可 以 看 出 使 用 默 认 的 hash 算 法 将 key 划 分 到 Reduce 节 点 上, 完 全 取 决 于 key 的 hash 值, 没 有 考 虑 该 key 的 其 他 信 息, 这 样 会 存 在 以 下 两 种 情 况 而 使 数 据 产 生 倾 斜 a) 使 用 hash 算 法 时, 多 个 key 的 hash 码 对 Reduce 节 点 数 量 取 模 之 后 可 能 具 有 相 同 的 值, 从 而 使 数 据 划 分 集 中 于 某 一 个 Reduce 节 点, 造 成 数 据 不 均 衡 b)hash 算 法 没 有 考 虑 key 的 频 次, 可 能 存 在 一 些 频 次 大 的 key 被 划 分 到 同 一 个 Reduce 节 点, 从 而 造 成 数 据 不 均 衡 如 图 1 所 示, 有 3 个 数 据 节 点,Map 端 输 入 数 据 有 6 个 key 值, 每 个 key 值 的 数 据 量 不 相 等, 但 每 个 数 据 节 点 的 数 据 总 量 是 相 等 的 图 中 的 key 值 K1 的 数 据 量 为 15, 表 示 为 K1:15 计 算 可 得 的 数 据 总 量 为 75 假 设 K1-K6 的 hash 码 分 别 与 1-6 对 应, 则 由 公 式 (1)hash 算 法 分 区 之 后,Reduce 端 输 入 的 数 据 量 将 不 相 等, 出 现 了 较 大 的 数 据 倾 斜, 三 个 Reduce 节 点 的 数 据 量 分 别 为 75,111 和 39 K1:15 K2:21 K4:5 S um: 75 K 1:53 K4:22 S um: 75 K5:20 K6:14 K 1:25 K2:29 K3:6 S um: 75 Map K2 : 77 K5:34 S um: 111 K4:7 K5:5 K6:3 Hash 分 区 K 1:13 K2:27 K6:1 S um: 75 K3:21 K6:18 S um: 39 K4:10 K5:9 K3: 15 源 数 据 中 间 数 据 图 1 中 间 数 据 不 平 衡 示 例 基 于 上 述 分 析,Reduce 数 据 划 分 需 要 考 虑 key 的 聚 集 和 频 次 问 题 本 文 拟 对 数 据 进 行 抽 样, 获 取 每 个 key 的 频 次, 求 取 频 次 对 于 Reduce 节 点 数 量 的 平 均 值, 然 后 依 次 为 每 一 个 Reduce 分 配 一 个 接 近 平 均 值 的 负 载, 从 而 达 到 整 体 的 负 载 均 衡 本 文
改 进 后 的 Hadoop 作 业 运 行 流 程 图 如 图 2 所 示 : sampler map() reduce() mapper Reducer 输 入 partitioner Partition File HDFS 图 2 改 进 后 的 Hadoop 作 业 运 行 流 程 图 图 中 的 阴 影 部 分 是 新 增 加 的 内 容, partioner 方 法 是 采 用 自 定 义 的 方 法 代 替 系 统 默 认 的 方 法 2.2 抽 样 抽 样 [9] 是 从 目 标 数 据 中 抽 取 一 部 分 样 品 单 位, 基 本 要 求 是 保 证 所 抽 取 的 样 品 单 位 对 全 部 样 品 具 有 充 分 的 代 表 性 本 文 算 法 是 针 对 海 量 的 数 据 进 行 分 析, 如 果 对 所 有 的 数 据 进 行 统 计, 花 费 代 价 非 常 大, 因 此 采 用 抽 样 技 术, 获 取 key 的 频 次 本 文 采 用 系 统 抽 样 来 对 总 体 进 行 抽 样 系 统 抽 样 根 据 样 本 容 量, 首 先 确 定 抽 选 间 隔, 然 后 随 机 确 定 起 点, 每 隔 一 定 的 间 隔 抽 取 一 个 单 位 的 一 种 抽 样 方 式, 是 纯 随 机 抽 样 的 变 种 在 系 统 抽 样 中, 将 总 体 从 1~N 连 续 编 号, 抽 样 距 离 K=N/n 式 中 N 为 总 体 单 位 总 数,n 为 样 本 容 量 然 后, 在 1~K 中 抽 一 随 机 数 k1, 作 为 样 本 的 第 一 个 单 位, 接 着 取 k1+k,k1+2k,, 直 至 抽 够 n 个 样 本 为 止 系 统 抽 样 单 位 在 总 体 中 是 均 匀 分 布 的, 且 抽 取 样 本 可 少 于 纯 随 机 抽 样 特 点, 能 够 很 好 的 反 映 总 体 情 况 [10] 从 统 计 学 原 理, 我 们 可 以 发 现 随 着 样 本 的 增 大, 抽 样 的 准 确 度 越 高 设 事 件 A 发 生 的 概 率 为 p, 在 n 次 重 复 实 验 中 事 件 A 发 生 次 数 为 m, 当 n 充 分 大 时 ( 称 之 为 大 样 本 ), 近 似 有 m np ~ N(0,1) np(1 p) 取 置 信 区 间 为 100%, 则 有 m np 3 3 np(1 p) np 3 np(1 p) m np 3 np(1 p) 3 np(1 p) m 3 np(1 p) 1 1 np np np 可 知 误 差 为 3 np(1 p) 1 1 3 np np n 可 见, 随 着 n 的 增 大,m 的 误 差 减 少, 抽 样 的 准 确 度 越 高 2.3 贪 心 算 法 分 析 [11] 贪 心 算 法 每 一 步 使 所 做 的 选 择 都 是 当 前 最 佳 的, 期 望 通 过 局 部 最 优 选 择 来 产 生 出 一 个 全 局 最 优 解 本 文 所 提 贪 心 算 法 主 要 思 想 是 根 据 抽 样 数 据, 求 取 所 有 key 频 次 对 于 Reduce 节 点 数 量 的 平 均 值, 然 后 依 次 为 每 一 个 Reduce 分 配 一 个 接 近 平 均 值 的 负 载, 从 而 达 到 整 体 的 负 载 均 衡 具 体 算 法 如 下 : avg Step 1: 将 key 按 频 次, 从 小 到 大 排 序 Step 2: 计 算 所 有 key 的 频 次 和 对 于 Reduce 数 量 的 均 值 Step 3: 将 频 次 大 于 均 值 avg 的 key 拆 分 分 配 到 1 个 负 载 为 0 的 reduce 节 点 上, 记 录 key 和 Reduce 分 配 的 对 应 关 系, 将 key 的 频 次 减 去 avg 重 复 处 理, 直 到 key 的 频 次 小 于 avg 若 key 的 频 次 不 为 0, 则 将 key 重 新 按 序 插 入 队 列 Step 4: 重 复 Step 3, 将 所 有 的 频 次 大 于 均 值 avg 的 key 处 理 完 毕 Step 5: 选 择 Step 3 没 有 涉 及 的 Reduce 节 点 从 后 至 前 遍 历 队 列, 求 取 key 的 频 次 与 该 节 点 当 前 负 载 的 和, 如 果 该 和 不 超 过 avg, 则 将 该 和 作 为 Reduce 节 点 的 当 前 负 载, 记 录 key 和 分 配 的 Reduce 的 对 应 信 息, 删 除 队 列 该 key 的 信 息 重 复 上 述 操 作, 直 到 遍 历 完 整 个 队 列 Step 6: 重 复 步 骤 5, 均 衡 余 下 Reduce 节 点 的 负 载, 记 录
key 和 分 配 的 Reduce 的 对 应 信 息 Step 7: 对 输 入 的 每 一 个 key, 通 过 步 骤 3 4 5 6 产 生 的 记 录, 返 回 该 key 分 配 的 Reduce 的 编 号 图 2 的 例 子 通 过 贪 心 分 区 算 法 进 行 数 据 划 分 之 后 的 结 果 如 图 3 所 示 可 以 看 出 本 文 所 提 贪 心 分 区 算 法 获 得 较 好 的 Reduce 负 载 均 衡, 优 于 默 认 分 区 算 法 K1:15 K2:21 K4:5 K5:20 K6:14 k2:75 K 1:25 K2:29 K3:6 K4:7 K5:5 K6:3 Map 贪 心 分 区 算 法 K1:53, k4:22 K1:13 K2:27 K5:9 K3:15 K4:10 K6:1 K5:34, k3:21, K6:18, K2:2 源 数 据 中 间 数 据 图 3 中 间 数 据 平 衡 后 示 例 2.4 基 于 贪 心 算 法 的 数 据 划 分 算 法 实 现 通 过 抽 样 统 计 获 得 所 有 key 频 次, 对 于 在 抽 样 过 程 中, 没 有 抽 取 出 的 key, 认 为 是 小 概 率 数 据 不 影 响 Reduce 的 负 载 均 衡 没 有 抽 取 到 的 key, 使 用 hash 分 区 算 法, 划 分 到 对 应 的 Reduce 上 定 义 全 局 变 量 KeyReduce,KeyReduce 存 储 的 是 Key 和 应 该 划 分 的 Reduce 编 号 的 对 应 关 系 当 key.freq>avg 时 记 key 为 大 负 载 key 本 文 设 计 的 一 种 贪 心 数 据 分 区 算 法 的 的 伪 代 码 如 下 : 1 keyreduce GreadyPart() 2 { 3 读 取 PartionFile 文 件 中 的 key 的 频 次, 记 录 到 键 值 对 序 列 KFreq 中 ; 4 SortByFreq(KFreq);.// 将 KFreq 按 照 频 次 从 小 到 大 排 序 5 avgvalue = sum/m;// 求 每 个 reduce 平 均 处 理 的 key 频 次 综 合 6 reduce = 0; 7 // 将 大 于 key 平 均 频 次 的 所 有 key 的 拆 分 8 for(int i=0;i<kfreq.size;i++) 9 { 10 if(kfreq[i].value > avg) 11 { 12 while(kfreq.value > avg) 13 { 14 KeyReduce.Add(key,reduce); 15 KFreq[i].Value -= avgvalue 16 } 17 KFreq.Sort();// 将 改 变 后 的 元 素, 调 整 到 合 适 的 位 置 18 } 19 else 20 { 21 break; 22 } 23 } 24 for(int i=0;i<m;i++) 25 { 26 reducesum = 0;// 每 个 Reduce 分 配 的 key 的 总 和 27 for(int j=kfreq.size()-1;j>=0;j--) 28 { 29 int value = KFreq[j].value; 30 if(avgvalue>=reducesum+value) 31 { 32 reducesum += value; 33 KeyReduce.add(KFreq[j].key, i);
34 KFreq.remove(j); 35 } 36 } 37 } 38 return KeyReduce; 39 } 40 public int getpartition(text key, Text value, int numpartions) 41 { 42 if(kyereduce == null) 43 { 44 GreadyPart(); 45 } 46 if(keyreduce[key]!= null) 47 { 48 return KeyReduce[key].Reduce; 49 } 50 return (key.hashcode()& Integer.MAX_VALUE) % numreducetasks; 51 } 算 法 描 述 : 按 照 key 的 频 次 从 小 到 大 排 序, 求 出 所 有 key 的 频 次 之 和, 计 算 划 分 到 m 个 Reduce 上 的 平 均 值 avg 如 果 某 key 的 频 次 大 于 avg, 则 需 要 将 其 划 分 到 多 个 Reduce 上, 该 key 称 作 大 负 载 key 代 码 8-23 行 是 将 大 负 载 key 划 分 到 不 同 的 Reduce 上, 并 将 key-reduce 的 对 应 关 系 加 入 KeyReduce 中 承 载 了 大 负 载 key 的 Reduce 不 再 划 分 数 据 代 码 24-37 行 是 为 没 有 承 载 大 负 载 key 的 Reduce 节 点 均 衡 负 载 依 次 为 每 一 个 Reduce 节 点 分 配 key 对 于 第 i 个 Reduce 节 点, 选 择 当 前 队 列 中 频 次 最 大 的 key, 如 果 满 足 分 配 该 key 后, 第 i 个 Reduce 节 点 的 负 载 不 大 于 avg, 则 将 key 分 配 到 第 代 码 40-51 行 是 getpartition(), 通 过 该 方 法 返 回 对 应 key 划 分 的 Reduce 的 编 号 代 码 46-49 行, 如 果 key 在 KeyReduce 中 有 对 应 的 Reduce 的 编 号, 直 接 返 回 该 编 号, 否 则 认 为 key 在 抽 样 过 程 中 没 有 抽 到, 是 小 数 据, 不 影 响 负 载 均 衡, 使 用 默 认 的 分 区 算 法 划 分 到 对 应 的 Reduce 节 点 上 如 果 key 为 大 负 载, 在 KeyReduce 中 能 够 找 到 多 个 值, 可 将 该 key 按 照 比 例 分 配 到 各 个 Reduce 节 点 上 3 实 验 结 果 及 分 析 3.1 硬 件 平 台 及 部 署 本 文 的 实 验 集 群 由 7 台 计 算 机 组 成, 每 台 计 算 机 有 2G 内 存,300G 磁 盘 空 间 包 括 1 个 主 节 点 :master.csu 和 6 个 工 作 节 点 :slave1.cus-slave6.csu, 节 点 的 部 署 信 息 如 表 1 所 示 网 络 环 境 : 校 园 内 部 局 域 网, 操 作 系 统 :Centos 6.6,Java 环 境 : JDK1.6,Hadoop 版 本 :Hadoop-1.2.1, 开 发 工 具 :MyEclipse8.6 3.2 实 验 结 果 及 分 析 以 WordCount 为 实 例, 进 行 实 验 分 别 比 较 默 认 的 hash 分 区 算 法, 分 位 数 分 区 算 法 和 贪 心 分 区 算 法 从 运 行 时 间 和 Reduce 的 负 载 均 衡 两 个 角 度 比 较 三 种 算 法 的 优 劣 数 据 从 网 上 随 机 下 载, 分 别 比 较 数 据 集 在 432M,4.32G,8.64G,20G 情 况 下 的 运 行 时 间 以 及 在 数 据 集 在 4.32G 时 各 个 节 点 的 负 载 均 衡 在 数 据 量 比 较 小 的 情 况 下, 如 在 数 据 量 为 400M 左 右 时, 两 种 算 法 的 执 行 时 间 相 当 但 随 着 数 据 量 的 增 大, 使 用 贪 心 分 区 算 法 的 效 率 会 越 来 越 高, 在 数 据 达 到 20G 的 时 候, 与 默 认 的 hash 分 区 算 法 相 比, 贪 心 分 区 算 法 降 低 执 行 时 间 约 10.6%, 实 验 数 据 如 图 4 所 示 在 实 验 数 据 量 为 4.32G 时, 每 个 Reduce 节 点 的 负 载 情 况 如 图 5 所 示, 贪 心 分 区 算 法 的 每 个 Reduce 负 载 基 本 相 同, 而 使 用 默 认 的 hash 分 区 算 法 的 每 个 Reduce 的 负 载 有 较 大 的 数 据 起 伏 分 位 数 数 分 区 算 法 的 均 衡 度 好 于 hash 分 区 算 法, 但 比 贪 心 算 法 差 与 hash 分 区 算 法 和 分 位 数 数 分 区 算 法 相 比, 贪 心 算 法 的 负 载 均 衡 度 提 高 分 别 为 44.4% 和 9.2% 由 此 可 见, 在 均 衡 衡 负 载 和 时 间 效 率 这 两 个 方 面, 贪 心 分 区 算 法 要 优 于 hash 分 区 算 法 i 个 Reduce 节 点 上 直 至 遍 历 完 整 个 队 列 表 1 节 点 部 署 情 况 服 务 器 IP 服 务 器 主 机 名 功 能 192.168.1.120 master.csu 主 节 点 (namenode 和 jobtracker) 192.168.1.121 slave1.csu 从 节 点 1(DataNode 和 TaskTracker) 192.168.1.122 slave2.csu 从 节 点 2(DataNode 和 TaskTracker) 192.168.1.123 slave3.csu 从 节 点 3(DataNode 和 TaskTracker) 192.168.1.124 slave4.csu 从 节 点 4(DataNode 和 TaskTracker) 192.168.1.125 slave5.csu 从 节 点 5(DataNode 和 TaskTracker) 192.168.1.126 slave6.csu 从 节 点 6(DataNode 和 TaskTracker)
2500 2000 1500 1000 500 0 Hash 分 区 算 法 分 位 数 数 据 划 分 算 法 贪 心 分 区 算 法 432MB 2G 4.32G 8.64G 20G 18000000 16000000 14000000 12000000 10000000 80000000 60000000 40000000 20000000 0 Hash 分 区 算 法 分 位 数 分 区 算 法 贪 心 分 区 算 法 图 4 大 小 不 同 的 数 据 集 的 执 行 时 间 比 较 图 5 同 一 数 据 集 (4.32G) 不 同 节 点 上 的 负 载 比 较 4 结 束 语 本 文 主 要 是 对 MapReduce 的 中 间 数 据 平 衡 进 行 研 究 Reduce 函 数 使 用 Map 函 数 产 生 的 中 间 结 果 作 为 输 入 数 据, 是 动 态 的 数 据 MapReduce 默 认 使 用 hash 算 法 来 进 行 数 据 划 分, 每 个 Reduce 节 点 的 负 载 不 平 衡 本 文 通 过 抽 样 获 取 key 的 频 次, 使 用 贪 心 算 法 代 替 hash 算 法, 均 衡 Reduce 的 负 载 无 论 是 理 论 分 析 还 是 实 验 验 证, 均 表 明 贪 心 分 区 算 法 是 一 个 良 好 的 数 据 分 区 算 法 [10] 于 寅, 等. 高 等 工 程 数 学 [M]. 武 汉 : 华 中 科 技 大 学 出 版 社, 2012: 340-355 [11] Cormen T H, LeiserSon C E, et al. 算 法 导 论 [M]. 北 京 : 机 械 工 业 出 版 社, 2006: 222-239 参 考 文 献 : [1] Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[j]. Communications of the ACM, 2008, 51(1): 107-113. [2] White T. Hadoop: the definitive guide: the definitive guide[m]. [S. l. ]: O'Reilly Media, Inc. ", 2009. [3] Fan Y, Wu W, Cao H, et al. LBVP: A load balance algorithm based on Virtual Partition in Hadoop cluster[c]//proc of IEEE Asia Pacific Conference on Cloud Computing Congress. 2012: 37-41. [4] Gao Z, Liu D, Yang Y, et al. A load balance algorithm based on nodes performance in Hadoop cluster[c]//proc of the 16th Asia-Pacific Network Operations and Management Symposium. 2014: 1-4. [5] 韩 蕾, 孙 徐 湛, 吴 志 川, 等. MapReduce 上 基 于 抽 样 的 数 据 划 分 最 优 化 研 究 [J]. 计 算 机 研 究 与 发 展, 2013, S2: 77-84. [6] Ramakrishnan S R, Swart Gt, Urmanov A. Balancing reducer skew in MapReduce workloads using progressive sampling[c] //Proc of the 3rd ACM Symp on Cloud Computing. New York: ACM, 2012 [7] 余 基 映. MapReduce 模 型 的 数 据 分 配 策 略 研 究 [D]. 武 汉 : 华 中 科 技 大 学, 2013. [8] 耿 玉 娇. MapReduce 中 基 于 抽 样 技 术 的 倾 斜 问 题 研 究 [D]. 大 连 : 大 连 海 事 大 学, 2013. [9] 宛 婉, 周 国 祥. Hadoop 平 台 的 海 量 数 据 并 行 随 机 抽 样 [J]. 计 算 机 工 程 与 应 用, 2014, 40(20): 115-118.