Hadoop云计算实验报告Word下载.docx
《Hadoop云计算实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《Hadoop云计算实验报告Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
Hadoop集群:
一台namenode主机master,一台datanode主机salve,
master主机IP为10.5.110.223,slave主机IP为10.5.110.207。
3实验设计说明
3.1主要设计思路
在ubuntu操作系统下,安装必要软件和环境搭建,使用eclipse编写程序代码。
实现大数据的统计。
本次实验是统计软件代理系统操作人员处理的信息量,即每个操作人员出现的次数。
程序设计完成后,在集成环境下运行该程序并查看结果。
3.2算法设计
该算法首先将输入文件都包含进来,然后交由map程序处理,map程序将输入读入后切出其中的用户名,并标记它的数目为1,形成<
word,1>
的形式,然后交由reduce处理,reduce将相同key值(也就是word)的value值收集起来,形成<
word,listof1>
的形式,之后再将这些1值加起来,即为用户名出现的个数,最后将这个<
key,value>
对以TextOutputFormat的形式输出到HDFS中。
3.3程序说明
1)UserNameCountMap类继承了org.apache.hadoop.mapreduce.Mapper,4个泛型类型分别是map函数输入key的类型,输入value的类型,输出key的类型,输出value的类型。
2)UserNameCountReduce类继承了org.apache.hadoop.mapreduce.Reducer,4个泛型类型含义与map类相同。
3)main函数通过addInputPath将数据文件引入该类,在通过setOutputPath将生成结果转为一个文件,实现生成结果,即统计结果的查看。
FileInputFormat.addInputPath(job,newPath(args[0]));
FileOutputFormat.setOutputPath(job,newPath(args[1]));
程序具体代码如附件中源程序。
4实验过程
4.1安装实验环境
4.1.1安装ubuntu操作系统
1)打开VMware,在Hometab中单击“CreateaNewVirtualMachine”,
2)选择custom,选择虚拟硬件版本Workstation9.0,选择ios文件,next,
3)录入目标操作系统信息,包括Fullname、Uername和Password,next,
4)选择默认的选项,一般不做更改,最后确认信息,Finish,
5)安装成功后,会看到如下画面,
4.1.2安装配置Samba
安装samba主要为了实现与windows操作系统的通讯,由于server版本的ubuntu没有自带图形操作界面,所以下载资料等操作不太方便,这也是安装samba的目的之一。
1)安装samba,输入如下命令:
2)安装vim
3)创建共享目录,并修改权限
4)配置samba。
修改samba的配置文件/etc/samba/smb.conf,将security=share,并在文件的末尾追加如下内容,
5)测试。
在windows实机中,通过ip访问ubuntu虚拟机,可以见到share文件夹
4.1.3安装配置JDK
首先,下载java开发工具包JDK。
在本次试验中,我们下载的版本是jdk-7u80-linux-x64.gz。
解压安装到/usr/lib/jvm/目录下,更名为java-7-sun。
配置环境变量/etc/environment,
使配置生效
测试安装配置结果
4.1.4在单节点(伪分布式)环境下运行HADOOP
1)添加Hadoop用户并赋予sudo权限
2)安装配置SSH
切换至hadoop用户,
配置密钥,使得hadoop用户能够无须输入密码,通过SSH访问localhost,
测试结果:
3)安装配置Hadoop
首先下载Hadoop,解压缩到/opt/hadoop目录下,本次试验中我们下载的版本是hadoop-1.2.1-bin.tar.gz,更改目录名称为hadoop。
修改与hadoop相关的配置文件(在/opt/hadoop/conf目录下),分别是core-site.xml,hadoop-env.sh,hdsf-site.xml,mapred-site.xml。
在此不一一列举。
4)运行Hadoop
首先格式化HDFS,
启动单节点集群,
通过jps查看,
master
slave
停止单节点集群,
4.1.5在多节点(分布式)环境下运行HADOOP
1)设置/etc/hosts文件
实验中两台机器处于同一局域网中,其中一台作为master,ip地址为10.5.110.223,一台作为slave,ip地址为10.5.110.207,修改两台机器的/etc/hosts文件,
2)设置节点之间无密码SSH登陆
验证配置SSH是否正确
3)修改集群配置文件
修改master的masters、slaves,修改所有节点的core-site.xml,hdsf-site.xml,mapred-site.xml,在此不一一列出。
4)在master上格式化HDFS
5)启动和停止集群
启动集群,
在master上启动HDFS后,jps结果如下:
在master上启动mapreduce后,jps结果如下:
停止集群
4.2运行程序
4.2.1在单机上运行程序
(1)在Eclipse下,新建map/reduce工程
(2)新建一个java类UserNameCount,编写代码
(3)运行程序,结果如下:
(4)在eclipse中编译好源代码后,导出程序的jar包,供在集群上使用。
4.2.2在集群上运行程序
(1)启动集群,通过jps命令查看master,slave上启动的服务列表,结果如下:
(2)在集群环境下运行该程序jar包(UserNameCount.jar),结果如下:
(3)查看集群环境下启动程序生成的结果,即output文件,结果如下:
(4)数据统计结果在part-r-00000中,具体内容如下,
5附件
源代码如下:
packagehadoop;
importjava.io.IOException;
importjava.util.StringTokenizer;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.LongWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.Mapper;
importorg.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
publicclassUserNameCount{
publicstaticclassUserNameCountMapextends
Mapper<
LongWritable,Text,Text,IntWritable>
{
privatefinalIntWritableone=newIntWritable
(1);
privateTextword=newText();
publicvoidmap(LongWritablekey,Textvalue,Contextcontext)
throwsIOException,InterruptedException{
Stringline=value.toString();
StringTokenizertoken=newStringTokenizer(line);
while(token.hasMoreTokens()){
word.set(token.nextToken());
context.write(word,one);
}
}
}
publicstaticclassUserNameCountReduceextends
Reducer<
Text,IntWritable,Text,IntWritable>
publicvoidreduce(Textkey,Iterable<
IntWritable>
values,
Contextcontext)throwsIOException,InterruptedException{
intsum=0;
for(IntWritableval:
values){
sum+=val.get();
context.write(key,newIntWritable(sum));
publicstaticvoidmain(String[]args)throwsException{
Configurationconf=newConfiguration();
Jobjob=newJob(conf);
job.setJarByClass(UserNameCount.class);
job.setJobName("
usernamecount"
);