大数据基础课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大数据基础课程设计报告

一、项目简介:

使用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生成的文件通过Java API方式导入到HBase(一张表)。

7.通过HBase shell命令查询6导出的结果。

三、实验流程

1. 将原始数据加载到HDFS平台

2. 将原始数据中的时间字段拆分并拼接,添加年、月、日、小时字段

(1)编写1个脚本sogou-log-extend.sh,其中sogou-log-extend.sh的内容为:

处理脚本文件:

bash sogou-log-extend.sh sogou.500w.utf8 sogou.500w.utf8.ext

结果为:

3. 将处理后的数据加载到HDFS平台

hadoop fs -put sogou.500w.utf8.ext /

4. 以下操作分别通过MR和Hive实现

Ⅰ.hive实现

1.查看数据库:show databases;

2.创建数据库: create database sogou;

3.使用数据库: use sogou;

4.查看所有表:show tables;

5.创建sougou表:Create table sogou(time string,uuid string,name string,num1 int,num2 int,url string) Row format delimited fields terminated by '\t';

6.将本地数据导入到Hive表里:Load data local inpath

'/root/sogou.500w.utf8' into table sogou;

7.查看表信息:desc sogou;

(1)查询总条数

select count(*) from sogou;

(2)非空查询条数

select count(*) from sogou where name is not null and name !='';

(3)无重复总条数

select count(*) from (select * from sogou group by

time,num1,num2,uuid,name,url having count(*)=1) a;

(4)独立UID总数

select count(distinct uuid) from sogou;

(5)查询频度排名(频度最高的前50词)

select name,count(*) as pd from sogou group by name order by pd desc limit 50;

(6)查询次数大于2次的用户总数

select count(a.uuid) from (select uuid,count(*) as cnt from sogou group by uuid having cnt > 2) a;

(7)查询次数大于2次的用户占比

select count(*) from (select uuid,count(*) as cnt from sogou group by uuid having cnt > 2) a;

(8)Rank在10以内的点击次数占比

select count(*) from sogou where num1<11;

(9)直接输入URL查询的比例

select count(*) from sogou where url like '%www%';

(10)查询搜索过”仙剑奇侠传“的uid,并且次数大于3

select uuid ,count(*) as uu from sogou where name='仙剑奇侠传' group by uuid having uu>3;

Ⅱ.MapReduce实现(import的各种包省略)

(1)查询总条数

public class MRCountAll {

public static Integer i = 0;

public static boolean flag = true;

public static class CountAllMap extends Mapper {

@Override

protected void map(Object key, Text value, Mapper.Context context)

throws IOException, InterruptedException {

i++;

}

}

public static void runcount(String Inputpath, String Outpath) {

Configuration conf = new Configuration();

conf.set("fs.defaultFS", "hdfs://10.49.47.20:9000");

Job job = null;

try {

job = Job.getInstance(conf, "count");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

job.setJarByClass(MRCountAll.class);

job.setMapperClass(CountAllMap.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(Text.class);

try {

FileInputFormat.addInputPath(job, new Path(Inputpath));

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

FileOutputFormat.setOutputPath(job, new Path(Outpath));

try {

job.waitForCompletion(true);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

相关文档
最新文档