第 42 卷 第 1 期 2016 年 1 月 北 京 工 业 大 学 学 报 JOURNAL OF BEIJING UNIVERSITY OF TECHNOLOGY Vol. 42 No. 1 Jan. 2016 SQL 鄄 DFS: 一 种 基 于 HDFS 的 海 量 小 文 件 存 储 系 统 马 志 强, 杨 双 涛, 闫 瑞, 张 泽 广 ( 内 蒙 古 工 业 大 学 信 息 工 程 学 院, 呼 和 浩 特 010080) 摘 要 : 针 对 Hadoop 分 布 式 文 件 系 统 (Hadoop distributed file system,hdfs) 进 行 小 文 件 存 储 时 NameNode 内 存 占 用 率 高 的 问 题, 通 过 分 析 HDFS 基 础 架 构, 提 出 了 基 于 元 数 据 存 储 集 群 的 SQL 鄄 DFS 文 件 系 统. 通 过 在 NameNode 中 加 入 小 文 件 处 理 模 块 实 现 了 小 文 件 元 数 据 由 NameNode 内 存 到 元 数 据 存 储 集 群 的 迁 移, 借 助 关 系 数 据 库 集 群 实 现 了 小 文 件 元 数 据 的 快 速 读 写, 并 对 小 文 件 读 取 过 程 进 行 优 化, 减 少 了 文 件 客 户 端 对 NameNode 的 请 求 次 数 ; 通 过 将 部 分 DataNode 文 件 块 的 校 验 工 作 交 由 元 数 据 存 储 集 群 完 成, 进 一 步 降 低 了 NameNode 节 点 的 负 载 压 力. 最 终 通 过 搭 建 HDFS 和 SQL 鄄 DFS 实 验 平 台, 对 HDFS 和 SQL 鄄 DFS 2 种 架 构 进 行 了 小 文 件 读 写 的 对 比 测 试, 实 验 结 果 表 明 :SQL 鄄 DFS 在 文 件 平 均 耗 时 (file average cost,fac) 和 内 存 占 用 率 方 面 均 明 显 优 于 原 HDFS 架 构, 具 有 更 好 的 小 文 件 存 储 能 力, 可 用 于 海 量 小 文 件 的 存 储. 关 键 词 : Hadoop 分 布 式 文 件 系 统 (HDFS); 元 数 据 存 储 集 群 ; 小 文 件 ; 元 数 据 ; 内 存 占 用 率 中 图 分 类 号 : TP 391 文 献 标 志 码 : A 文 章 编 号 : 0254-0037(2016)01-0134 - 08 doi: 10. 11936 / bjutxb2015060040 SQL 鄄 DFS: A Massive Small File Storage System Based on HDFS MA Zhiqiang, YANG Shuangtao, YAN Rui, ZHANG Zeguang ( School of Information Engineering, Inner Mongolia University of Technology, Hohhot 010080, China) Abstract: In order to solve the problem of high occupancy rate of NameNode memory while using Hadoop distributed file system ( HDFS) to store massive small files, this paper analyzed the HDFS storage structure and presented a SQL 鄄 DFS file system based on metadata storage cluster. In SQL 鄄 DFS, in order to move small file metadata from NameNode memory to metadata storage cluster a small file processing module was added in NameNode. In order to improve the reading and writing speed of the metadata, relational database cluster was used, and in order to reduce the time of request for NameNode the reading process of the small file was optimized. To further reduce the load pressure of NameNode, the checking of file block from DataNode was completed by metadata storage cluster. Finally the contrast experiments were carried out between HDFS and SQL 鄄 DFS experimental platform. The experimental results show that SQL 鄄 DFS in the file average cost (FAC) and memory occupancy rate are significantly better than that of the original HDFS architecture and has better small file storage capacity. It can be used for the storage of massive small files. Key words: Hadoop distributed file system ( HDFS); metadata storage clusters; small files; metadata; memory occupancy Hadoop [1] 在 云 计 算 领 域 内 的 广 泛 使 用, 使 得 其 已 经 成 为 海 量 数 据 并 行 处 理 的 标 准. Hadoop 分 布 收 稿 日 期 : 2015 鄄 06 鄄 12 基 金 项 目 : 国 家 自 然 科 学 基 金 资 助 项 目 (61363052); 内 蒙 古 自 治 区 自 然 科 学 基 金 资 助 项 目 (2014MS0608); 内 蒙 古 自 治 区 高 等 学 校 科 学 研 究 项 目 (NJZY12052) 作 者 简 介 : 马 志 强 (1972 ), 男, 副 教 授, 主 要 从 事 机 器 学 习 数 据 挖 掘 搜 索 引 擎 方 面 的 研 究, E 鄄 mail: mzq_bim@ 163. com
第 1 期 马 志 强, 等 : SQL 鄄 DFS: 一 种 基 于 HDFS 的 海 量 小 文 件 存 储 系 统 135 式 文 件 系 统 ( Hadoop distributed file system,hdfs) 作 为 Hadoop 的 关 键 技 术 之 一, 其 原 型 来 自 于 谷 歌 公 司 (Google) 的 GFS 文 件 系 统, 可 用 于 构 建 大 规 模 可 扩 展 高 容 错 的 分 布 式 存 储 平 台. HDFS 开 源 的 特 性 允 许 用 户 根 据 自 身 的 业 务 需 求 对 HDFS 进 行 开 发 和 扩 展, 使 得 其 在 雅 虎 ( Yahoo) 百 度 阿 里 巴 巴 FaceBook 及 Twitter 等 公 司 内 得 到 广 泛 应 用. HDFS 在 设 计 之 初 目 的 就 是 为 了 解 决 大 文 件 的 存 储 与 处 理, 取 得 的 结 果 也 令 人 满 意. 然 而 在 实 际 的 应 用 系 统 中 存 在 着 大 量 的 小 文 件, 直 接 采 用 HDFS 进 行 存 储 存 在 以 下 问 题 : 加 载 小 文 件 的 元 数 据 信 息 需 要 占 用 NameNode 节 点 的 大 量 内 存 ; 用 户 在 读 取 大 量 小 文 件 时 需 要 频 繁 地 访 问 NameNode, 严 重 影 响 NameNode 节 点 的 IO 性 能. 为 解 决 上 述 问 题, 本 文 提 出 了 一 种 基 于 关 系 数 据 库 集 群 的 海 量 小 文 件 存 储 方 案, 通 过 将 集 群 内 小 文 件 的 元 数 据 文 件 转 化 成 数 据 库 记 录 存 储 到 数 据 库 集 群 中, 可 以 很 大 程 度 减 少 NameNode 节 点 上 元 数 据 文 件 大 小, 降 低 节 点 的 内 存 使 用 率, 并 且 通 过 采 用 数 据 库 主 从 复 制 读 写 分 离 技 术, 实 现 元 数 据 存 储 集 群 请 求 的 负 载 均 衡, 缩 短 小 文 件 元 数 据 记 录 的 查 询 时 间, 进 一 步 提 高 小 文 件 的 读 写 效 率. 1 相 关 工 作 1 郾 1 HDFS 文 件 系 统 HDFS 分 布 式 文 件 系 统 采 用 Master / Slave 架 构, 集 群 内 通 常 由 一 个 名 称 节 点 ( NameNode) 和 多 个 数 据 节 点 ( DataNode ) 组 成, 主 要 包 括 3 个 部 分 : NameNode DataNode 和 客 户 端, 具 体 如 图 1 所 示. 其 中 NameNode 是 整 个 分 布 式 文 件 系 统 的 管 理 者, 主 要 负 责 管 理 文 件 系 统 的 命 名 空 间 集 群 配 置 信 息 文 件 元 数 据 信 息 和 文 件 块 的 复 制 工 作. DataNode 负 责 存 储 文 件 块 以 及 文 件 块 的 元 数 据 信 息, 并 定 期 向 NameNode 发 送 心 跳 和 块 报 告. 客 户 端 则 封 装 了 文 [2 鄄 件 的 基 本 操 作, 是 用 户 访 问 集 群 文 件 的 接 口 3]. HDFS 这 种 主 从 式 的 设 计 很 大 程 度 上 简 化 了 分 布 式 文 件 系 统 的 结 构, 用 户 在 读 写 文 件 时 无 需 经 过 NameNode, 直 接 与 DataNode 通 信 即 可, 并 且 集 群 内 采 用 流 式 文 件 读 写, 在 大 文 件 的 存 储 及 处 理 上 表 现 出 优 越 的 性 能. 然 而 也 是 这 种 架 构 设 计 导 致 了 HDFS 对 海 量 小 文 件 存 储 支 持 不 足. 首 先 HDFS 集 群 在 运 行 期 间, 所 有 文 件 的 元 数 据 都 保 存 在 NameNode 的 内 存 中, 即 使 元 数 据 的 存 储 结 构 十 分 紧 凑, 但 海 量 小 文 件 的 元 数 据 信 息 仍 占 用 大 量 的 Fig. 1 图 1 HDFS 架 构 Architecture of HDFS NameNode 内 存, 导 致 了 NameNode 节 点 内 存 占 用 率 高 的 问 题. 其 次 客 户 端 在 读 取 大 量 小 文 件 时 需 要 频 繁 地 访 问 NameNode 节 点, 以 获 取 文 件 的 元 数 据 信 息, 严 重 影 响 NameNode 节 点 的 IO 性 能. 而 且 DateNode 节 点 文 件 块 报 告 的 检 测 同 样 需 要 占 用 NameNode 节 点 资 源. 因 此,HDFS 集 群 内 海 量 小 文 件 的 存 在 给 HDFS 的 可 扩 展 性 和 性 能 带 来 一 定 负 面 影 响. 1 郾 2 小 文 件 解 决 方 案 目 前 针 对 HDFS 小 文 件 存 储 效 率 低 的 问 题, 研 究 的 总 体 思 路 是 将 小 文 件 合 并 为 大 文 件, 减 少 文 件 的 个 数, 从 而 降 低 NameNode 节 点 的 内 存 占 用 率, 同 时 利 用 索 引 和 缓 存 技 术 提 高 文 件 的 读 取 速 率. 主 要 研 究 方 法 分 为 基 于 HAR SequenceFile 与 MapFile 技 术 的 小 文 件 合 并 和 基 于 数 据 库 技 术 的 小 文 件 合 并 2 类. 1) 基 于 HAR SequenceFile 和 MapFile 的 小 文 件 合 并 方 法 [4] Mackey 等 最 早 采 用 Hadoop Archive 技 术 实 现 将 小 文 件 合 并 为 大 文 件, 有 效 地 降 低 了 HDFS 中 小 文 件 的 数 量, 然 而 Hadoop Archive 不 支 持 文 件 删 除 修 改 和 追 加, 当 发 生 文 件 更 改 时 需 要 重 新 创 建 归 档 文 件, 然 而 创 建 归 档 文 件 的 过 程 需 要 占 用 大 量 的 机 器 资 源, 频 繁 地 创 建 归 档 文 件 将 严 重 影 响 集 群 系 [5] 统 的 性 能. 赵 晓 永 等 将 SequenceFile 技 术 应 用 到 了 海 量 MP3 音 频 文 件 的 存 储, 很 好 地 解 决 了 小 文 件 过 多 时 NameNode 的 内 存 瓶 颈 问 题, 提 高 了 MP3 文 [6] 件 的 访 问 效 率 ; 刘 高 军 等 利 用 Redis 缓 存 和 SequenceFile 技 术 实 现 了 HDFS 中 小 文 件 的 快 速 合 并 存 储, 并 通 过 缓 存 保 证 了 小 文 件 的 读 写 效 率 ; 余 思 [7] 等 采 用 SequenceFile 技 术 将 小 文 件 以 队 列 的 形 式 合 并 为 大 文 件, 从 而 实 现 了 节 省 NameNode 节 点 所 占 内 存 空 间 的 目 的, 同 时 也 实 现 了 对 合 并 之 后 的 小
136 北 京 工 业 大 学 学 报 2016 年 [8] 文 件 的 透 明 操 作. 洪 旭 升 等 通 过 将 序 列 化 后 的 小 文 件 存 储 至 MapFile 容 器, 对 小 文 件 进 行 合 并, 并 通 过 建 立 索 引, 有 效 降 低 了 文 件 总 数 量 和 提 高 了 文 件 的 访 问 效 率. 上 述 方 案 主 要 思 路 是 通 过 将 小 文 件 合 并 成 大 文 件 同 时 对 小 文 件 索 引, 然 后 再 将 合 并 的 大 文 件 存 储 到 HDFS 中, 通 过 这 种 合 并 的 方 式 能 够 很 大 程 度 地 减 少 NameNode 节 点 上 元 数 据 文 件 的 大 小, 有 效 降 低 NameNode 的 内 存 使 用 率, 但 难 以 满 足 低 延 迟 要 求, 即 使 借 助 索 引 缓 存 技 术 文 件 随 机 读 写 性 能 仍 无 法 让 人 满 意. 2) 基 于 数 据 库 的 小 文 件 合 并 [9] 张 海 等 提 出 了 一 种 基 于 关 系 数 据 库 的 小 文 件 合 并 策 略, 通 过 append 操 作 将 小 文 件 内 容 按 用 户 追 加 到 用 户 文 件 中, 利 用 关 系 数 据 库 记 录 小 文 件 在 用 户 文 件 中 的 位 置, 再 通 过 seek 操 作 实 现 小 文 件 的 读 取. 但 目 前 HDFS 对 append 和 seek 操 作 支 持 不 [10] 足. 刘 小 俊 等 将 小 文 件 首 先 集 中 存 储 到 关 系 库, 当 数 据 库 文 件 达 到 一 定 大 小 再 将 数 据 库 文 件 转 存 至 HDFS, 而 当 用 户 读 取 文 件 时, 根 据 用 户 的 请 求 信 息 RDBMS 将 动 态 地 加 载 数 据 库 文 件, 然 后 根 据 文 件 的 位 置 信 息 再 读 取 文 件. 上 述 2 种 解 决 方 案 都 是 借 用 传 统 的 关 系 数 据 库 去 解 决 小 文 件 的 存 储 问 题, 其 本 [11] 质 上 还 是 文 件 合 并 的 过 程. 朱 晓 丽 等 利 用 新 兴 的 列 式 数 据 库 HBase 进 行 海 量 图 片 的 存 储, 实 现 了 系 统 层 对 图 片 的 合 并 全 局 命 名, 并 通 过 对 HFile 的 Key 鄄 Value 字 节 数 组 结 构 的 完 善, 实 现 了 图 片 读 取 时 的 自 动 纠 错, 提 高 了 系 统 可 靠 性, 然 而 基 于 HBase 存 储 支 持 的 文 件 大 小 范 围 极 其 有 限. 基 于 上 述 研 究 基 础, 本 文 跳 出 小 文 件 合 并 的 思 [12 鄄 13] 路, 提 出 一 种 基 于 关 系 数 据 库 集 群 的 海 量 小 文 件 存 储 方 案. 通 过 在 HDFS 中 加 入 小 文 件 处 理 模 块, 对 集 群 内 的 大 小 文 件 区 分 处 理, 小 文 件 写 入 时 产 生 的 元 数 据 信 息 转 化 成 记 录 存 储 到 元 数 据 存 储 集 群, 避 免 了 NameNode 节 点 需 要 加 载 维 持 大 量 的 小 文 件 元 数 据 文 件, 同 时 利 用 主 从 复 制 读 写 分 离 技 术 构 建 高 效 的 元 数 据 存 储 集 群 进 一 步 提 高 了 元 数 据 记 录 的 查 询 速 率, 使 得 小 文 件 的 读 写 速 率 得 到 了 提 升. 2 SQL 鄄 DFS 文 件 系 统 SQL 鄄 DFS 文 件 系 统 模 型 的 核 心 思 想 : 通 过 将 小 文 件 的 元 数 据 信 息 由 NameNode 内 存 迁 移 到 元 数 据 存 储 集 群, 从 而 降 低 NameNode 节 点 的 内 存 消 耗 ; 通 过 优 化 小 文 件 读 取 过 程, 减 少 文 件 客 户 端 对 NameNode 节 点 的 访 问 次 数 ; 通 过 将 DataNode 块 报 告 校 验 工 作 转 移 到 元 数 据 存 储 集 群, 降 低 NameNode 节 点 的 负 载 压 力 ; 通 过 建 立 元 数 据 存 储 集 群 实 现 对 小 文 件 元 数 据 记 录 的 快 速 查 询, 提 高 小 文 件 的 读 写 效 率. 2 郾 1 SQL 鄄 DFS 系 统 模 型 SQL 鄄 DFS 的 整 体 架 构 设 计 如 图 2 所 示, 与 HDFS 架 构 相 比 在 NameNode 节 点 上 新 增 加 了 小 文 件 处 理 模 块, 整 个 集 群 附 加 了 一 个 关 系 数 据 库 集 群. SQL 鄄 DFS 包 括 如 下 4 个 部 分 : 客 户 端 NameNode 元 数 据 存 储 集 群 和 DataNode. 客 户 端 与 NameNode DataNode 以 及 元 数 据 存 储 集 群 进 行 通 信 来 访 问 SQL 鄄 DFS 文 件 系 统. 客 户 端 与 NameNode 通 信 可 访 问 集 群 内 的 元 数 据 信 息, 图 2 Fig. 2 SQL 鄄 DFS 文 件 系 统 架 构 Architecture of SQL 鄄 DFS
第 1 期 马 志 强, 等 : SQL 鄄 DFS: 一 种 基 于 HDFS 的 海 量 小 文 件 存 储 系 统 137 SQL 鄄 DFS 中 对 文 件 的 读 取 和 查 找 操 作 进 行 了 如 下 优 化 : 当 用 户 进 行 文 件 读 取 和 查 找 时, 如 果 通 过 文 件 类 型 判 定 客 户 端 请 求 的 文 件 为 小 文 件, 本 次 元 数 据 请 求 将 不 再 经 过 NameNode, 直 接 查 询 元 数 据 存 储 集 群, 从 而 减 少 了 客 户 端 对 NameNode 的 请 求 次 数, 减 轻 了 NameNode 的 负 载 压 力. 在 得 到 文 件 元 数 据 信 息 的 前 提 下, 客 户 端 与 DataNode 通 信 完 成 文 件 的 读 写. NameNode 仍 是 整 个 文 件 系 统 的 决 策 者 和 全 部 元 数 据 的 持 有 者, 只 是 将 元 数 据 由 内 存 转 存 到 了 元 数 据 存 储 集 群, 元 数 据 转 存 的 工 作 是 由 新 增 的 小 文 件 处 理 模 块 完 成 的. 小 文 件 处 理 模 块 的 处 理 过 程 如 下 : 1) 根 据 配 置 文 件 中 的 文 件 块 大 小 设 置, 对 用 户 写 入 的 文 件 进 行 大 小 性 质 的 判 断, 即 是 否 属 于 小 文 件 ; 2) 小 文 件 写 入 时, 接 收 NameNode 返 回 的 元 数 据 信 息 并 返 回 到 客 户 端, 待 文 件 上 传 完 成 后 将 元 数 据 信 息 同 步 到 元 数 据 存 储 集 群 ; 3) 文 件 读 取 时, 如 果 读 取 的 文 件 是 小 文 件, 则 向 元 数 据 存 储 集 群 中 的 元 数 据 管 理 模 块 请 求 元 数 据 信 息, 并 返 回 到 客 户 端 ; 4) 接 收 来 自 DataNode 的 心 跳 和 块 报 告, 将 其 中 小 文 件 相 关 的 部 分 转 发 的 元 数 据 存 储 集 群 的 元 数 据 管 理 模 块 进 行 下 一 步 处 理. 关 系 数 据 库 集 群 主 要 负 责 存 储 小 文 件 的 元 数 据 记 录, 通 过 配 置 文 件 可 以 指 定 不 同 类 型 的 关 系 型 数 据 库. 元 数 据 存 储 集 群 通 过 元 数 据 管 理 模 块 向 上 层 提 供 元 数 据 访 问 服 务, 具 体 处 理 过 程 为 : 1) 接 收 来 自 客 户 端 的 元 数 据 查 询 请 求 ; 2) 接 收 NameNode 的 元 数 据 记 录 同 步 请 求 ; 3) 接 收 来 自 NameNode 的 部 分 块 报 告, 与 数 据 库 集 群 中 的 记 录 匹 配 对 比, 并 将 结 果 返 回 到 NameNode. 2 郾 2 元 数 据 存 储 集 群 元 数 据 存 储 集 群 的 架 构 设 计 如 图 3 所 示, 主 要 存 储 小 文 件 信 息 小 文 件 与 Block 的 对 应 关 系 和 Block 与 DataNode 节 点 的 对 应 关 系. 集 群 通 过 元 数 据 管 理 模 块 将 数 据 库 接 口 提 供 给 客 户 端 和 NameNode, 接 收 二 者 的 访 问 请 求. 在 接 收 到 访 问 请 求 后, 根 据 数 据 库 语 句 的 关 键 字 判 断 该 访 问 请 求 是 读 操 作 还 是 写 操 作. 如 果 是 读 操 作, 则 将 该 请 求 分 发 到 相 对 空 闲 的 从 数 据 库 处 理 ; 如 果 是 写 操 作, 则 该 请 求 只 能 由 主 数 据 库 处 理, 而 且 必 须 以 事 务 方 式 进 行, 主 数 据 库 在 完 成 请 求 后 对 从 数 据 库 进 行 [14 鄄 同 步 15]. 图 3 关 系 数 据 库 集 群 Fig. 3 Relational database cluster 2 郾 3 SQL 鄄 DFS 文 件 操 作 在 改 进 后 的 HDFS 架 构 中, 提 供 了 对 文 件 全 面 的 操 作 支 持, 如 文 件 上 传 下 载 查 找 删 除 等 常 规 操 作. 以 文 件 上 传 和 文 件 下 载 过 程 为 例, 分 步 骤 对 改 进 后 的 HDFS 工 作 流 程 进 行 详 细 说 明. 2 郾 3 郾 1 写 文 件 操 作 客 户 端 在 写 入 文 件 时,NameNode 首 先 根 据 文 件 大 小 对 写 入 的 文 件 进 行 判 断, 如 果 写 入 的 文 件 属 于 小 文 件, 则 执 行 图 4 中 的 A B C D E 和 F 步 骤. 否 则, 将 执 行 A G H D 和 I 步 骤. 各 个 步 骤 如 下 : 步 骤 A 文 件 写 入 请 求 由 文 件 判 别 模 块 进 行 判 别 处 理, 如 果 文 件 大 小 小 于 配 置 文 件 中 设 定 的 文 件 阈 值, 则 判 定 该 文 件 为 小 文 件, 否 则 判 定 为 普 通 文 件. 步 骤 B 将 小 文 件 转 交 由 小 文 件 存 储 模 块 进 行 存 储,NameNode 节 点 将 为 该 文 件 分 配 空 间. 步 骤 C 小 文 件 存 储 模 块 元 数 据 信 息 返 回 到 客 户 端, 完 成 文 件 写 入 的 准 备 工 作. 步 骤 D 客 户 端 根 据 元 数 据 信 息 将 文 件 写 入 到 指 定 的 DataNode. 步 骤 E 客 户 端 返 回 文 件 写 入 确 认 信 息. 步 骤 F 小 文 件 存 储 模 块 将 小 文 件 信 息 元 数 据 信 息 数 据 写 入 到 数 据 库 集 群. 步 骤 G 普 通 文 件 由 通 用 文 件 存 储 模 块 进 行 存 储,NameNode 节 点 将 为 该 文 件 分 配 空 间, 并 将 产 生 的 元 数 据 信 息 写 入 到 元 数 据 文 件. 步 骤 H 通 用 文 件 存 储 模 块 将 元 数 据 信 息 返 回 到 客 户 端, 完 成 文 件 写 入 的 准 备 工 作. 步 骤 I 客 户 端 返 回 文 件 写 入 确 认 信 息. 2 郾 3 郾 2 读 文 件 操 作 文 件 读 取 时,NameNode 首 先 根 据 请 求 信 息 对 该 请 求 进 行 判 断, 如 果 请 求 的 文 件 属 于 小 文 件, 则 执 行
138 2016 年 北 京 工 业 大 学 学 报 分别搭建了原 HDFS 文件系统和 SQL鄄DFS 文件系 统,并将 2 种文件系统中的文件块大小均设置为 64 MB,副本数为 3,硬件配置情况如表 1 所示. 实验所 需的测试文件由程序生成得到,总数为 500 000 个, 文件 的 大 小 在 1 KB ~ 5 MB 之 间, 文 件 总 大 小 为 150郾 68 GB,文件平均大小为 316 KB. 表 1 实验环境配置 Table 1 Experimental environment configuration 图 4 文件写入过程 服务器 数量 软件版本 Web 服务器 1 Centos 6郾 5,JDK1郾 6,Tomcat 7郾 0郾 55 图 5 中 A B C D 和 E 步骤,否则将执行 A F G 和 Mysql 集群 3 Centos 6郾 5,JDK1郾 6,MySql 5郾 5郾 16 Fig. 4 Small file writing process E 步骤. 各个步骤解释如下: 步骤 A 文件读取请求信息交由文件判别模块 进行判别处理,如果文件大小小于配置文件中设定 的文件阈值,则判定该文件为小文件,否则判定为普 通文件. 步骤 B 小文件存储模块接收文件请求信息, 解析得到小文件的相关信息. 步骤 C 从数据库集群查询得到小文件的元数 据信息. 步骤 D 将小文件元数据信息返回到客户端. Hadoop 集群 8 在上述环境中本文共进行了 3 组实验,分别是: 文件写入实验 文件读取实验以及空闲时内存占用 对比实验,并在每组实验内分别进行 5 次不同文件 数量下的实验,文件数量依次为:100 000 200 000 300 000 400 000 和 500 000,文件均从测试文件中随 机抽取得到. 本文将文件平均耗时( file average cost,fac) 和 空闲时 NameNode 内存占用率指标作为实验的评价 标准,其中文件平均耗时具体定义为 步骤 E 客户端根据名称节点返回的元数据记 录到指定的数据节点上读取文件. 步骤 F 将文件请求信息转发到常规文件处理 Centos 6郾 5,JDK1郾 6,Hadoop鄄2郾 2郾 0 FAC = sum t i / sum 移 i =1 (1) 式中:sum 为测试文件的总个数;t i 为完成第 i 个文 模块进行处理. 件处理所用时间. FAC 代表集群对小文件处理操作 录,并返回到客户端. 能力 越 好. 而 空 闲 时 NameNode 内 存 占 用 率 通 过 步骤 G 从名称节点内存中查询得到元数据记 的平均用时,FAC 值越小说明集群对小文件的处理 free 命令即可得到,由于 NameNode 机器仅安装运行 HDFS 和 SQL鄄DFS,所以本指标可直接说明 2 种平 台下的内存占用情况. 3郾 2 文件写入实验 在文件写入实验中分别将不同数量的文件写入 到 HDFS 和 SQL鄄DFS 文件系统中上传,并测得完成 写入所需的总时间,表 2 中给出了实验测得的具体 数据. 表 2 不同平台下文件的写入耗时 图 5 小文件读取过程 Fig. 5 Small file reading process 3 实验设计与结果分析 3郾 1 实验环境与评价指标 为了验证 SQL鄄DFS 文件系统模型的性能,本文 Table 2 Writing time of the file on different platforms 文件数量 / 个 HDFS / s SQL鄄DFS / s 200 000 24 904 26 742 100 000 300 000 400 000 500 000 12 214 46 746 75 231 109 034 13 231 39 324 54 342 70 115
第 1 期 马 志 强, 等 : SQL 鄄 DFS: 一 种 基 于 HDFS 的 海 量 小 文 件 存 储 系 统 139 将 表 2 中 的 实 验 结 果, 按 照 式 (1) 处 理 可 得 到 不 同 数 量 的 文 件 写 入 时 的 FAC 值, 将 文 件 数 量 作 为 横 轴,FAC 作 为 纵 轴, 便 可 得 到 不 同 平 台 上 传 文 件 时 随 着 文 件 数 量 的 增 加 FAC 的 变 化 情 况, 如 图 6 所 示. 测 得 读 取 全 部 文 件 所 需 的 总 时 间, 表 3 给 出 了 实 验 测 得 的 具 体 数 据. 其 中 HAR 列 指 的 是 对 HDFS 中 的 文 件 执 行 归 档 命 令 以 后 再 进 行 文 件 读 取 的 耗 时. 表 3 不 同 平 台 下 文 件 的 读 取 耗 时 Table 3 Reading time of the file on different platforms 文 件 数 量 / 个 HDFS / s HAR / s SQL 鄄 DFS / s 100 000 4 082 5 141 2 066 200 000 8 766 11 212 4 402 300 000 10 272 17 869 6 906 400 000 20 964 30 174 9 580 500 000 29 055 43 042 12 890 图 6 小 文 件 写 入 平 均 耗 时 Fig. 6 Average time cost of the small file while writing on different platforms 表 2 表 明 随 着 写 入 文 件 数 量 的 增 多,HDFS 上 传 同 样 数 量 的 小 文 件 所 需 时 间 明 显 要 多 于 SQL 鄄 DFS,HDFS 耗 时 增 长 更 显 著. 通 过 图 6 同 样 可 以 发 现 在 SQL 鄄 DFS 中 随 着 上 传 文 件 数 量 的 增 加,FAC 值 变 化 极 为 平 缓, 增 速 远 低 于 HDFS, 说 明 在 SQL 鄄 DFS 中 新 写 入 的 文 件 对 集 群 性 能 不 会 产 生 明 显 的 负 面 影 响, 而 在 HDFS 中, 新 写 入 的 小 文 件 对 集 群 性 能 产 生 了 明 显 的 负 面 影 响, 如 当 文 件 达 到 50 万 时, SQL 鄄 DFS 的 FAC 为 0 郾 140 23 s, 而 HDFS 的 FAC 已 达 0 郾 218 07 s, 高 出 SQL 鄄 DFS 0 郾 077 8 s. SQL 鄄 DFS 架 构 设 计 在 文 件 数 量 少 的 情 况 下, 文 件 写 入 性 能 并 没 有 提 高, 相 比 原 HDFS 架 构 反 而 耗 时 更 多, 这 是 由 于 改 进 后 的 架 构 中 加 入 了 小 文 件 判 别 模 块, 需 要 对 用 户 上 传 的 文 件 进 行 统 一 判 别, 但 随 着 上 传 文 件 数 量 的 增 多,SQL 鄄 DFS 架 构 表 现 出 更 好 的 性 能, 这 是 因 为 原 HDFS 的 架 构 设 计 需 要 在 NameNode 节 点 的 内 存 中 加 载 并 维 持 文 件 的 元 数 据 信 息, 随 着 文 件 的 增 多 元 数 据 占 据 消 耗 更 多 的 内 存 空 间, 使 得 系 统 整 体 性 能 下 降. 而 在 SQL 鄄 DFS 中, NameNode 节 点 的 内 存 占 用 几 乎 没 有 变 化, 所 有 的 元 数 据 信 息 都 转 化 成 表 记 录 存 储 到 了 数 据 库 集 群 内. 当 上 传 的 小 文 件 约 240 000 个 时,SQL 鄄 DFS 架 构 在 文 件 写 入 时 的 表 现 已 经 优 于 原 HDFS 架 构, 此 时 原 HDFS 架 构 中 元 数 据 文 件 大 小 为 206 郾 7 MB, 而 SQL 鄄 DFS 架 构 中 元 数 据 文 件 大 小 为 32 郾 5 MB. 3 郾 3 文 件 读 取 实 验 在 文 件 读 取 实 验 中, 分 别 从 HDFS HDFS 鄄 HAR 以 及 SQL 鄄 DFS 文 件 系 统 中 读 取 不 同 数 量 的 文 件, 并 将 表 3 中 的 实 验 结 果, 按 照 式 (1) 处 理 可 得 到 不 同 数 量 文 件 读 取 时 的 FAC 值, 将 文 件 数 量 作 为 横 轴,FAC 作 为 纵 轴, 便 可 得 到 不 同 平 台 读 取 文 件 时 随 着 文 件 数 量 的 增 加 FAC 值 的 变 化 情 况, 如 图 7 所 示. 图 7 小 文 件 读 取 平 均 耗 时 Fig. 7 Average time cost of the small file while reading on different platforms 通 过 图 7 可 以 发 现,SQL 鄄 DFS 在 文 件 读 取 方 面 性 能 有 了 显 著 的 提 高, 用 时 明 显 低 于 同 等 文 件 数 量 下 的 HDFS 以 及 归 档 操 作 后 的 HDFS. 归 档 操 作 后 的 HDFS 虽 然 节 省 了 NameNode 节 点 内 存, 但 由 于 需 要 读 取 2 层 索 引 文 件 导 致 其 在 文 件 读 取 性 能 上 表 现 是 最 差 的. 在 图 7 中,SQL 鄄 DFS 的 FAC 变 化 最 为 平 缓, 测 试 文 件 数 量 由 100 000 增 加 到 500 000,FAC 值 仅 增 加 0 郾 005 1 s,fac 均 值 约 为 0 郾 023 1 s, 相 比 HDFS 均 值 (0 郾 048 6 s) 降 低 了 0 郾 025 5 s, 比 HDFS 鄄 HAR 均 值 (0 郾 065 9 s) 低 了 0 郾 042 8 s. 3 郾 4 空 闲 时 内 存 占 用 对 比 实 验 每 次 实 验 后, 通 过 执 行 free 命 令 查 看 到 系 统 的 内 存 占 用 率 情 况, 具 体 如 图 8 所 示. 通 过 图 8 可 以 发 现,SQL 鄄 DFS 在 NameNode 内 存 消 耗 上 表 现 也 是 最 好 的, 当 文 件 数 目 达 到 了 500 000 时, 原 HDFS 中 NameNode 节 点 内 存 使 用 率
140 北 京 工 业 大 学 学 报 2016 年 图 8 NameNode 节 点 内 存 使 用 情 况 Fig. 8 Usage of NameNode node memory 达 33 郾 4%, 而 SQL 鄄 DFS 中 NameNode 节 点 内 存 使 用 率 仅 有 12 郾 5%. 3 郾 5 普 通 文 件 与 大 文 件 读 写 对 比 实 验 为 了 验 证 SQL 鄄 DFS 在 存 储 普 通 文 件 与 大 文 件 时 的 性 能, 在 实 验 平 台 上 进 行 了 SQL 鄄 DFS 与 HDFS 文 件 系 统 的 对 比 实 验, 分 别 为 文 件 写 入 实 验 和 文 件 读 取 实 验. 其 中 实 验 数 据 为 50 个 视 频 文 件, 文 件 总 大 小 为 62 郾 65 GB, 文 件 平 均 大 小 为 1 郾 253 GB, 过 程 同 小 文 件 对 比 实 验 过 程 一 致. 由 表 4 可 知, 当 普 通 文 件 与 大 文 件 写 入 时,SQL 鄄 DFS 上 传 同 等 数 量 的 文 件 所 需 时 间 比 原 HDFS 文 件 系 统 耗 时 要 多, 二 者 的 差 值 仅 占 总 上 传 时 间 的 2% 左 右, 这 是 由 于 SQL 鄄 DFS 文 件 系 统 上 传 普 通 文 件 时, 所 有 上 传 文 件 需 要 统 一 经 由 文 件 判 别 模 块 进 行 文 件 大 小 的 判 定, 从 而 导 致 了 耗 时 差 值. 表 4 不 同 平 台 下 普 通 文 件 的 写 入 耗 时 Table 4 Writing time of the ordinary file on different platforms 数 量 大 小 / GB HDFS / s SQL 鄄 DFS / s 耗 时 差 值 / s 10 11 郾 47 344 郾 83 352 郾 65 7 郾 82 20 26 郾 54 759 郾 09 774 郾 56 15 郾 47 30 37 郾 90 1 142 郾 80 1 165 郾 86 23 郾 06 40 51 郾 26 1 557 郾 11 1 586 郾 23 29 郾 12 50 62 郾 65 1 918 郾 03 1 952 郾 90 34 郾 87 将 表 4 中 的 实 验 结 果, 按 照 式 (1) 处 理 可 得 到 不 同 数 量 的 文 件 读 取 时 的 FAC 值, 将 文 件 数 量 作 为 横 轴,FAC 作 为 纵 轴, 便 可 得 到 不 同 平 台 写 入 普 通 文 件 时 随 着 文 件 数 量 的 增 加 FAC 的 变 化 情 况, 如 图 9 所 示. 由 图 9 可 知, 文 件 数 量 的 增 多 及 文 件 系 统 中 文 件 块 的 增 多, 导 致 SQL 鄄 DFS 和 HDFS 写 入 普 通 文 件 图 9 普 通 文 件 写 入 平 均 耗 时 Fig. 9 Average time cost of the ordinary file while writing on different platforms 的 平 均 耗 时 均 有 所 增 加, 增 加 速 度 都 极 为 平 缓, 并 且 二 者 的 差 值 极 小, 说 明 SQL 鄄 DFS 文 件 系 统 中 的 文 件 判 别 模 块 对 普 通 文 件 以 及 大 文 件 的 写 入 带 来 了 极 小 的 负 面 影 响, 可 忽 略 不 计. 在 普 通 文 件 以 及 大 文 件 读 取 时, 文 件 判 别 模 块 带 来 了 同 样 的 负 面 影 响, 在 读 取 实 验 的 结 果 中 也 得 到 了 验 证, 本 文 不 另 作 陈 述. 4 结 论 1) 通 过 在 HDFS 的 NameNode 中 加 入 小 文 件 处 理 模 块, 将 HDFS 中 部 分 DataNode 文 件 块 的 校 验 工 作 交 由 元 数 据 存 储 集 群 完 成, 给 出 了 一 种 基 于 元 数 据 存 储 集 群 的 SQL 鄄 DFS 文 件 系 统, 实 现 了 海 量 小 文 件 的 快 速 读 写. 2) 构 建 了 SQL 鄄 DFS 文 件 系 统, 并 与 HDFS 系 统 进 行 了 多 组 对 比 实 验, 实 验 结 果 表 明 :SQL 鄄 DFS 文 件 系 统 在 小 文 件 的 读 写 性 能 上 表 现 均 优 于 HDFS, 可 以 用 于 海 量 小 文 件 的 存 储. 参 考 文 献 : [1] Apache. Welcome to apache hadoop[eb / OL]. (2010 鄄 02 鄄 27)[2015 鄄 04 鄄 12]. http: 椅 hadoop. apache. org. [2] BORTHAKUR D. The hadoop distributed file system: architecture and design [ J ]. Hadoop Project Website, 2007, 11(11): 1 鄄 10. [3] SHVACHKO K, KUANG H, RADIA S, et al. The hadoop distributed file system [ C] 椅 Mass Storage Systems and Technologies ( MSST), 2010 IEEE 26th Symposium on. Incline Village: IEEE, 2010: 1 鄄 10. [4] MACKEY G, SEHRISH S, WANG J. Improving metadata management for small files in HDFS [ C ] 椅 Cluster Computing and Workshops, 2009. CLUSTER 蒺 09. IEEE International Conference on. New Orleans: IEEE, 2009: 1 鄄 4. [5] 赵 晓 永, 杨 扬, 孙 莉 莉, 等. 基 于 Hadoop 的 海 量 MP3 文 件 存 储 架 构 研 究 [ J]. 计 算 机 应 用, 2012, 32 (6): 1724 鄄 1726.
第 1 期 马 志 强, 等 : SQL 鄄 DFS: 一 种 基 于 HDFS 的 海 量 小 文 件 存 储 系 统 141 ZHAO X Y, YANG Y, SUN L L, et al. Hadoop 鄄 based storage architecture for mass MP3 files [ J ]. Journal of Computer Applications, 2012, 32 (6): 1724 鄄 1726. ( in Chinese) [6] 刘 高 军, 王 帝 澳. 基 于 Redis 的 海 量 小 文 件 分 布 式 存 储 方 法 研 究 [J]. 计 算 机 工 程 与 科 学, 2013, 35(10): 58 鄄 64. LIU G J, WANG D A. Research of Redis based distributed storage method for massive small file [ J ]. Computer Engineering & Science, 2013, 35(10): 58 鄄 64. ( in Chinese) [7] 余 思, 桂 小 林, 黄 汝 维, 等. 一 种 提 高 云 存 储 中 小 文 件 存 储 效 率 的 方 案 [ J]. 西 安 交 通 大 学 学 报, 2011, 45 (6): 59 鄄 63. YU S, GUI X L, HUANG R W, et al. Improving the storage efficiency of small files in cloud storage [ J ]. Journal of Xi 蒺 an Jiaotong University, 2011, 45 (6): 59 鄄 63. (in Chinese) [8] 洪 旭 升, 林 世 平. 基 于 MapFile 的 HDFS 小 文 件 存 储 效 率 问 题 [ J]. 计 算 机 系 统 应 用, 2012, 21 (11): 179 鄄 182. HONG X S, LIN S P. Efficiency of storaging small files in HDFS based on MapFile [ J ]. Computer Systems & Applications, 2012, 21(11): 179 鄄 182. (in Chinese) [9] 张 海, 马 建 红. 基 于 HDFS 的 小 文 件 存 储 与 读 取 优 化 策 略 [J]. 计 算 机 系 统 应 用, 2014, 23(5): 167 鄄 171. ZHANG H, MA J H. Optimizational strategy of small files stored and readed on HDFS [ J ]. Computer Systems & Applications, 2014, 23(5): 167 鄄 171. (in Chinese) [10] 刘 小 俊, 徐 正 全, 潘 少 明. 一 种 结 合 RDBMS 和 Hadoop 的 海 量 小 文 件 存 储 方 法 [ J]. 武 汉 大 学 学 报 ( 信 息 科 学 版 ), 2013, 38(1): 113 鄄 115. LIU X J, XU Z Q, PAN S M. A massive small file storage solution combination of RDBMS and hadoop[ J]. Geomatics and Information Science of Wuhan University, 2013, 38(1): 113 鄄 115. (in Chinese) [11] 朱 晓 丽, 赵 志 刚. 一 种 基 于 HBase 的 海 量 图 片 存 储 技 术 [J]. 信 息 系 统 工 程, 2013 (8): 22 鄄 24. ZHU X L, ZHAO Z G. A massive image storage technology based on HBase [ J ]. Information System Engineering, 2013 (8): 22 鄄 24. (in Chinese) [12] MONTANER H, SILLA F, FR 魻 NING H, et al. A new degree of freedom for memory allocation in clusters[ J]. Cluster Computing, 2012, 15(2): 101 鄄 123. [13] 谷 震 离. 关 系 数 据 库 查 询 优 化 方 法 研 究 [ J]. 微 计 算 机 信 息, 2006 (15): 162 鄄 164. GU Z L. Research on optimization method for queries in relational database [ J ]. Control & Automation, 2006 (15): 162 鄄 164. (in Chinese) [14] AKAL F, B 魻 HM K, SCHEK H J. OLAP query evaluation in a database cluster: a performance study on intra 鄄 query parallelism[ C] 椅 Advances in Databases and Information Systems. Berlin: Springer, 2002: 218 鄄 231. [15] CATTELL R. Scalable SQL and NoSQL data stores[ J]. Acm Sigmod Record, 2011, 39(4): 12 鄄 27. ( 责 任 编 辑 吕 小 红 )