Hadoop云计算平台实验可行性研究报告.docx

上传人:b****8 文档编号:9435883 上传时间:2023-02-04 格式:DOCX 页数:32 大小:3.89MB
下载 相关 举报
Hadoop云计算平台实验可行性研究报告.docx_第1页
第1页 / 共32页
Hadoop云计算平台实验可行性研究报告.docx_第2页
第2页 / 共32页
Hadoop云计算平台实验可行性研究报告.docx_第3页
第3页 / 共32页
Hadoop云计算平台实验可行性研究报告.docx_第4页
第4页 / 共32页
Hadoop云计算平台实验可行性研究报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

Hadoop云计算平台实验可行性研究报告.docx

《Hadoop云计算平台实验可行性研究报告.docx》由会员分享,可在线阅读,更多相关《Hadoop云计算平台实验可行性研究报告.docx(32页珍藏版)》请在冰豆网上搜索。

Hadoop云计算平台实验可行性研究报告.docx

Hadoop云计算平台实验可行性研究报告

 

Hadoop云计算平台实验可行性研究报告

 

 

1实验目标

1.掌握Hadoop安装过程

2.理解Hadoop工作原理

3.测试Hadoop系统的可扩展性

4.测试Hadoop系统的稳定性

5.测试Hadoop系统的可靠性

2实验原理

2.1Hadoop工作原理

Hadoop是Apache开源组织的一个分布式计算框架,可以在大量廉价的硬件设备组成集群上运行应用程序,为应用程序提供一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。

Hadoop框架中最核心的设计就是:

MapReduce和HDFS。

MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。

HDFS是Hadoop分布式文件系统(HadoopDistributedFileSystem)的缩写,为分布式计算、存储提供了底层支持。

HDFS采用C/S架构,对外部客户机而言,HDFS就像一个传统的分级文件系统。

可以对文件执行创建、删除、重命名或者移动等操作。

HDFS中有三种角色:

客户端、NameNode和DataNode。

HDFS的结构示意图见图1。

NameNode是一个中心服务器,存放着文件的元数据信息,它负责管理文件系统的名字空间以及客户端对文件的访问。

DataNode节点负责管理它所在节点上的存储。

NameNode对外暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。

从内部看,文件被分成一个或多个数据块,这些块存储在一组DataNode上,HDFS通过块的划分降低了文件存储的粒度,通过多副本技术和数据校验技术提高了数据的高可靠性。

NameNode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。

它也负责确定数据块到具体DataNode节点的映射。

DataNode负责存放数据块和处理文件系统客户端的读写请求。

在NameNode的统一调度下进行数据块的创建、删除和复制。

图1HDFS体系结构示意图

客户端要访问一个文件,首先从NameNode获得组成文件的数据块的位置列表;然后直接与相应的DataNode建立连接并读取文件数据。

数据流不经过NameNode节点。

Hadoop通过MapReduce进行海量数据处理,它是一个并行处理大规模数据的软件框架。

MapReduce的设计思想基于“移动计算靠近存储”,在面向海量数据处理的技术中,通过网络将数据传输到用于计算的节点所消耗的开销远大于处理数据所需要的开销,而MapReduce将数据的处理任务交给了存储该数据的节点,避免了数据传输所带来的开销。

MapReduce的根源是函数性变成种的map和reduce函数,它由两个包含多个实例(许多的Map和Reduce)的操作组成。

Map函数接收一组数据并将其转换成一个键/值对列表,输入域中的每个元素对应于一个键/值对。

Reduce函数接收Map函数生成列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。

MapReduce的数据处理流程示意图如图2所示:

MapReduce也采用C/S架构,其中JobTracker负责作业调度,TaskTracker负责任务执行。

用户提交基于MapReduce变成规范的作业之后,JobTracker根据作业的输入数据的分布情况(在HDFS之中),将Map任务指派到存储这些数据块的DataNode上执行(DataNode也充当了TaskTracker),Map完成之后会根据用户提交的Reduce任务数对中间结果进行分区存储在Map任务节点本地的磁盘,执行Reduce任务的节点(由JobTracker指派)通过轮询的方式从各Map节点拉取Reduce的输入数据,并在Reduce任务节点的内存进行排序后进行合并作为reduce函数的输入,输出结果又输出到HDFS中进行存储。

图2MapReduce数据处理流程示意图

除了HDFS和MapReduce这两个核心子项目之外,Hadoop还包括Hbase和Hive以及Pig、ZooKeeper、Avro、Chukwa等项目。

其中Hbase是一个分布式的基于列(列族)存储的数据库,它使用HDFS作为底层存储,同时支持MapReduce的批量是计算和点查询。

Hive一个分布式的数据仓库,使用HDFS进行数据存储,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用于查询数据。

2.2实验设计

本实验主要是针对Hadoop系统的可扩展性、稳定性、可靠性,其中主要针对HDFS进行测试,最后给出MapReduce的一个词频统计的实例。

2.2.1可扩展性

Hadoop系统支持系统的动态扩容,只需要修改修改各节点的slaves文件,将需要添加的数据或计算节点加入进来,或者删掉需要注销的数据或计算节点即可,只要新加入的节点已经成功配置了Hadoop,那么就可以通过启动新的节点来实现动态扩容;对于删除节点,跟添加节点类似,将slave配置信息中删除该节点,然后在停掉该节点的数据服务即可。

有的时候,需要向集群中增加新的机器时又不能重启集群。

我们可以采用下面的过程来实现Hadoop系统的动态扩展而不用重启集群。

1.把新机器的增加到conf/slaves文件中(Datanode或者Tasktracker则可跳过)

2.在新机器上进入hadoop安装目录

$bin/hadoop-daemon.shstartdatanode

$bin/hadoop-daemon.shstarttasktracker

3.在Master即Namenode上执行如下指令,实现系统负载的平衡:

对于要删除某一个节点,我们可以执行如下过程,而不需重启服务器:

1.从conf/slaves文件中移除该节点

2.在待移除节点上执行如下指令

$bin/hadoop-daemon.shstopdatanode

$bin/hadoop-daemon.shstoptasktracker

3.在Master即Namenode上执行如下指令,实现系统负载的平衡:

$bin/hadoopbalancer

2.2.2稳定性

Hadoop系统架构在通用商用机上,HDFS的设计思想将普通硬件故障视为常态,个别机器的故障不影响系统的正常运行。

通过将足够大文件上传到HDFS上,使文件散布到多个节点上,然后通过人为切断某一台机器的网络,如果系统还能正常提供服务,则说明系统是稳定的,因为本系统只有3个数据节点,副本数设定为2,所以只能切断一台服务器来验证系统的稳定性。

当系统规模足够大的时候,文件散布的更加分散,可以允许更多的机器故障。

2.2.3可靠性

因为Hadoop的文件系统采用了多副本技术保证了数据的可靠性,如果发生了副本损害或者副本丢失,用户仍然可以通过其他副本进行数据访问和数据操作,

从而保证数据的可靠性。

HDFS的NameNode有一个后台进程进行文件块的扫描,如果当前某一个数据块的副本数低于系统设定的安全阈值,那么NameNode就会启动相关进程,完成副本的复制,直到副本数达到安全阈值的要求。

可以通过分析数据分布,或者通过MapReduce进行词频统计来验证数据的可靠性。

3实验过程

3.1实验环境

设计Hadoop实验平台之前,在考虑一般用户或者中小企业不可能购买和安置大量服务器的情况下,要学习Hadoop的最佳方式就是通过虚拟平台来仿真云计算系统分布式运行的工作模式。

在虚拟技术支持下,只需要一台够强力的计算机,然后在其上运行VirtualBox、Xen或者VMware之类的虚拟软件,依照计算机本身的能力,虚拟出3-5台Linux操作系统,每一个虚拟操作系统上都运行Hadoop系统,就可以完成一个小型的Hadoop实验平台。

考虑到实验室的计算机的硬件配置不高以及实验室作为公共实验环境,计算机都安装了Windows操作系统的实际情况,我们只能通过在每台计算机上安装虚拟软件,通过虚拟软件安装虚拟的linux操作系统,然后在操作系统中安装Hadoop系统,通过各个虚拟linux操作系统的互连,完成Hadoop实验平台的搭建。

Hadoop实验平台配置方式如图3所示:

图3Hadoop实验平台配置方式

Hadoop当前的运行平台为Linux,至于Win32平台则还在开发阶段,尚不成熟,因此,在Windows物理机上通过虚拟软件采用Ubuntu散布套件来安装Linux,然后将Hadoop构建与Linux平台之上,是一种最简单的方式,各个虚拟Linux系统上都必须装有如下软件:

●UbuntuLinux操作系统

●Hadoop云计算系统

●Java6开发环境

由于各个物理机均采用同构的方式进行安装,所以只需要安装一台虚拟机,然后将虚拟机文件拷贝到其他机器上,进入linux虚拟系统,修改相关配置信息即可。

3.1.1安装Linux操作系统

首先需要Ubuntu操作系统的ISO镜像,可以去Ubuntu的官方网站下载:

http:

//www.ubuntu.org.我们下载的是Ubuntu10.1032bitDesktop版。

启动WMware软件,点击“File”菜单,选择“CreateaNewVirtualMachine”菜单项,弹出NewVirtualMachineWinzard对话框如下图所示:

选择“Installerdiscimagefile(iso)”选项,通过“Browser”安装选中需要使用的Ubuntu操作系统的ISO文件(也可以通过Ubuntu的安装光盘进行安装,此略)。

单击“next”,出现用户名及密码设定对话框,如下图所示:

在文本输入框中分别输入用户名以及用户密码等,点击“next”,出现配置节点名以及虚拟机系统在本地磁盘的存放路径的对话框,如下图所示:

点击“next”,出现配置磁盘容量的对话框,此对话框指定Ubuntu操作系统的磁盘空间,不能超过本地磁盘分区剩余的可用空间。

点击“next”,出现配置信息的确认对话框,如下图所示:

如果需要修改,则可以返回,如果不需要修改,直接点击“Finish”,完成虚拟机的配置,接下来开始安装Ubuntu操作系统。

因为是通过虚拟化软件安装虚拟操作系统,所以安装过程不像在物理机上直接安装linux操作系统那样,需要选择磁盘分区、创建帐户、选择键盘布局、选择时区、选择语言等等步骤。

安装完成后,就可以启动并登陆刚才安装的虚拟机了。

登陆成功之后,如下图所示,至此,Ubuntu虚拟机已经安装完成,下一步,我们开始在Ubuntu系统中安装Hadoop系统及其支撑环境。

3.1.2安装Java开发环境

因为实验室不能接入互联网,所以不能使用Ubuntu提供的apt-get指令进行相关支撑软件的快速下载及安装,我们只能通过下载离线包进行手动安装与设置。

首先,下载java开发工具包JDK,由于JDK的开发不仅仅是一家,常用的主要有Sun公司开发的JDK和开源社区的OpenJDK两种。

我们选择Sun开发的JDK,可以去下载Linux32bit版本的JDK。

在实际使用中,我们下载的版本是jdk-7-linux-i586.tar.gz。

为了简单方便,我们将JDK安装在用户的主目录下。

我们将JDK放在/home/king/目录下,然后将jdk-7-linux-i586.tar.gz进行解压缩,解压完成之后得到JDK目录jdk-1.7.0。

为了使JDK生效,我们需要将JDK配置到系统环境变量里。

在命令行中执行如下指令:

#sudogedit/etc/profile

然后提示输入用户名king对应的登陆密码,输入之后,即可打开环境变量配置文件。

在最后一行umask022上面一行插入如下代码:

###JAVA

exportJAVA_HOME=/home/king/jdk1.7.0

exportPATH=$JAVA_HOME/bin:

$PATH

至此,JDK的安装配置已经完成,通过注销虚拟机,即可生效。

再次登陆之后,在命令行执行:

如果出现了相关参数提示,说明java开发环境已经安装完毕。

3.1.3安装SSH

因为Hadoop采用的是C/S结构,Server(Master)需要控制Client(Slaves),需要在集群各个节点上按装SSH,Ubuntu默认安装了openssh-client,所以需要安装openssh-server。

但是考虑Ubuntu软件依赖的控制较严格,而新版本的Ubuntu安装的openssh-client版本较高,与之匹配的高版本openssh-server的离线包难找,我们使用低版本进行覆盖。

考虑到实验室不能接入互联网的实际情况,我们需要首先下载用户安装ssh的离线安装包,具体的安装步骤是这样的:

1.到”。

2.到openssh-server_5.3p1-3ubuntu3_i386.deb”。

3.到

下载完成之后,就可以进行安装了,执行如下指令(顺序不可更改):

#sudodpkg-iopenssh-client_5.3p1-3ubuntu3_i386.deb

#sudodpkg-iopenssh-server_5.3p1-3ubuntu3_i386.deb

#sudodpkg-issh_5.3p1-3ubuntu3_all.deb

至此,ssh的安装完成,后面我们会用到它配置无密码登录。

3.1.4配置网络

由于我们是在Windows环境下通过安装虚拟机来实现Linux平台搭建的,多个Linux虚拟机之间需要建立通信,而通信依赖于IP地址,所以我们需要给虚拟机设定IP地址。

不管是VirtualBox,还是VMware,这些虚拟软件一般都带有3种网络配置方式:

默认的是NAT,还有Bridge、Host-only。

关于这三种网络配置模式的讲解,可以参考相关的文档资源等。

我们使用Bridge(桥接)模式来配置虚拟机,也就是物理主机和虚拟都有独立的IP地址,并且处于同一个网段。

node3所在的物理主机的IP地址为:

192.168.6.156。

node3虚拟机的IP地址为:

192.168.6.198。

node4所在的物理主机的IP地址为:

192.168.6.157

node4虚拟机的IP地址为:

192.168.6.199

node5所在的物理主机的IP地址为:

192.168.6.158

node5虚拟机的IP地址为:

192.168.6.197

在使用的过程中,我们通过域名来解析各个虚拟机,而不是IP地址,所以需要编辑/etc/hosts文件,指令如下:

#sudogedit/etc/hosts

将IP地址与域名进行映射,设定如下所示:

如果域名不正确,需要修改/etc/hostname文件,将域名改为node3即可。

执行如下指令:

#sudogedit/etc/hostname

前面已经对域名解析部分进行了配置,下面开始配置虚拟机的联网方式以及IP地址等。

前面已经介绍了虚拟机默认都采用NAT联网方式,也就是物理主机和虚拟机采用相同的IP地址,虚拟机通过地址转换通过物理主机的IP与外联络,在有Linux虚拟机建立的局域网中,这种方式是不可行的,因为NAT采用的Vnet8网卡并通过DHCP来自动分配IP,所以我们要通过Bridge模式来实现虚拟机互联,也就是虚拟机和物理主机拥有不同的IP,且处于同一个网段。

首先需要更改虚拟机的联网方式,点击VMware的“VirtualMachine”菜单,选择“VirtualMachineSettings”菜单项,出现如下:

选择Hardware项下的NetworkAdapter,选中Bridged,如上图所示,至此,虚拟机的联网方式配置完毕,下面配置虚拟机的IP地址。

因为Linux操作系统默认采用DHCP动态获取IP,这样就无法指定IP地址,必须改成手动指定。

在UbuntuLinux系统菜单栏中选择“System”“Perferences”“NetworkConnections”选项,也可以通过系统右上侧的联网菜单直接选择联网设置。

选中“编辑连接”,选择eth0网卡,点击“编辑”,进入网卡编辑界面,在“IPv4设置”项里,选中“方法”域中的“手动”项,在地址里选择“添加”,然后分别在地址、子网掩码、网管中填入上图所示数据。

然后点击保存。

3.1.5创建SSH密钥安全联机

Hadoop系统的一个特性就是无论是Master,还是Slave节点,其Hadoop系统设定都完全一样。

为了降低负担,且维护每台节点都有相同的设置,最简单的方式就是设置了Master之后,通过SSH密钥证书的scp安全复制指令,无密码登录到其他节点上,并将文件传到节点上。

所以首先需要配置无密码登录(在Master上执行如下操作)。

#ssh-keygen–trsa–P“”

#cd/home/king/.ssh

#catid_rsa.pub>>~/.ssh/authorized_keys

配置完成之后,测试登陆本节点自身:

#sshlocalhost

#logout

如果能正常登陆成功,则说明配置成功。

3.1.6配置Hadoop云计算系统

首先从Apache官方网站下载Hadoop安装包,我们下载的是hadoop-0.20.1.tar.gz,将其放到/home/king目录下,进行解压缩,得到hadoop-0.20.1目录,Hadoop不需要安装,只需要进行配置即可使用。

之后要进行一些配置,首先进入解压后目录对conf文件夹,要修改对配置文件包括hadoop-env.sh/etc/profilecore-site.xmlhdfs-site.xmlmapred-site.xmlmastersslaves。

hadoop-env.sh中要释放并修改下面一行,用于指定java路径:

exportJAVA_HOME=/home/king/jdk1.7.0/

编辑环境变量,添加HADOOP_HOME变量,使Hadoop的bin目录下的指令加入到环境变量中。

#sudogedit/etc/profile

在最后一行umask022上面一行插入如下代码:

##Hadoop

exportHADOOP_HOME=/home/king/hadoop-0.20.1

exportPATH=$HADOOP_HOME/bin:

$PATH

编辑core-site.xml,因为Hadoop采用网页的方式对系统运行进行监控,core-site.xml就是对这种监控进行用户自定义配置的配置文件,因为默认的配置在core-default.xml中,这里只给出了最低配置,配置Hadoop系统在本地的目录和默认的文件系统及通信端口(默认8020):

配置hdfs-site.xml,设定文件的副本数:

配置mapred-site.xml,配置JobTracker节点及通信端口:

配置master文件,指定master节点:

配置slaves节点,配置slave节点:

至此,Master节点的配置已经全部完成,下面开始配置其余节点。

3.1.7配置Slaves节点

我们前面已经说过,Hadoop所有节点的配置都相同,所以配置Slaves的时候有两种手段:

1)按照前面的1.1—1.5的过程重新做一遍,但是在重做1.4的时候,只需要在node3(也就是Master)上执行:

#cd/home/king/.ssh

#catid_rsa.pub>>node4:

~/.ssh/authorized_keys

2)将配置好的Master虚拟机文件全部拷贝,到node4、node5所在的物理主机上,然后分别登陆到虚拟机,修改其中的/ect/hosts和/etc/hostname文件以及配置IP地址,然后重启即可。

执行完所有的配置之后,需要确保所有的机器之间都可以可以访问到的,通过命令行中的“ping机器IP”指令,验证所有虚拟机之间都是可以互通的。

3.1.8格式化Hadoop系统

在启动Hadoop系统之前,需要先格式化一个Hadoop系统,执行如下指令即可:

#hadoopnamenode-format

如果顺利完成,则说明系统格式化完成,下面即可启动并使用Hadoop系统了,如果失败,则需要查看Hadoop安装目录中的logs目录下的日志了。

3.1.9启动Hadoop集群

在Master即NameNode上执行如下指令:

#start-all.sh

然后执行如下指令,查看Hadoop进程的启动状态:

因为node3同时充当master和slave,所以其上除了jps进程之外,还有另外5个Hadoop相关的进程,分别是NameNode、DataNode、SecondaryNameNode、JobTracker和TaskTracker。

如果5个进程都正常启动,则说明Hadoop系统已经成功启动。

然后去个slave节点上执行同样的指令,如果有TaskTracker和DataNode进程,则说明该节点已经成功启动:

3.22.实验过程

3.2.1可扩展性

3.2.1.1动态扩展

将/conf/slaves文件进行修改,只留下node3这一个节点,启动Hadoop集群。

登陆Hadoop监控页面http:

//node3:

50070,查看Hadoop系统的运行状态,如下图所示:

通过监控网页,可以看到系统的启动时间,系统存储空间以及已用大小,当前处于活动状态的节点数及死亡节点数,图中给出的当前活动节点数为1,死亡节点数为0,当前系统配置容量7.38GB。

通过点击LiveNodes可以跳转到LiveNodes监控页面,出现一个节点列表,通过节点列表,可以监控每一个具体的节点上的配置信息。

如下图所示:

通过点击具体的某一个Node,可以进入监控该节点的页面,如下图:

显示node3节点当前存储的文件目录信息等。

通过执行如下的操作,实现系统的动态扩展:

1.把新机器的增加到conf/slaves文件中(Datanode或者Tasktracker则可跳过),将node4和node5添加进去。

2.在新机器上进入hadoop安装目录(新机器已经成功配置Hadoop)

$bin/hadoop-daemon.shstartdatanode

$bin/hadoop-daemo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1