Hadoop 集 群 ( 第 6 期 ) WordCount 运 行 详 解 1 MapReduce 理 论 简 介 1.1 MapReduce 编 程 模 型 MapReduce 采 用 分 而 治 之 的 思 想, 把 对 大 规 模 数 据 集 的 操 作, 分 发 给 一 个 主 节 点 管

Similar documents
说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

《C语言基础入门》课程教学大纲


第2章 数据类型、常量与变量


<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

I

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

目录 1 本期内容 MapReduce 理论简介 MapReduce 编程模型 MapReduce 处理过程 运行 WordCount 程序 准备工作 运行例子

课程类 别

公 开 刊 物 须 有 国 内 统 一 刊 (CN), 发 表 文 章 的 刊 物 需 要 在 国 家 新 闻 出 版 广 电 总 局 ( 办 事 服 务 便 民 查 询 新 闻 出 版 机 构 查 询 ) 上 能 够 查 到 刊 凡 在 有 中 国 标 准 书 公 开

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

修改版-操作手册.doc

0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

2006年顺德区高中阶段学校招生录取分数线

 编号:

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

教师上报成绩流程图

¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管


18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

深圳市新亚电子制程股份有限公司

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

Microsoft Word - 文件汇编.doc

2014年中央财经大学研究生招生录取工作简报

上海证券交易所会议纪要

国债回购交易业务指引

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

登录、注册功能的测试用例设计.doc

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

名 称 生 命 科 学 学 院 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院

!!

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>

第 一 部 分 MagiCAD for Revit 安 装 流 程

徐天宏:《基因天堂》.doc

抗 日 战 争 研 究 年 第 期

Cybozu Garoon 3 管理员手册

Template BR_Rec_2005.dot

电信系教学大纲的基本规范

西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化? 五 如 何 向 教 师 发 送 通 知? 六

世华财讯模拟操作手册

(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)

<4D F736F F D20D0A3B7A2A1B A1B BAC5B9D8D3DAD7E9D6AFBFAAD5B9C8ABD0A3BDCCD6B0B9A4B8DACEBBC6B8D3C3B1E4B6AFB9A4D7F7B5C4CDA8D6AA2E646F63>

收 入 支 出 项 目 2016 年 预 算 项 目 2016 年 预 算 预 算 01 表 单 位 : 万 元 ( 保 留 两 位 小 数 ) 一 公 共 财 政 预 算 拨 款 一 人 员 经 费 一 般 财 力 人 员 支 出 成 品

第1篇 道路桥梁工程技术核心专业课程标准及学习绩效考评体系

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

抗 日 战 争 研 究 % 年 第 期! # # % %

工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术

2016年南开大学MBA招生信息

中 国 软 科 学 年 第 期!!!

untitled

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

中 日 信 息 化 的 比 较 与 合 作 一 中 日 信 息 化 的 规 模 比 较

在2012年工作会议结束时的讲话

!!!!!

øÕªß∂À≤Ÿ◊˜ ÷≤·

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

中 中 中 中 部 中 岗 位 条 件 历 其 它 历 史 师 地 理 师 生 物 师 体 与 健 康 师 从 事 中 历 史 工 从 事 中 地 理 工 从 事 中 生 物 工 从 事 中 体 与 健 康 工 2. 课 程 与 论 ( 历 史 ); 2. 科 ( 历 史 )

4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,

Microsoft Word - 第3章.doc

思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想

校 级 2 3 年 1 分 /10 万 双 语 示 范 课 程 国 家 级 6 3 年 1 分 /10 万 精 品 教 材 国 家 主 编 2, 副 获 奖 当 年 ( 教 育 部 ) 主 编 1 省 部 级 5 在 研 究 期 间 1 分 /10 万 元 其 它 教 研 课 题 校 级 2 在 研

目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍 系 统 管 理 员 登 陆 班

伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效

<4D F736F F D20CAAEC8FDCEE5B9E6BBAED7EED6D5B8E5352E33312E646F63>

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审

应用化学专业(服装安全与评价、纺织化学方向)

三武一宗灭佛研究

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。

第 四 条 建 设 单 位 对 可 能 产 生 职 业 病 危 害 的 建 设 项 目, 应 当 依 照 本 办 法 向 安 全 生 产 监 督 管 理 部 门 申 请 职 业 卫 生 三 同 时 的 备 案 审 核 审 查 和 竣 工 验 收 建 设 项 目 职 业 卫 生 三 同 时 工 作 可

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

上海证券交易所会议纪要

Microsoft Word - 第7章 图表反转形态.doc

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

国家职业标准:网络课件设计师

全国教师资格认定管理信息系统

工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

& & ( & ) +,! #

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

学 年 第 二 学 期 集 中 考 试 安 排 (18 周 ) 考 试 日 期 :6 月 27 日 星 期 一 8:10-9:50 第 二 公 共 教 学 楼 A 区 A 高 等 数 学 ( 理 二 2) 复 材 材 料 科 学 与 工 程

微软用户

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

年 第 期 % %! & % % % % % % &

上证指数

Transcription:

细 细 品 味 Hadoop Hadoop 集 群 ( 第 6 期 ) 精 华 集 锦 csaxp 虾 皮 工 作 室 http://www.cnblogs.com/xia520pi/ 2012 年 5 月 15 日

Hadoop 集 群 ( 第 6 期 ) WordCount 运 行 详 解 1 MapReduce 理 论 简 介 1.1 MapReduce 编 程 模 型 MapReduce 采 用 分 而 治 之 的 思 想, 把 对 大 规 模 数 据 集 的 操 作, 分 发 给 一 个 主 节 点 管 理 下 的 各 个 分 节 点 共 同 完 成, 然 后 通 过 整 合 各 个 节 点 的 中 间 结 果, 得 到 最 终 结 果 简 单 地 说,MapReduce 就 是 任 务 的 分 解 与 结 果 的 汇 总 在 Hadoop 中, 用 于 执 行 MapReduce 任 务 的 机 器 角 色 有 两 个 : 一 个 是 JobTracker; 另 一 个 是 TaskTracker,JobTracker 是 用 于 调 度 工 作 的,TaskTracker 是 用 于 执 行 工 作 的 一 个 Hadoop 集 群 中 只 有 一 台 JobTracker 在 分 布 式 计 算 中,MapReduce 框 架 负 责 处 理 了 并 行 编 程 中 分 布 式 存 储 工 作 调 度 负 载 均 衡 容 错 均 衡 容 错 处 理 以 及 网 络 通 信 等 复 杂 问 题, 把 处 理 过 程 高 度 抽 象 为 两 个 函 数 : map 和 reduce,map 负 责 把 任 务 分 解 成 多 个 任 务,reduce 负 责 把 分 解 后 多 任 务 处 理 的 结 果 汇 总 起 来 需 要 注 意 的 是, 用 MapReduce 来 处 理 的 数 据 集 ( 或 任 务 ) 必 须 具 备 这 样 的 特 点 : 待 处 理 的 数 据 集 可 以 分 解 成 许 多 小 的 数 据 集, 而 且 每 一 个 小 数 据 集 都 可 以 完 全 并 行 地 进 行 处 理 1.2 MapReduce 处 理 过 程 在 Hadoop 中, 每 个 MapReduce 任 务 都 被 初 始 化 为 一 个 Job, 每 个 Job 又 可 以 分 为 两 种 阶 段 :map 阶 段 和 reduce 阶 段 这 两 个 阶 段 分 别 用 两 个 函 数 表 示, 即 map 函 数 和 reduce 函 数 map 函 数 接 收 一 个 <key,value> 形 式 的 输 入, 然 后 同 样 产 生 一 个 <key,value> 形 式 的 中 间 输 出,Hadoop 函 数 接 收 一 个 如 <key,(list of values)> 形 式 的 输 入, 然 后 对 这 个 value 集 合 进 行 处 理, 每 个 reduce 产 生 0 或 1 个 输 出,reduce 的 输 出 也 是 <key,value> 形 式 的 MapReduce 处 理 大 数 据 集 的 过 程 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 1

2 运 行 WordCount 程 序 单 词 计 数 是 最 简 单 也 是 最 能 体 现 MapReduce 思 想 的 程 序 之 一, 可 以 称 为 MapReduce 版 Hello World, 该 程 序 的 完 整 代 码 可 以 在 Hadoop 安 装 包 的 src/examples 目 录 下 找 到 单 词 计 数 主 要 完 成 功 能 是 : 统 计 一 系 列 文 本 文 件 中 每 个 单 词 出 现 的 次 数, 如 下 图 所 示 2.1 准 备 工 作 现 在 以 hadoop 普 通 用 户 登 录 Master.Hadoop 服 务 器 1) 创 建 本 地 示 例 文 件 首 先 在 /home/hadoop 目 录 下 创 建 文 件 夹 file 接 着 创 建 两 个 文 本 文 件 file1.txt 和 file2.txt, 使 file1.txt 内 容 为 Hello World, 而 file2.txt 的 内 容 为 Hello Hadoop 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 2

2) 在 HDFS 上 创 建 输 入 文 件 夹 3) 上 传 本 地 file 中 文 件 到 集 群 的 input 目 录 下 2.2 运 行 例 子 1) 在 集 群 上 运 行 WordCount 程 序 备 注 : 以 input 作 为 输 入 目 录,output 目 录 作 为 输 出 目 录 已 经 编 译 好 的 WordCount 的 Jar 在 /usr/hadoop 下 面, 就 是 hadoop-examples-1.0.0.jar, 所 以 在 下 面 执 行 命 令 时 记 得 把 路 径 写 全 了, 不 然 会 提 示 找 不 到 该 Jar 包 2)MapReduce 执 行 过 程 显 示 信 息 Hadoop 命 令 会 启 动 一 个 JVM 来 运 行 这 个 MapReduce 程 序, 并 自 动 获 得 Hadoop 的 配 置, 同 时 把 类 的 路 径 ( 及 其 依 赖 关 系 ) 加 入 到 Hadoop 的 库 中 以 上 就 是 Hadoop Job 的 运 行 记 录, 从 这 里 可 以 看 到, 这 个 Job 被 赋 予 了 一 个 ID 号 :job_201202292213_0002, 而 且 得 知 输 入 文 件 有 两 个 (Total input paths to process : 2), 同 时 还 可 以 了 解 map 的 输 入 输 出 记 录 (record 数 及 字 节 数 ), 以 及 reduce 输 入 输 出 记 录 比 如 说, 在 本 例 中,map 的 task 数 量 是 2 个,reduce 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 3

的 task 数 量 是 一 个 map 的 输 入 record 数 是 2 个, 输 出 record 数 是 4 个 等 信 息 2.3 查 看 结 果 1) 查 看 HDFS 上 output 目 录 内 容 从 上 图 中 知 道 生 成 了 三 个 文 件, 我 们 的 结 果 在 part-r-00000 中 2) 查 看 结 果 输 出 文 件 内 容 3 WordCount 源 码 分 析 3.1 特 别 数 据 类 型 介 绍 Hadoop 提 供 了 如 下 内 容 的 数 据 类 型, 这 些 数 据 类 型 都 实 现 了 WritableComparable 接 口, 以 便 用 这 些 类 型 定 义 的 数 据 可 以 被 序 列 化 进 行 网 络 传 输 和 文 件 存 储, 以 及 进 行 大 小 比 较 BooleanWritable: 标 准 布 尔 型 数 值 ByteWritable: 单 字 节 数 值 DoubleWritable: 双 字 节 数 FloatWritable: 浮 点 数 IntWritable: 整 型 数 LongWritable: 长 整 型 数 Text: 使 用 UTF8 格 式 存 储 的 文 本 NullWritable: 当 <key,value> 中 的 key 或 value 为 空 时 使 用 3.2 旧 的 WordCount 分 析 1) 源 代 码 程 序 package org.apache.hadoop.examples; 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 4

import java.io.ioexception; import java.util.iterator; import java.util.stringtokenizer; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.longwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapred.fileinputformat; import org.apache.hadoop.mapred.fileoutputformat; import org.apache.hadoop.mapred.jobclient; import org.apache.hadoop.mapred.jobconf; import org.apache.hadoop.mapred.mapreducebase; import org.apache.hadoop.mapred.mapper; import org.apache.hadoop.mapred.outputcollector; import org.apache.hadoop.mapred.reducer; import org.apache.hadoop.mapred.reporter; import org.apache.hadoop.mapred.textinputformat; import org.apache.hadoop.mapred.textoutputformat; public class WordCount public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> private final static IntWritable one = new IntWritable( 1 ); private Text word = new Text(); public void map(longwritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException String line = value.tostring(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasmoretokens()) word.set(tokenizer.nexttoken()); output.collect(word, one); 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 5

public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> public void reduce(text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException int sum = 0 ; while (values.hasnext()) sum += values.next().get(); output.collect(key, new IntWritable(sum)); public static void main(string[] args) throws Exception JobConf conf = new JobConf(WordCount. class ); conf.setjobname("wordcount" ); conf.setoutputkeyclass(text.class ); conf.setoutputvalueclass(intwritable.class ); conf.setmapperclass(map.class ); conf.setcombinerclass(reduce.class ); conf.setreducerclass(reduce.class ); conf.setinputformat(textinputformat.class ); conf.setoutputformat(textoutputformat.class ); FileInputFormat.setInputPaths(conf, new Path(args[ 0 ])); FileOutputFormat.setOutputPath(conf, new Path(args[ 1 ])); JobClient.runJob(conf); 3) 主 方 法 Main 分 析 public static void main(string[] args) throws Exception JobConf conf = new JobConf(WordCount. class ); conf.setjobname("wordcount" ); 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 6

conf.setoutputkeyclass(text.class ); conf.setoutputvalueclass(intwritable.class ); conf.setmapperclass(map.class ); conf.setcombinerclass(reduce.class ); conf.setreducerclass(reduce.class ); conf.setinputformat(textinputformat.class ); conf.setoutputformat(textoutputformat.class ); FileInputFormat.setInputPaths(conf, new Path(args[ 0 ])); FileOutputFormat.setOutputPath(conf, new Path(args[ 1 ])); JobClient.runJob(conf); 首 先 讲 解 一 下 Job 的 初 始 化 过 程 main 函 数 调 用 Jobconf 类 来 对 MapReduce Job 进 行 初 始 化, 然 后 调 用 setjobname() 方 法 命 名 这 个 Job 对 Job 进 行 合 理 的 命 名 有 助 于 更 快 地 找 到 Job, 以 便 在 JobTracker 和 Tasktracker 的 页 面 中 对 其 进 行 监 视 JobConf conf = new JobConf(WordCount. class ); conf.setjobname("wordcount" ); 接 着 设 置 Job 输 出 结 果 <key,value> 的 中 key 和 value 数 据 类 型, 因 为 结 果 是 < 单 词, 个 数 >, 所 以 key 设 置 为 Text 类 型, 相 当 于 Java 中 String 类 型 Value 设 置 为 IntWritable, 相 当 于 Java 中 的 int 类 型 conf.setoutputkeyclass(text.class ); conf.setoutputvalueclass(intwritable.class ); 然 后 设 置 Job 处 理 的 Map( 拆 分 ) Combiner( 中 间 结 果 合 并 ) 以 及 Reduce( 合 并 ) 的 相 关 处 理 类 这 里 用 Reduce 类 来 进 行 Map 产 生 的 中 间 结 果 合 并, 避 免 给 网 络 数 据 传 输 产 生 压 力 conf.setmapperclass(map.class ); conf.setcombinerclass(reduce.class ); conf.setreducerclass(reduce.class ); 接 着 就 是 调 用 setinputpath() 和 setoutputpath() 设 置 输 入 输 出 路 径 conf.setinputformat(textinputformat.class ); conf.setoutputformat(textoutputformat.class ); 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 7

(1)InputFormat 和 InputSplit InputSplit 是 Hadoop 定 义 的 用 来 传 送 给 每 个 单 独 的 map 的 数 据,InputSplit 存 储 的 并 非 数 据 本 身, 而 是 一 个 分 片 长 度 和 一 个 记 录 数 据 位 置 的 数 组 生 成 InputSplit 的 方 法 可 以 通 过 InputFormat() 来 设 置 当 数 据 传 送 给 map 时,map 会 将 输 入 分 片 传 送 到 InputFormat,InputFormat 则 调 用 方 法 getrecordreader() 生 成 RecordReader,RecordReader 再 通 过 creatkey() creatvalue() 方 法 创 建 可 供 map 处 理 的 <key,value> 对 简 而 言 之,InputFormat() 方 法 是 用 来 生 成 可 供 map 处 理 的 <key,value> 对 的 Hadoop 预 定 义 了 多 种 方 法 将 不 同 类 型 的 输 入 数 据 转 化 为 map 能 够 处 理 的 <key,value> 对, 它 们 都 继 承 自 InputFormat, 分 别 是 : InputFormat ---BaileyBorweinPlouffe.BbpInputFormat ---ComposableInputFormat ---CompositeInputFormat ---DBInputFormat ---DistSum.Machine.AbstractInputFormat ---FileInputFormat ---CombineFileInputFormat ---KeyValueTextInputFormat ---NLineInputFormat ---SequenceFileInputFormat ---TeraInputFormat ---TextInputFormat 其 中 TextInputFormat 是 Hadoop 默 认 的 输 入 方 法, 在 TextInputFormat 中, 每 个 文 件 ( 或 其 一 部 分 ) 都 会 单 独 地 作 为 map 的 输 入, 而 这 个 是 继 承 自 FileInputFormat 的 之 后, 每 行 数 据 都 会 生 成 一 条 记 录, 每 条 记 录 则 表 示 成 <key,value> 形 式 : key 值 是 每 个 数 据 的 记 录 在 数 据 分 片 中 字 节 偏 移 量, 数 据 类 型 是 LongWritable; value 值 是 每 行 的 内 容, 数 据 类 型 是 Text (2)OutputFormat 每 一 种 输 入 格 式 都 有 一 种 输 出 格 式 与 其 对 应 默 认 的 输 出 格 式 是 TextOutputFormat, 这 种 输 出 方 式 与 输 入 类 似, 会 将 每 条 记 录 以 一 行 的 形 式 存 入 文 本 文 件 不 过, 它 的 键 和 值 可 以 是 任 意 形 式 的, 因 为 程 序 内 容 会 调 用 tostring() 方 法 将 键 和 值 转 换 为 String 类 型 再 输 出 3)Map 类 中 map 方 法 分 析 public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> private final static IntWritable one = new IntWritable( 1 ); private Text word = new Text(); 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 8

public void map(longwritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException String line = value.tostring(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasmoretokens()) word.set(tokenizer.nexttoken()); output.collect(word, one); Map 类 继 承 自 MapReduceBase, 并 且 它 实 现 了 Mapper 接 口, 此 接 口 是 一 个 规 范 类 型, 它 有 4 种 形 式 的 参 数, 分 别 用 来 指 定 map 的 输 入 key 值 类 型 输 入 value 值 类 型 输 出 key 值 类 型 和 输 出 value 值 类 型 在 本 例 中, 因 为 使 用 的 是 TextInputFormat, 它 的 输 出 key 值 是 LongWritable 类 型, 输 出 value 值 是 Text 类 型, 所 以 map 的 输 入 类 型 为 <LongWritable,Text> 在 本 例 中 需 要 输 出 <word,1> 这 样 的 形 式, 因 此 输 出 的 key 值 类 型 是 Text, 输 出 的 value 值 类 型 是 IntWritable 实 现 此 接 口 类 还 需 要 实 现 map 方 法,map 方 法 会 具 体 负 责 对 输 入 进 行 操 作, 在 本 例 中, map 方 法 对 输 入 的 行 以 空 格 为 单 位 进 行 切 分, 然 后 使 用 OutputCollect 收 集 输 出 的 <word,1> 4)Reduce 类 中 reduce 方 法 分 析 public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> public void reduce(text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException int sum = 0 ; while (values.hasnext()) sum += values.next().get(); output.collect(key, new IntWritable(sum)); Reduce 类 也 是 继 承 自 MapReduceBase 的, 需 要 实 现 Reducer 接 口 Reduce 类 以 map 的 输 出 作 为 输 入, 因 此 Reduce 的 输 入 类 型 是 <Text,Intwritable> 而 Reduce 的 输 出 是 单 词 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 9

和 它 的 数 目, 因 此, 它 的 输 出 类 型 是 <Text,IntWritable> Reduce 类 也 要 实 现 reduce 方 法, 在 此 方 法 中,reduce 函 数 将 输 入 的 key 值 作 为 输 出 的 key 值, 然 后 将 获 得 多 个 value 值 加 起 来, 作 为 输 出 的 值 3.3 新 的 WordCount 分 析 1) 源 代 码 程 序 package org.apache.hadoop.examples; import java.io.ioexception; import java.util.stringtokenizer; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapreduce.job; import org.apache.hadoop.mapreduce.mapper; import org.apache.hadoop.mapreduce.reducer; import org.apache.hadoop.mapreduce.lib.input.fileinputformat; import org.apache.hadoop.mapreduce.lib.output.fileoutputformat; import org.apache.hadoop.util.genericoptionsparser; public class WordCount public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(object key, Text value, Context context ) throws IOException, InterruptedException StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasmoretokens()) word.set(itr.nexttoken()); context.write(word, one); public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 10

private IntWritable result = new IntWritable(); public void reduce(text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException int sum = 0; for (IntWritable val : values) sum += val.get(); result.set(sum); context.write(key, result); public static void main(string[] args) throws Exception Configuration conf = new Configuration(); String[] otherargs = new GenericOptionsParser(conf, args).getremainingargs(); if (otherargs.length!= 2) System.err.println("Usage: wordcount <in> <out>"); System.exit(2); Job job = new Job(conf, "word count"); job.setjarbyclass(wordcount.class); job.setmapperclass(tokenizermapper.class); job.setcombinerclass(intsumreducer.class); job.setreducerclass(intsumreducer.class); job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true)? 0 : 1); 1)Map 过 程 public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(object key, Text value, Context context ) throws IOException, InterruptedException 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 11

StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasmoretokens()) word.set(itr.nexttoken()); context.write(word, one); Map 过 程 需 要 继 承 org.apache.hadoop.mapreduce 包 中 Mapper 类, 并 重 写 其 map 方 法 通 过 在 map 方 法 中 添 加 两 句 把 key 值 和 value 值 输 出 到 控 制 台 的 代 码, 可 以 发 现 map 方 法 中 value 值 存 储 的 是 文 本 文 件 中 的 一 行 ( 以 回 车 符 为 行 结 束 标 记 ), 而 key 值 为 该 行 的 首 字 母 相 对 于 文 本 文 件 的 首 地 址 的 偏 移 量 然 后 StringTokenizer 类 将 每 一 行 拆 分 成 为 一 个 个 的 单 词, 并 将 <word,1> 作 为 map 方 法 的 结 果 输 出, 其 余 的 工 作 都 交 有 MapReduce 框 架 处 理 2)Reduce 过 程 public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> private IntWritable result = new IntWritable(); public void reduce(text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException int sum = 0; for (IntWritable val : values) sum += val.get(); result.set(sum); context.write(key, result); Reduce 过 程 需 要 继 承 org.apache.hadoop.mapreduce 包 中 Reducer 类, 并 重 写 其 reduce 方 法 Map 过 程 输 出 <key,values> 中 key 为 单 个 单 词, 而 values 是 对 应 单 词 的 计 数 值 所 组 成 的 列 表,Map 的 输 出 就 是 Reduce 的 输 入, 所 以 reduce 方 法 只 要 遍 历 values 并 求 和, 即 可 得 到 某 个 单 词 的 总 次 数 3) 执 行 MapReduce 任 务 public static void main(string[] args) throws Exception Configuration conf = new Configuration(); String[] otherargs = new GenericOptionsParser(conf, args).getremainingargs(); if (otherargs.length!= 2) System.err.println("Usage: wordcount <in> <out>"); 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 12

System.exit(2); Job job = new Job(conf, "word count"); job.setjarbyclass(wordcount.class); job.setmapperclass(tokenizermapper.class); job.setcombinerclass(intsumreducer.class); job.setreducerclass(intsumreducer.class); job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true)? 0 : 1); 在 MapReduce 中, 由 Job 对 象 负 责 管 理 和 运 行 一 个 计 算 任 务, 并 通 过 Job 的 一 些 方 法 对 任 务 的 参 数 进 行 相 关 的 设 置 此 处 设 置 了 使 用 TokenizerMapper 完 成 Map 过 程 中 的 处 理 和 使 用 IntSumReducer 完 成 Combine 和 Reduce 过 程 中 的 处 理 还 设 置 了 Map 过 程 和 Reduce 过 程 的 输 出 类 型 :key 的 类 型 为 Text,value 的 类 型 为 IntWritable 任 务 的 输 出 和 输 入 路 径 则 由 命 令 行 参 数 指 定, 并 由 FileInputFormat 和 FileOutputFormat 分 别 设 定 完 成 相 应 任 务 的 参 数 设 定 后, 即 可 调 用 job.waitforcompletion() 方 法 执 行 任 务 4 WordCount 处 理 过 程 本 节 将 对 WordCount 进 行 更 详 细 的 讲 解 详 细 执 行 步 骤 如 下 : 1) 将 文 件 拆 分 成 splits, 由 于 测 试 用 的 文 件 较 小, 所 以 每 个 文 件 为 一 个 split, 并 将 文 件 按 行 分 割 形 成 <key,value> 对, 如 图 4-1 所 示 这 一 步 由 MapReduce 框 架 自 动 完 成, 其 中 偏 移 量 ( 即 key 值 ) 包 括 了 回 车 所 占 的 字 符 数 (Windows 和 Linux 环 境 会 不 同 ) 图 4-1 分 割 过 程 2) 将 分 割 好 的 <key,value> 对 交 给 用 户 定 义 的 map 方 法 进 行 处 理, 生 成 新 的 <key,value> 对, 如 图 4-2 所 示 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 13

分 割 结 果 <0, Hello World > <12, Bye World > map() map 方 法 输 出 <World,1> <World,1> <0, Hello Hadoop > <13, Bye Hadoop > map() <Hadoop,1> <Hadoop,1> 图 4-2 执 行 map 方 法 3) 得 到 map 方 法 输 出 的 <key,value> 对 后,Mapper 会 将 它 们 按 照 key 值 进 行 排 序, 并 执 行 Combine 过 程, 将 key 至 相 同 value 值 累 加, 得 到 Mapper 的 最 终 输 出 结 果 如 图 4-3 所 示 map 方 法 输 出 排 序 结 果 Combine 输 出 <World,1> <World,1> Map 端 排 序 <World,1> <World,1> Combine 过 程 <World,2> <Hadoop,1> <Hadoop,1> Map 端 排 序 <Hadoop,1> <Hadoop,1> Combine 过 程 <Hadoop,2> 图 4-3 Map 端 排 序 及 Combine 过 程 4)Reducer 先 对 从 Mapper 接 收 的 数 据 进 行 排 序, 再 交 由 用 户 自 定 义 的 reduce 方 法 进 行 处 理, 得 到 新 的 <key,value> 对, 并 作 为 WordCount 的 输 出 结 果, 如 图 4-4 所 示 Combine 输 出 排 序 结 果 Reduce 输 出 <World,2> <Hadoop,2> Reduce 端 排 序 <Bye,list(1,1)> <Hadoop,list(2)> <Hello,list(1,1)> <Word,list(2)> reduce() <Bye,2> <Hadoop,2> <Hello,2> <Word,2> 图 4-4 Reduce 端 排 序 及 输 出 结 果 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 14

5 MapReduce 新 旧 改 变 Hadoop 最 新 版 本 的 MapReduce Release 0.20.0 的 API 包 括 了 一 个 全 新 的 Mapreduce JAVA API, 有 时 候 也 称 为 上 下 文 对 象 新 的 API 类 型 上 不 兼 容 以 前 的 API, 所 以, 以 前 的 应 用 程 序 需 要 重 写 才 能 使 新 的 API 发 挥 其 作 用 新 的 API 和 旧 的 API 之 间 有 下 面 几 个 明 显 的 区 别 新 的 API 倾 向 于 使 用 抽 象 类, 而 不 是 接 口, 因 为 这 更 容 易 扩 展 例 如, 你 可 以 添 加 一 个 方 法 ( 用 默 认 的 实 现 ) 到 一 个 抽 象 类 而 不 需 修 改 类 之 前 的 实 现 方 法 在 新 的 API 中,Mapper 和 Reducer 是 抽 象 类 新 的 API 是 在 org.apache.hadoop.mapreduce 包 ( 和 子 包 ) 中 的 之 前 版 本 的 API 则 是 放 在 org.apache.hadoop.mapred 中 的 新 的 API 广 泛 使 用 context object( 上 下 文 对 象 ), 并 允 许 用 户 代 码 与 MapReduce 系 统 进 行 通 信 例 如,MapContext 基 本 上 充 当 着 JobConf 的 OutputCollector 和 Reporter 的 角 色 新 的 API 同 时 支 持 " 推 " 和 " 拉 " 式 的 迭 代 在 这 两 个 新 老 API 中, 键 / 值 记 录 对 被 推 mapper 中, 但 除 此 之 外, 新 的 API 允 许 把 记 录 从 map() 方 法 中 拉 出, 这 也 适 用 于 reducer " 拉 " 式 的 一 个 有 用 的 例 子 是 分 批 处 理 记 录, 而 不 是 一 个 接 一 个 新 的 API 统 一 了 配 置 旧 的 API 有 一 个 特 殊 的 JobConf 对 象 用 于 作 业 配 置, 这 是 一 个 对 于 Hadoop 通 常 的 Configuration 对 象 的 扩 展 在 新 的 API 中, 这 种 区 别 没 有 了, 所 以 作 业 配 置 通 过 Configuration 来 完 成 作 业 控 制 的 执 行 由 Job 类 来 负 责, 而 不 是 JobClient, 它 在 新 的 API 中 已 经 荡 然 无 存 河 北 工 业 大 学 软 件 工 程 与 理 论 实 验 室 编 辑 : 虾 皮 15

编 者 简 介 基 本 信 息 姓 名 : 解 耀 伟 性 别 : 男 笔 名 : 虾 皮 民 族 : 汉 学 历 : 研 究 生 专 业 : 计 算 机 应 用 技 术 电 子 信 箱 : xieyaowei1986@163.com 学 校 : 河 北 工 业 大 学 (211 工 程 ) 求 职 意 向 希 望 在 IT 行 业 从 事 软 件 研 发 等 工 作 编 程 语 言 Java C# C ExtJS Flex 汇 编 PHP VB, 熟 练 程 度 由 左 到 右 逐 级 减 弱 个 人 经 历 大 学 期 间 1) 担 任 职 务 : 学 生 会 生 活 部 部 长 生 活 委 员 团 支 书 2) 获 得 奖 项 : 二 等 奖 学 金 (2 次 ) 三 好 学 生 (1 次 ) 研 究 生 期 间 1) 担 任 职 务 : 班 长 2) 获 得 奖 项 : 优 秀 班 干 部 (1 次 ) 工 作 经 历 实 验 室 项 目 : 国 家 863 计 划 项 目 1 项 ; 国 家 技 术 基 础 专 项 2 项 ; 河 北 省 技 术 专 项 1 项 研 究 生 课 题 : 基 于 Hadoop 分 布 式 搜 索 引 擎 研 究 个 人 评 价 性 格 开 朗, 善 于 与 人 沟 通, 上 进 心 强, 品 德 优 秀, 吃 苦 耐 劳, 喜 欢 团 队 合 作, 能 积 极 服 从 上 级 的 安 排 寄 言 相 信 您 的 信 任 与 我 的 能 力 将 为 我 们 带 来 共 同 的 成 功

参 考 文 献 感 谢 以 下 文 章 的 编 写 作 者, 没 有 你 们 的 铺 路, 我 或 许 会 走 得 很 艰 难, 参 考 不 分 先 后, 贡 献 同 等 珍 贵 1 Hadoop 实 战 陆 嘉 恒 机 械 工 业 出 版 社 2 实 战 Hadoop 刘 鹏 电 子 工 业 出 版 社 3 Hadoop 上 运 行 WordCount 以 及 本 地 调 试 地 址 :http://www.beoop.com/archives/244.html 4 命 令 行 运 行 hadoop 实 例 wordcount 程 序 地 址 :http://blog.csdn.net/xw13106209/article/details/6862480 5 Hadoop 示 例 程 序 WordCount 运 行 及 详 解 地 址 :http://samuschen.iteye.com/blog/763940 6 Hadoop 的 安 装 与 配 置 及 示 例 wordcount 的 运 行 地 址 :http://wenku.baidu.com/view/41eac9d850e2524de5187ef3.html