大数据基础课程设计报告.docx
《大数据基础课程设计报告.docx》由会员分享,可在线阅读,更多相关《大数据基础课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
大数据基础课程设计报告
大数据基础课程设计报告
一、项目简介:
使用hadoop中的hive、mapreduce以及HBASE对网上的一个搜狗五百万的数进行了一个比较实际的数据分析。
搜狗五百万数据,是经过处理后的搜狗搜索引擎生产数据,具有真实性,大数据性,能够较好的满足分布式计算应用开发课程设计的数据要求。
搜狗数据的数据格式为:
访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL。
其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID。
二、操作要求
1.将原始数据加载到HDFS平台。
2.将原始数据中的时间字段拆分并拼接,添加年、月、日、小时字段。
3.将处理后的数据加载到HDFS平台。
4.以下操作分别通过MR和Hive实现。
●查询总条数
●非空查询条数
●无重复总条数
●独立UID总数
●查询频度排名(频度最高的前50词)
●查询次数大于2次的用户总数
●查询次数大于2次的用户占比
●Rank在10以内的点击次数占比
●直接输入URL查询的比例
●查询搜索过”仙剑奇侠传“的uid,并且次数大于3
5.将4每步骤生成的结果保存到HDFS中。
6.将5生成的文件通过JavaAPI方式导入到HBase(一张表)。
7.通过HBaseshell命令查询6导出的结果。
三、实验流程
1.将原始数据加载到HDFS平台
2.将原始数据中的时间字段拆分并拼接,添加年、月、日、小时字段
(1)编写1个脚本sogou-log-extend.sh,其中sogou-log-extend.sh的内容为:
#!
/bin/bash
#infile=/root/sogou.500w.utf8
infile=$1
#outfile=/root/filesogou.500w.utf8.ext
outfile=$2
awk-F'\t''{print$0"\t"substr($1,0,4)"年\t"substr($1,5,2)"月\t"substr($1,7,2)"日\t"substr($1,8,2)"hour"}'$infile>$outfile
处理脚本文件:
bashsogou-log-extend.shsogou.500w.utf8sogou.500w.utf8.ext
结果为:
3.将处理后的数据加载到HDFS平台
hadoopfs-putsogou.500w.utf8.ext/
4.以下操作分别通过MR和Hive实现
Ⅰ.hive实现
1.查看数据库:
showdatabases;
2.创建数据库:
createdatabasesogou;
3.使用数据库:
usesogou;
4.查看所有表:
showtables;
5.创建sougou表:
Createtablesogou(timestring,uuidstring,namestring,num1int,num2int,urlstring)Rowformatdelimitedfieldsterminatedby'\t';
6.将本地数据导入到Hive表里:
Loaddatalocalinpath'/root/sogou.500w.utf8'intotablesogou;
7.查看表信息:
descsogou;
(1)查询总条数
selectcount(*)fromsogou;
(2)非空查询条数
selectcount(*)fromsogouwherenameisnotnullandname!
='';
(3)无重复总条数
selectcount(*)from(select*fromsogougroupbytime,num1,num2,uuid,name,urlhavingcount(*)=1)a;
(4)独立UID总数
selectcount(distinctuuid)fromsogou;
(5)查询频度排名(频度最高的前50词)
selectname,count(*)aspdfromsogougroupbynameorderbypddesclimit50;
(6)查询次数大于2次的用户总数
selectcount(a.uuid)from(selectuuid,count(*)astfromsogougroupbyuuidhavingt>2)a;
(7)查询次数大于2次的用户占比
selectcount(*)from(selectuuid,count(*)astfromsogougroupbyuuidhavingt>2)a;
(8)Rank在10以内的点击次数占比
selectcount(*)fromsogouwherenum1<11;
(9)直接输入URL查询的比例
selectcount(*)fromsogouwhereurllike'%%';
(10)查询搜索过”仙剑奇侠传“的uid,并且次数大于3
selectuuid,count(*)asuufromsogouwherename='仙剑奇侠传'groupbyuuidhavinguu>3;
Ⅱ.MapReduce实现(import的各种包省略)
(1)查询总条数
publicclassMRCountAll{
publicstaticIntegeri=0;
publicstaticbooleanflag=true;
publicstaticclassCountAllMapextendsMapper
Override
protectedvoidmap(Objectkey,Textvalue,Mapper
throwsIOException,InterruptedException{
i++;
}
}
publicstaticvoidruncount(StringInputpath,StringOutpath){
Configurationconf=newConfiguration();
conf.set("fs.defaultFS","hdfs:
//10.49.47.20:
9000");
Jobjob=null;
try{
job=Job.getInstance(conf,"count");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
job.setJarByClass(MRCountAll.class);
job.setMapperClass(CountAllMap.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
try{
FileInputFormat.addInputPath(job,newPath(Inputpath));
}catch(IllegalArgumentExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
FileOutputFormat.setOutputPath(job,newPath(Outpath));
try{
job.waitForCompletion(true);
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsException{
runcount("/sogou/data/sogou.500w.utf8","/sogou/data/CountAll");
System.out.println("总条数:
"+i);
}
}
(2)非空查询条数
publicclassCountNotNull{
publicstaticStringStr="";
publicstaticinti=0;
publicstaticbooleanflag=true;
publicstaticclasswyMapextendsMapper
Override
protectedvoidmap(Objectkey,Textvalue,Mapper
throwsIOException,InterruptedException{
String[]values=value.toString().split("\t");
if(!
values[2].equals(null)&&values[2]!
=""){
context.write(newText(values[1]),newIntWritable
(1));
i++;
}
}
}
publicstaticvoidrun(StringinputPath,StringoutputPath){
Configurationconf=newConfiguration();
conf.set("fs.defaultFS","hdfs:
//10.49.47.20:
9000");
Jobjob=null;
try{
job=Job.getInstance(conf,"countnotnull");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
assertjob!
=null;
job.setJarByClass(CountNotNull.class);
job.setMapperClass(wyMap.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
try{
FileInputFormat.addInputPath(job,newPath(inputPath));
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
try{
FileOutputFormat.setOutputPath(job,newPath(outputPath));
job.waitForCompletion(true);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
run("/sogou/data/sogou.500w.utf8","/sogou/data/CountNotNull");
System.out.println("非空条数:
"+i);
}
}
(3)无重复总条数
publicclassCountNotRepeat{
publicstaticinti=0;
publicstaticclassNotRepeatMapextendsMapper
Override
protectedvoidmap(Objectkey,Textvalue,Mapper
Stringtext=value.toString();
String[]values=text.split("\t");
Stringtime=values[0];
Stringuid=values[1];
Stringname=values[2];
Stringurl=values[5];
context.write(newText(time+uid+name+url),newText("1"));
}
}
publicstaticclassNotRepeatReducextendsReducer{
Override
protectedvoidreduce(Textkey,Iterablevalues,Reducer.Contextcontext)throwsIOException,InterruptedException{
i++;
context.write(newText(key.toString()),newIntWritable(i));
}
}
publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException,InterruptedException{
Configurationconf=newConfiguration();
conf.set("fs.defaultFS","hdfs:
//10.49.47.20:
9000");
Jobjob=null;
try{
job=Job.getInstance(conf,"countnotnull");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
assertjob!
=null;
job.setJarByClass(CountNotRepeat.class);
job.setMapperClass(NotRepeatMap.class);
job.setReducerClass(NotRepeatReduc.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
try{
FileInputFormat.addInputPath(job,newPath("/sogou/data/sogou.500w.utf8"));
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
try{
FileOutputFormat.setOutputPath(job,newPath("/sogou/data/CountNotRepeat"));
job.waitForCompletion(true);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("无重复总条数为:
"+i);
}
}
(4)独立UID总数
publicclassCountNotMoreUid{
publicstaticinti=0;
publicstaticclassUidMapextendsMapper
Override
protectedvoidmap(Objectkey,Textvalue,Mapper
Stringtext=value.toString();
String[]values=text.split("\t");
Stringuid=values[1];
context.write(newText(uid),newText("1"));
}
}
publicstaticclassUidReducextendsReducer{
Override
protectedvoidreduce(Textkey,Iterablevalues,Reducer.Contextcontext)throwsIOException,InterruptedException{
i++;
context.write(newText(key.toString()),newIntWritable(i));
}
}
publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException,InterruptedException{
Configurationconf=newConfiguration();
conf.set("fs.defaultFS","hdfs:
//10.49.47.20:
9000");
Jobjob=null;
try{
job=Job.getInstance(conf,"countnotnull");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
assertjob!
=null;
job.setJarByClass(CountNotNull.class);
job.setMapperClass(UidMap.class);
job.setReducerClass(UidReduc.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
try{
FileInputFormat.addInputPath(job,newPath("/sogou/data/sogou.500w.utf8"));
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
try{
FileOutputFormat.setOutputPath(job,newPath("/sogou/data/CountNotMoreUid"));
job.waitForCompletion(true);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("独立UID条数:
"+i);
}
}
(5)查询频度排名(频度最高的前50词)
publicclassCountTop50{
publicstaticclassTopMapperextendsMapper{
Texttext=newText();
Override
protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)
throwsIOException,