基于hadoop20并行数据处理应用大学毕业设计论文.docx
- 文档编号:25580214
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:21
- 大小:733.14KB
基于hadoop20并行数据处理应用大学毕业设计论文.docx
《基于hadoop20并行数据处理应用大学毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于hadoop20并行数据处理应用大学毕业设计论文.docx(21页珍藏版)》请在冰豆网上搜索。
基于hadoop20并行数据处理应用大学毕业设计论文
电子科技大学成都学院云计算系
实践专周设计报告
课程名称:
基于Hadoop2.0并行数据处理应用
指导教师组:
邹倩颖王小芳
组长学号姓名:
1341310131屈太源
组员学号姓名:
1341310120冯小丹
组员学号姓名:
1341310726张瑜
云计算科学与技术系制
2015年12月
第1章引言
1.1问题分析
Hadoop是Apache软件基金会旗下的一个开源分布式计算机平台。
以Hadoop分布式文件系统HDFS和MapReduce为核心的Hadoop为用户提供了系统底层细节透明的分布式架构。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。
1.2设计目标
1.2.1基本功能
Hadoop集群环境具体搭建工作,需要调用jps命令,启动5个服务进程,完成Eclipse环境搭建。
图1-1集群搭建
1.2.2扩展功能
1.编写手机拨打电信、联通、移动特殊号码的统计应用。
2.倒排索引的实现。
3.Hadoop集群环境搭建,需调用jps命名启动5个服务进程。
1.3设计思路
环境搭建
1、安装前的准备
完成分布式集群环境的搭建,一个master节点,两个slave节点,在hosts中添加主从节点的IP地址。
在hostname中修改主机名,并使其生效。
在主要点中添加相应从节点的IP。
在yarn-env.sh中添加Java_home的路径。
2、安装JDK
JDK安装较为简单。
使用VMwareWorkstation安装了3个RHEL5.2系统。
装好一个RHEL,并且安装好JDK,再利用VMwareWorkstation的克隆功能完成另外两个的安装。
3、更改主机名
IP设置:
Master:
10.18.5.116
Slave1:
10.18.6.77
Slave2:
10.18.6.33
1.4功能描述
步骤1:
用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
步骤2:
ResourceManager为该应用程序分配第一个Container(这里可以理解为一种资源比如内存),并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
步骤3:
ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
步骤4:
ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
步骤5:
一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
步骤6:
NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
步骤7:
各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
步骤8:
应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己)。
1.5设计过程
在hosts中添加主从节点的IP地址。
在hostname中修改主机名,并使其生效。
在主节点中添加相应从节点的IP。
在yarn-env.sh中添加Java_home的路径。
在hadoop-env.sh中修改Java_home的路径。
第2章相关技术简介
2.1Hadoop平台介绍
Hadoop自身包括以下内容:
HadoopCommon:
hadoop的基础,HadoopDistributedFileSystem(HDFS):
分布式文件系统,HadoopYARN:
集群任务资源管理及任务调度的框架,HadoopMapReduce:
基于YARN的分布式计算。
MRAppMaster是MapReduce的ApplicationMaster实现,它使得MapReduce应用程序可以直接运行于YARN之上。
在YARN中,MRAppMaster负责管理MapReduce作业的生命周期,包括作业管理、资源申请与再分配、Container启动与释放、作业恢复等。
图2-1Hadoop结构
2.2MapReduce并行程序设计
2.2.1Map函数
1.将小数据集进一步解析成一批
2.每一个输入的
2.2.2Reduce函数
输入的中间结果
2.2.3MapReduce计算模型的优化
1.任务调度:
计算方面:
Hadoop会优先将任务分配给空闲的机器,已达到公平分享系统资源的目的。
IO方面:
Hadoop会尽量将Map任务分配给“输入分片(InputSplit)”所在机器,以减少IO的消耗。
2.数据预处理与输入分片的大小:
MapReduce任务擅长处理少量的大数据
若是大量的小数据,则选择先对数据进行一次预处理,将数据合并以提高MapReduce任务的执行效率。
或当一个Map任务运行只需几秒时,考虑多分配些数据,让其处理。
通常,一个Map任务运行60秒左右是比较合适的。
3.Map和Reduce任务的数量
Map/Reduce任务槽:
这个集群能够同时运行的Map/Reduce任务的最大数量。
任务槽帮助对任务调度进行设置。
设置Map数量主要参考Map运行的时间,设置Reduce任务的数据量参考任务槽的设置,即Reduce任务数是任务槽的0.95或1.75倍。
4.Combine函数
用于本地合并数据的函数。
作用:
某些数据在本地会产生很多相同重复的数据,若此时一个一个传递给Reduce任务是非常耗时的;因此,MapReduce框架运行Combine函数用于本地合并,这会大大减少IO操作的消耗。
合理设计该函数能有效减少网络传输的数据量,提高MapReduce的效率。
5.压缩
对Map的中间结果输出和最终结果输出,进行压缩
作用:
减少网络传输。
有副作用,请根据实际情况来选择。
图2-1MapReduce体系图
2.3HDFS简介
HDFS是Hadoop项目的核心子项目,是Hadoop主要应用的一个分布式文件系统。
HDFS非常适合用在商用硬件上作分布式存储和计算,因为它具有高容错性和可扩展性;HDFS可配置性极高;使用Java语言开发,支持所有主流平台;支持类shell命令,可直接和HDFS进行交互;NameNode和DataNode有内置的Web服务器。
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。
2.3.1HDFS节点
HDFS是一个主从结构,一个HDFS集群是由一个名字节点,它是一个管理文件命名空间和调度客户端访问文件的主服务器,当然还有一些数据节点,通常是一个节点一个机器,它来管理对应节点的存储。
HDFS对外开放命名空间并允许用户以文件形式存储。
2.3.2关于NameNode
管理文件系统的命名空间。
记录每个文件数据块在各个DataNode上的位置和副本信息。
协调客户端对文件的访问。
记录命名空间内的改动或空间本身属性的改动。
使用事务日志记录HDFS元数据的变化。
使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
2.3.3关于DataNode及体系结构图
负责所在物理节点的存储管理
一次写入,多次读取(不修改)
文件由数据块组成,典型的块大小是64MB
数
图2-1HDFS结构图
第3章环境搭建过程详述
3.1搭建hadoop伪分布的环境
配置jdk,进入在存放jdk文件夹的当前目录,将解压好的jdk1.7.0_10文件夹用最高权限复移动到/usr/lib/jvm目录里,此时即使没有jvm目录也可以执行如下命令,jvm文件夹将得到创建。
3.2设置ssh免密码登本地
3.2.1创建一个wifi
查看创建好wifi的IP:
ifconfig
安装SSH
sudoapt-getinstallopenssh-server
将ip地址和主机映射写入hosts文件中
找到/etc/hosts,进行编辑
sudovim/etc/hosts
生成公钥密钥,将公钥复制为authorized_keys,并且修改权限为600
执行如下命令
ssh-keygen-trsa
一路回车,进入.ssh目录下
我们发现该目录下有如下两个文件,一个为公钥,一个为私钥
复制公钥为authorized_keys,修改其权限
catid_rsa.pub>>authorized_keys
sudochmod600authorized_keys
我们可以测试一下是否能够免密码登陆到本地
3.2.2配置jdk
1.下载解压jdk
解压命令,-C指定解压路径
sudotar-zxvf-C/usr/local/jdk-7u25-linux-x64.tar.gz
2.配置环境变量
编辑/etc/profile文件
sudovim/etc/profile
在文件末添加如下内容
exportJAVA_HOME=/usr/local/jdk1.7(这里的路径为jdk的所在路径)
exportPATH=.:
$PATH:
$JAVA_HOME/bin
:
wq!
保存退出后,需要更新一下配置文件
source/etc/profile
3.检查jdk是否配置完成
java-version
3.2.3配置hadoop
1.下载
2.解压后,配置环境变量
在/etc/profile原有的基础上增加以下内容
exportHADOOP_HOME=/usr/local/hadoop2.2
在PATH末尾增加
:
$HADOOP_HOME/sbin
3.检查是否配置完成
hadoopversion
4.修改hadoop配置文件
进入/usr/local/hadoop2.2/etc/hadoop,修改该目录下的5个配置文件
修改hadoop-env.sh,将配置文件中的JAVA_HOME的路径修改为自己jdk所在的路径
修改core-site.xml文件,在添加以下内容
图3-1core-site.xml文件
修改hdfs-site.xml,在添加如下内容
图3-2
hdfs-site.xml文件
图3-3hdfs-site.xml文件
修改yarn-site.xml,在添加以下内容
图3-4yarn-site.xml文件
修改mapred.site.xml,在添加以下内容
图3-5mapred.site.xml文件
3.2.4测试hadoop是否搭建成功
1.启动hadoop,第一次启动hadoop时需要格式化:
bin/hdfsnamenode-format
2.进入sbin目录执行:
./start-all.sh
3.启动完成后查看hadoop的进程是否全部启动,执行命令jps
第4章MapReduce并行设计实现
4.1第一案例要求
倒排索引
案例1:
现有一批电话通信清单,记录了用户A拨打某些特殊号码(如120,10086,138********等)的记录。
需要做一个统计结果,记录拨打给用户B的所有用户A。
添加原始数据
图4-1添加数据
处理后的数据
图4-2显示数据
4.2核心代码1
计数器Counter是一个计数器可以记录这个程序一些数据用于统计。
publicclassTestextendsConfiguredimplementsTool{
enumCounter{
LINESKIP,//出错的行
}
publicstaticclassMapextendsMapper
publicvoidmap(LongWritablekey,Textvalue,Contextcontext)
throwsIOException,InterruptedException{
//读取源文件,line得到的就是输入文件的一行数据
Stringline=value.toString();
try{
//数据处理
String[]lineSplit=line.split("");//对源数据进行分割重组
Stringanum=lineSplit[0];//主叫
Stringbnum=lineSplit[1];//被叫
context.write(newText(bnum),newText(anum));//输出
}catch(ArrayIndexOutOfBoundsExceptione){
context.getCounter(Counter.LINESKIP).increment
(1);//出错令计数器加1
2.Reduce函数
publicstaticclassReduceextendsReducer
publicvoidreduce(Textkey,Iterable
throwsIOException,InterruptedException{
StringvalueString;
Stringout="";
//每个value代表Map函数发送的一个value
//在这里代表拨打了这个被叫号码的一个主叫
for(Textvalue:
values){
valueString=value.toString();
out+=valueString+"|";
context.write(key,newText(out));
3.运行
publicintrun(String[]args)throwsException{
Configurationconf=getConf();
Jobjob=newJob(conf,"test_job");//任务名
job.setJarByClass(Test.class);//执行class
FileInputFormat.addInputPath(job,newPath(args[0]));//输入路径
FileOutputFormat.setOutputPath(job,newPath(args[1]));//输出路径
job.setMapperClass(Map.class);//指定上面Map类作为MAP任务代码
job.setReducerClass(Reduce.class);//指定上面Reduce类作为REDUCE任务代码
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(Text.class);//指定输出KEY的格式
job.setOutputValueClass(Text.class);//指定输出VALUE的格式等哈
job.waitForCompletion(true);
returnjob.isSuccessful()?
0:
1;
}
publicstaticvoidmain(String[]args)throwsException{
intres=ToolRunner.run(newConfiguration(),newTest(),args);
System.exit(res);
4.3第二案例要求
添加原始数据
图4-1添加数据
显示原始数据
图4-2结果图
4.4核心代码2
privatestaticConfigurationconf=null;
static{
conf=newConfiguration();
conf.addResource(newPath("conf/core-site.xml"));
conf.addResource(newPath("conf/yarn-site.xml"));
conf.addResource(newPath("conf/mapred-site.xml"));
conf.addResource(newPath("conf/hdfs-site.xml"));
//conf.addResource(newPath("conf/hbase-site.xml"));
publicstaticclassMyMapperextendsMapper
privateTextvalueInfo=newText();
privateTextkeyInfo=newText();
privateFileSplitsplit;
publicvoidmap(Objectkey,Textvalue,Contextcontext)//
throwsIOException,InterruptedException{
//获取
split=(FileSplit)context.getInputSplit();
StringTokenizerstk=newStringTokenizer(value.toString());
while(stk.hasMoreElements()){
//key值由(单词:
URI)组成
keyInfo.set(stk.nextToken()+":
"+split.getPath().toString());
//词频
valueInfo.set("1");
context.write(keyInfo,valueInfo);
publicstaticclassMyCombinerextendsReducer
Textinfo=newText();
publicvoidreduce(Textkey,Iterable
throwsIOException,InterruptedException{
intsum=0;
for(Textvalue:
values){
sum+=Integer.parseInt(value.toString());
intsplitIndex=key.toString().indexOf(":
");
//重新设置value值由(URI+:
词频组成)
info.set(key.toString().substring(splitIndex+1)+":
"+sum);
key.set(key.toString().substring(0,splitIndex));
contex.write(key,info);
publicstaticclassMyReducerextendsReducer
privateTextresult=newText();
publicvoidreduce(Textkey,Iterable
throwsIOException,InterruptedException{
//生成文档列表
StringfileList=newString();
for(Textvalue:
values){
fileList+=value.toString()+";";
result.set(fileList);
context.write(key,result);
第5章测试和总结
5.1集群测试和调试
图5-1主节点
图5-2从节点
图5-3从节点
5.2集群系统存在的问题及解决方案
问题:
1)在搭建集群环境将配置文件修改完之后,master主节点jps后SecondaryNmaeNode没有显示出来。
解决方案:
主节点和两个重节点的yarn-env.sh文件修改不一致,修改一直之后金jps就能显示出来NameNode,ResourceMananger,SecondaryNmaeNod。
问题:
2)在master主节点上安装好ecplise环境后,HDFS的数据传输不能够加载出来。
解决方案:
两个slaver节点的core-site.xml的文件配置要成主节点master的IP,同时格式化与停止三个节点服务器,后将创建的临时文件夹彻底删除,再将三个服务器开启,HDFS的数据传输才能加载出来,也可以用命令hadoopfs–put传文件。
解决办法:
在/usr/java/hadoop/目录下,输入命令:
chown-Rhadoop:
hadoop(用户名:
用户组)tmp(文件夹)即可。
5.3收获及心得体会
通过这次实践专周,我们小组在邹倩颖和王小芳老师的悉心指导下,很快的就完成了此次实验,在实验中我们小组遇到了很多的问题,并且及时通过老师的帮住解决了问题,虽然我们现在的知识结构体系很差,但是我们知道,只要肯学,肯付出,总有一天我们会收获到我们想要的一切。
其次要感谢身边的同学给予我们小组的帮助,使我们共同进步!
参考文献
[1]实战Hadoop-刘鹏-电子工业出版社
[2]Hadoop上运行Wor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 hadoop20 并行 数据处理 应用 大学 毕业设计 论文