*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2019 年秋季学期
云计算技术课程设计
题 目: 基于 Hadoop 平台的《哈姆雷特》词频统计设计
专业班级: 物联网工程 17 级 1 班
姓 名: 周峰冰
学 号: 1616520147
指导教师: 朱昶胜
成 绩:
摘要
Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构。用户可以在不了
解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运
算和存储。Hadoop 实现了一个分布式文件系统,简称 HDFS。HDFS 有高容错性的
特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序
的数据,适合那些有着超大数据集的应用程序。HDFS 放宽了 POSIX 的要求,可
以以流的形式访问文件系统中的数据。Hadoop 的框架最核心的设计就是:HDFS
和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提
供了计算。
关键词:hadoop,MapReduce,云计算,hdfs
I
目录
摘要 ........................................................................................................................................................................... I
一、前言 .................................................................................................................................................................1
二、基本原理 .......................................................................................................................................................2
(一)、hadoop ..........................................................................................................................................2
1、分布性 .....................................................................................................................................................2
2、透明性 .....................................................................................................................................................2
3、同一性 .....................................................................................................................................................2
4、通信性 .....................................................................................................................................................2
(二)、HDFS ...............................................................................................................................................3
1、namenode..............................................................................................................................................4
2、Secondary NameNode ......................................................................................................................4
3、datanode ................................................................................................................................................5
(三)、MapReduce ..................................................................................................................................5
1、MapReduce 概念 .................................................................................................................................5
2、MapReduce 的结构体系 ...................................................................................................................6
(四)、YARN ..............................................................................................................................................7
1、ResourceManager ...............................................................................................................................7
2、NodeManager ......................................................................................................................................7
3、Application Master ..............................................................................................................................8
4、Container................................................................................................................................................8
三、系统分析 .......................................................................................................................................................9
(一)、HDFS-文件存储结构 .................................................................................................................9
1、读数据 .....................................................................................................................................................9
2、写数据 .....................................................................................................................................................9
(二)、MapReduce 过程框图 ...............................................................................................................9
1、Map 和 Reduce ....................................................................................................................................9
2、Shuffle 连接 Map 和 Reduce 阶段 ............................................................................................ 10
(三)、Yarn-虚拟操作系统/资源调度/任务管理........................................................................ 10
1、集群资源的管理 ................................................................................................................................ 10
2、任务调度-三大进程 ......................................................................................................................... 10
四、详细设计 .................................................................................................................................................... 12
(一)、centos 虚拟机搭建 .................................................................................................................. 12
1、准备阶段 ............................................................................................................................................. 12
2、搭建步骤 ............................................................................................................................................. 13
(二)、hadoop 集群搭建 .................................................................................................................... 17
1、准备阶段 ............................................................................................................................................. 17
2、搭建步骤 ............................................................................................................................................. 18
3、服务分配 ............................................................................................................................................. 22
4、配置 ssh 免密登录 ............................................................................................................................ 22
5、启动 hadoop 集群 ............................................................................................................................ 22
(三)、Java 操作 hdfs 文件系统 ....................................................................................................... 23
II
1、maven 配置(基于 idea 编辑器) ............................................................................................. 23
2、编写 java 操作 hdfs 文件的代码 .................................................................................................. 24
(四)、MapReduce 编写词频统计 jar 包 ....................................................................................... 24
1、map 函数 ............................................................................................................................................. 24
2、reduce 函数 ........................................................................................................................................ 25
3、主函数 .................................................................................................................................................. 25
4、导出编写好的 MapReduce jar 包................................................................................................ 25
五、程序测试 .................................................................................................................................................... 26
(一)、上传目标文档 hamlet.txt 到 hdfs ....................................................................................... 26
1、准备文件 ............................................................................................................................................. 26
2、运行编写好的 java 操作 hdfs 文件的代码 ............................................................................... 26
(二)、开始云计算词频统计 ............................................................................................................. 26
1、xshell 命令行执行刚才传到 master.hadoop 上的 wordcount.jar ..................................... 26
2、查看词频统计是否成功 .................................................................................................................. 27
(三)、下载结果文件到 windows 目录 .......................................................................................... 27
1、词频统计成功后 ................................................................................................................................ 27
(四)、验证计算结果 ........................................................................................................................... 28
1、抽查 MapReduce 计算的词频数是否正确 ............................................................................... 28
六、设计总结 .................................................................................................................................................... 29
七、附录(代码程序) .................................................................................................................................. 30
(一)、java 操作 hdfs 文件代码 ....................................................................................................... 30
(二)、MapReduce 代码 ..................................................................................................................... 32
(三)、pom.xml 文件配置代码 ......................................................................................................... 35
八、致谢 .............................................................................................................................................................. 37
九、参考文献 .................................................................................................................................................... 38
III
一、前言
本课程设计要求学生学习 Hadoop 的基本概念如 MapReduce、HDFS 等,搭建 Hadoop
平台进行相应的设计,掌握在 LINUX 下常用命令,并掌握 Hadoop 的基本操作;通过
MapReduce 编程,以哈姆雷特为研究对象,进行词频统计,统计单个或者多个文本文件中
每个词汇出现的次数;了解 Hadoop 分布式文件系统(HDFS)是 hadoop 上部署的存储架
构,熟练应用 Hadoop 对 HDFS 文件进行创建和读写等操作。通过本课程设计,建立起对
Hadoop 云计算的初步了解,最后通过 Hadoop 平台实现结果的显示。
Hadoop 起源于 Apache Nutch 项目,始于 2002 年,是 Apache Lucene 的子项目之一。
2004 年,Google 在“操作系统设计与实现”(Operating System Design and Implementation,
OSDI)会议上公开发表了题为 MapReduce:Simplified Data Processing on Large Clusters
(Mapreduce:简化大规模集群上的数据处理)的论文之后,受到启发的 Doug Cutting 等
人开始尝试实现 MapReduce 计算框架,并将它与 NDFS(Nutch Distributed File System)结
合,用以支持 Nutch 引擎的主要算法。由于 NDFS 和 MapReduce 在 Nutch 引擎中有着良好
的应用,所以它们于 2006 年 2 月被分离出来,成为一套完整而独立的软件,并被命名为
Hadoop。到了 2008 年年初,hadoop 已成为 Apache 的顶级项目,包含众多子项目,被应
用到包括 Yahoo 在内的很多互联网公司。
Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存
储 Hadoop 集群中所有存储节点上的文件。HDFS 的上一层是 MapReduce 引擎,该引擎由
JobTrackers 和 TaskTrackers 组成。通过对 Hadoop 分布式计算平台最核心的分布式文件系
统 HDFS、MapReduce 处理过程,以及数据仓库工具 Hive 和分布式数据库 Hbase 的介绍,
基本涵盖了 Hadoop 分布式平台的所有技术核心。
1
二、基本原理
(一)、hadoop
Hadoop 是一个分布式系统基础框架。
什么是分布式系统?
分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统。也就是
说分布式系统背后是由一系列的计算机组成的,但用户感知不到背后的逻辑,就像访问单个
计算机一样。
一个标准的分布式系统应该具有以下几个主要特征:
1、分布性
分布式系统中的多台计算机之间在空间位置上可以随意分布,系统中的多台计算机之间
没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。
2、透明性
系统资源被所有计算机共享。每台计算机的用户不仅可以使用本机的资源,还可以使用
本分布式系统中其他计算机的资源(包括 CPU、文件、打印机等)。
3、同一性
系统中的若干台计算机可以互相协作来完成一个共同的任务,或者说一个程序可以分布
在几台计算机上并行地运行。
4、通信性
系统中任意两台计算机都可以通过通信来交换信息。
在分布式系统中:
A、应用可以按业务类型拆分成多个应用,再按结构分成接口层、服务层;我们也可以
按访问入口分,如移动端、PC 端等定义不同的接口应用;
B、数据库可以按业务类型拆分成多个实例,还可以对单表进行分库分表;
C、增加分布式缓存、搜索、文件、消息队列、非关系型数据库等中间件;
很明显,分布式系统可以解决集中式不便扩展的弊端,我们可以很方便的在任何一个环
节扩展应用,就算一个应用出现问题也不会影响到别的应用。
2
分布式系统虽好,也带来了系统的复杂性,如分布式事务、分布式锁、分布式 session、
数据一致性等都是现在分布式系统中需要解决的难题,虽然已经有很多成熟的方案,但都不
完美。分布式系统也增加了开发测试运维成本,工作量增加,分布式系统管理不好反而会变
成一种负担。
Hadoop 包含三大核心:HDFS、MapReduce、YARN。
Hadoop 包含四个模块:Hadoop Common、Hadoop DFS、Hadoop MapReduce、Hadoop
YARN。
(二)、HDFS
HDFS 源自于 Google 的 GFS 论文,发表于 2003 年 10 月,HDFS 是 GFS 的克隆版。
HDFS 全称 Hadoop Distributed File System。是一个易于扩展的分布式文件系统,运行
在大量普通廉价机上,提供容错机制,为大量的用户提供性能不错的文件存取服务。
HDFS 设计目标:
A、存储量大
B、自动快速检测应对硬件错误
C、流式访问数据
D、移动计算比移动数据本身更划算
E、简单一致性模型
F、异构平台可移植
HDFS 优点:
A、高可靠性:Hadoop 一般都在成千上万的计算机集群之上,且可以搭建 Hadoop
的高可靠集群,以及内部容错功能优秀。
B、高扩展性:Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这
些集簇可以方便的扩展到数以千计的节点中。
C、高效性:Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平
衡,因此处理数据特别快。
D、高容错性:Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任
务重新分配。
HDFS 缺点:
A、不适合低延迟数据访问
B、无法高效存储大量小文件
C、不支持多用户写入及任意修改文件
HDFS 三个服务:namenode、secondary namenode、datanode。
3
图 2.2.1
1、namenode
Namenode 是一个中心服务器,单一节点,负责管理文件系统的名字空间(namespace)
以及客户端对文件的访问。
Namenode 负责文件元数据的操作,datanode 负责处理文件内容的读写请求,跟文件
内容相关的数据流不经过那么 namenode,只会询问它跟那个 datanode 联系,否则
namenode 会成为系统的瓶颈。
副本存放在哪个 datanode 由 namenode 控制,根据全局情况作出块放置决定,读取文
件时 namenode 尽量让用户读取最近的副本,降低带块消耗和读取时延。
Namenode 全权管理数据块的复制,它周期性地从集群中的每个 datanode 接收心跳信
号和块状态宝报告(blockreport)。接收到心跳信号意味着 DataNode 节点工作正常。块状
态报告包含了一个该 DataNode 上所有数据块的列表。
包含了两个核心的数据结构,FsImage 和 EditLog。
FsImage:用于维护整个文件系统数以及文件树中所有的文件和文件夹的元数据
EditLog:记录了所有针对文件的创建,删除,重命名等操作
2、Secondary NameNode
为主 namenode 内存中的文件系统元数据,创建检查点,在文件系统中设置一个检查点来
4