大数据基础课程设计报告一、项目简介:使用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,并且次数大于35.将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.utf8infile=$1#outfile=/root/filesogou.500w.utf8.extoutfile=$2awk-F'\t''{print$0\tsubstr($1,0,4)年\tsubstr($1,5,2)月\tsubstr($1,7,2)日\tsubstr($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(*)ascntfromsogougroupbyuuidhavingcnt2)a;(7)查询次数大于2次的用户占比selectcount(*)from(selectuuid,count(*)ascntfromsogougroupbyuuidhavingcnt2)a;(8)Rank在10以内的点击次数占比selectcount(*)fromsogouwherenum111;(9)直接输入URL查询的比例selectcount(*)fromsogouwhereurllike'%(10)查询搜索过”仙剑奇侠传“的uid,并且次数大于3selectuuid,count(*)asuufromsogouwherename='仙剑奇侠传'groupbyuuidhavinguu3;Ⅱ.MapReduce实现(import的各种包省略)(1)查询总条数publicclassMRCountAll{publicstaticIntegeri=0;publicstaticbooleanflag=true;publicstaticclassCountAllMapextendsMapperObject,Text,Text,Text{@Overrideprotectedvoidmap(Objectkey,Textvalue,MapperObject,Text,Text,Text.Contextcontext)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-generatedcatchblocke.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-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}FileOutputFormat.setOutputPath(job,newPath(Outpath));try{job.waitForCompletion(true);}catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.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;publicstaticclasswyMapextendsMapperObject,Text,Text,IntWritable{@Overrideprotectedvoidmap(Objectkey,Textvalue,MapperObject,Text,Text,IntWritable.Contextcontext)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-generatedcatchblocke.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;publicstaticclassNotRepeatMapextendsMapperObject,Text,Text,Text{@Overrideprotectedvoidmap(Objectkey,Textvalue,Mapp