Hadoop报告.docx

上传人:b****5 文档编号:3787169 上传时间:2022-11-25 格式:DOCX 页数:15 大小:581.66KB
下载 相关 举报
Hadoop报告.docx_第1页
第1页 / 共15页
Hadoop报告.docx_第2页
第2页 / 共15页
Hadoop报告.docx_第3页
第3页 / 共15页
Hadoop报告.docx_第4页
第4页 / 共15页
Hadoop报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Hadoop报告.docx

《Hadoop报告.docx》由会员分享,可在线阅读,更多相关《Hadoop报告.docx(15页珍藏版)》请在冰豆网上搜索。

Hadoop报告.docx

Hadoop报告

电子科技大学成都学院云计算系

实践专周设计报告

 

课程名称:

基于Hadoop2.0并行数据处理应用

指导教师组:

组长学号姓名:

组员学号姓名:

组员学号姓名:

 

科学与技术

2015年12月

第1章引言

1.1设计目标

搭建Hadoop分布式集群环境,编写Map/Reduce程序。

1.2功能描述

使用Eclipse编写,运行,调试Map/Reduce程序,编写两个搭建在Hadoop平台下的应用程序。

1)对所有拨打至同一号码的所有来电号码进行统计输出。

2)使用倒排索引,对不同文档下的内容进行处理,指出出现的所有字段所在的文档和重复的次数,并将结果输出。

1.3设计思路

首先搭建Hadoop分布式集群环境,配置Hadoop环境,安装JDK配置JAVA环境,安装Eclipse,配置Eclipse并导入Hadoop-eclipsejar包,编写Map/Reduce程序。

第2章相关技术介绍

2.1平台介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。

充分利用集群的威力进行高速运算和存储。

Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。

HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。

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

HDFS和MapReduce。

HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

2.2MapReduce并行程序设计

MapReduce整体工作原理如下:

首先,client发起任务请求,接着server会fork一些进程,包括一个master和一些mapworker,以及一些reduceworker。

其中master中包含jobtracker,用来进行任务分发与监控,而且每个worker里面包含tasktracker。

然后,jobtracker把数据处理任务分发给各个map,每个map都分到一些数据集,一个子数据集只能由一个map来处理。

其中,map处理完结果是存放在内存里的,这里会进行partition,将数据结果拆分成与reduce等量的任务。

如果有N个map,M个reduce,那么partition就会将map结果拆分成M份。

当一个map节点内存快满的时候,进行spill把数据导入本地磁盘,这个时候进行简单的分类与化简,也即sort和combiner。

而reduce端则从各个map的磁盘中获取自己所属的partition,将数据进行分类与合并,然后进行reduce的操作,完成分布式处理。

2.3HDFS简介

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统。

它和现有的分布式文件系统有很多共同点。

但同时,它和其他的分布式文件系统的区别也是很明显的。

HDFS是一个高度容错性的系统,适合部署在廉价的机器上。

HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

HDFS在最开始是作为ApacheNutch搜索引擎项目的基础架构而开发的。

HDFS是ApacheHadoopCore项目的一部分。

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。

而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。

HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streamingaccess)文件系统中的数据。

第3章

环境搭建

3.1节点配置

1.

修改当前机器名称

图3-1修改Hostname

2.配置hosts文件

分别将Hadoop地址、Master和两个slave的IP地址添加至hosts文件当中。

图3-2Hosts文件

3.安装配置SSH免密码登录

1)查看"/home/用户名/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

图3-3查看.ssh文件夹

2)生成的密钥对:

id_rsa(私钥)和id_rsa.pub(公钥)。

图3-4生成的秘钥

3.2Java环境配置

1.

编辑"/etc/profile"文件,添加java路径

图3-1Profile文件

2.验证配置

使用java–version验证配置是否成功

图3-2验证java配置

3.3Hadoop集群安装

3.3.1修改配置文件

1.配置hadoop-env.sh文件

图3-1Hadoop-env.sh文件配置

2.配置core-site.xml文件

图3-2Core-site.xml文件配置

3.配置hdfs-site.xml文件

图3-3

Hdfs-site.xml文件配置

4.配置yarn-site.xml文件

图3-4Yarn-site.xml文件配置

 

3.3.2验证Hadoop集群环境

1.启动hadoop

图3-1启动hadoop

2.验证hadoop环境

图3-2验证hadoop环境

3.4Eclipse安装配置

1.拷贝hadoop-0.20.203-eclipse-plugin.jar到eclipse-plugin

然后启动eclipse。

在eclipse中的window的preferences的HadoopMap/Reduce下添加hadoop的路径。

图3-1

2.配置mapreduce/Location.

首先在Window中找到并打开Mapreduce视图并打开。

图3-2Map/ReduceLocation视图

添加HadoopLocation,并配置其中的内容。

图3-3HadoopLocation配置

3.创建MapReduce工程,实现程序设计。

第4章号码统计

4.1程序设计

此程序基于Mapreduce平台运行,能够分析一份通话记录,将所有拨打至指定号码的电话号码记录下来并重新输出到新的文档当中。

从源文件中抓取数据,并将数据上传至HDFS中,再由Mapper程序进行筛选、分割并输出所有有效数据,HDFS收到新数据后,新建一个Output文本并将结果输出到其中。

4.2程序分析和设计

4.2.1Map过程

从源文件(通话记录)当中提取所需数据,然后分割原始数据,将被叫作为KEY,将主叫作为VALUE。

本节代码:

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

}

}

}

4.2.2Reduce过程

将Map过程所得的Key值和Value值组合成所需的格式,然后将数据交还给HDFS处理。

此节代码:

publicstaticclassReduceextendsReducer{

publicvoidreduce(Textkey,Iterablevalues,Contextcontext)

throwsIOException,InterruptedException{

StringvalueString;

Stringout="";

//每个value代表Map函数发送的一个value

//在这里代表拨打了这个被叫号码的一个主叫

for(Textvalue:

values){

valueString=value.toString();

out+=valueString+"|";

}

context.write(key,newText(out));

}

}

4.2.3Run过程

设定输入和输出路径,指定Map类和Reduce类作为相应任务代码,并设置Key和Value的输出格式。

此节代码:

publicintrun(String[]args)throwsException{

Configurationconf=getConf();

Jobjob=newJob(conf,"test_job");//任务名

job.setJarByClass(phoneNum.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(),newphoneNum(),args);

System.exit(res);

}

}

4.3

运行结果

图4-1

输入文本1

图4-2

输入文本2

图4-3输出结果

图4-4

文件列表

第5章倒排索引

5.1程序简介

倒排索引(Invertedindex),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。

它是文档检索系统中最常用的数据结构。

两种不同的倒排索引形式:

1.一条记录的水平倒排索引(或者倒排档案索引)包含每个引用单词的文档的列表。

2.一个单词的水平倒排索引(或者完全倒排索引)又包含每个单词在一个文档中的位置。

后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。

5.2分析和设计

5.2.1Map过程

首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容,Map过程首先必须分析输入的对,得到倒排索引中需要的三个信息:

单词、文档URI和词频。

然而Map过程存在两个问题:

1.对只能有两个值,在不使用Hadoop自定义数据类型的情况下,需要根据情况将其中的两个值合并成一个值,作为value或key值;

2.通过一个Reduce过程无法同时完成词频统计和生成文档列表,所以必须增加一个Combine过程完成词频统计

此节代码:

publicclassInvertedIndex{

publicstaticclassInvertedIndexMapperextendsMapper{

privateTextkeyInfo=newText();

privateTextvalueInfo=newText();

privateFileSplitsplit;

publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{

split=(FileSplit)context.getInputSplit();

StringTokenizeritr=newStringTokenizer(value.toString());

while(itr.hasMoreTokens()){

keyInfo.set(itr.nextToken()+":

"+split.getPath().toString());

valueInfo.set("1");

context.write(keyInfo,valueInfo);

}

}

}

5.2.2Combine过程

将key值相同的value值累加,得到一个单词在文档中的词频。

此节代码:

publicstaticclassInvertedIndexCombinerextendsReducer{

privateTextinfo=newText();

publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{

intsum=0;

for(Textvalue:

values){

sum+=Integer.parseInt(value.toString());

}

intsplitIndex=key.toString().indexOf(":

");

info.set(key.toString().substring(splitIndex+1)+":

"+sum);

key.set(key.toString().substring(0,splitIndex));

context.write(key,info);

}

}

5.2.3Reduce过程

Reduce过程只需将相同key值的value值组合成倒排索引文件所需的格式即可,剩下的事情就可以直接交给MapReduce框架进行处理了。

此节代码:

publicstaticclassInvertedIndexReducerextendsReducer{

privateTextresult=newText();

publicvoidreducer(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{

StringfileList=newString();

for(Textvalue:

values){

fileList+=value.toString()+";";

}

result.set(fileList);

context.write(key,result);

}

}

5.3

运行结果

图5-1

输入文本1

图5-2输入文本2

图5-3

输出结果

图5-4文件列表

第6章测试和总结

6.1调试过程中存在的问题及解决方案

1.当在搭建hadoop集群的时候,在配置ssh免密码登陆时,

cd~/.ssh出现文件夹不存在。

解决方案:

先进行sshlocalhost.在进入文件夹就不会出现问题。

2.3个节点,启动之后namenode报错,且存活节点(LiveNodes)只显示1个。

错误信息:

INFOorg.apache.hadoop.ipc.Server:

IPCServerhandler9on9000:

starting

解决方案:

关闭防火墙:

sudoufwdisable

3.java路径找不到

解决方法:

查看/etc/profile下是否存在java路径。

如果存在。

将java路径复制到根目录下的.bashrc的文件里面追加java环境。

然后source此文件。

source.bashrc

4.如果存在部分的datanode不能去启动。

就是在jps不能出现datanode节点。

解决方法:

这是由于datanode找不到服务host引起的。

通过查找/etc/hostname找到hostname;比如:

slave1。

然后找到/etc/hosts,添加:

192.168.248.142salve1

5.eclipse中不能找到HadoopMap/Reduce这个选项

是因为在eclipse中的plugins里面缺少一个hadoop的关联包。

解决方法:

上网下载一个hadoop-eclipse的关联jar就行。

6.hdfs中不能上传文件。

解决方法:

检查各个子节点里面的XML配置是否正确。

6.2收获及心得体会

g。

致谢

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

当前位置:首页 > 小学教育 > 语文

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

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