前提条件:

安装好hadoop2.7.3(Linux系统下)

安装好MySQL(Windows或Linux系统下)

安装好Hive(Linux系统下)参考:Hive安装配置

题目:

从搜狗实验室下载搜索数据进行分析

下载的数据包含6个字段,数据格式说明如下:

访问时间  用户ID  [查询词]  该URL在返回结果中的排名  用户点击的顺序号  用户点击的URL

注意:

1.字段分隔符:字段分隔符是个数不等的空格;

2.字段个数:有些行有6个字段,有些达不到6个字段。

问题:使用MapReduce和Hive查询出搜索结果排名为第2名,点击顺序排在第1的数据?

实验步骤:

思路:用MapReduce做数据清洗,用Hive来分析数据。

1.下载数据源

打开搜狗实验室链接
http://www.sogou.com/labs/resource/q.php

下载精简版(一天数据,63MB)  tar.gz格式数据

下载后文件如下:

2.上传下载文件至HDFS

2.1将下载的文件通过WinScp工具上传到Linux系统

2.2 解压SogouQ.reduced.tar.gz并上传到HDFS

解压:

$ tar -zxvf SogouQ.reduced.tar.gz

可以用tail命令查看解压文件最后3行的数据

tail -3 SogouQ.reduced

查询词为中文,这里编码按UTF-8查出来是乱码,编码时指定为‘GBK’可避免乱码。数据格式如前面的说明:

访问时间  用户ID  [查询词]  该URL在返回结果中的排名  用户点击的顺序号  用户点击的URL

上传至HDFS:

$ hdfs dfs -put SogouQ.reduced /

3.数据清洗

因为原始数据中有些行的字段数不为6,且原始数据的字段分隔符不是Hive表规定的逗号',',所以需要对原始数据进行数据清洗。

通过编写MapReduce程序完成数据清洗:

a.将不满足6个字段的行删除

b.将字段分隔符由不等的空格变为逗号‘,’分隔符

3.1 Eclipse新建Maven工程:Zongheshiyan

Group Id填写com, Artifact Id填写Zongheshiyan

新建工程目录结构如下:

3.2 修改pom.xml文件

设置主类:在</project>一行之前添加如下语句

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.1.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><!-- main()所在的类,注意修改为包名+主类名 --><mainClass>com.Zongheshiyan.App</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>

添加依赖:在  </dependencies>一行之前添加如下语句

    <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.7.3</version></dependency>

3.3 新建SogouMapper类

3.4 编写代码

SogouMapper.java

package com.Zongheshiyan;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;//                                                                                         k1     ,        v1,     k2   ,    v2
public class SogouMapper extends Mapper<LongWritable,Text,Text,NullWritable> {@Override/*** 在任务开始时,被调用一次。且只会被调用一次。*/protected void setup(Context context) throws IOException, InterruptedException {super.setup(context);}@Overrideprotected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException {//避免乱码//数据格式:20111230000005  57375476989eea12893c0c3811607bcf    奇艺高清        1      1      http://www.qiyi.com/String data = new String(v1.getBytes(),0,v1.getLength(),"GBK");//split("\\s+") \\s+为正则表达式,意思是匹配一个或多个空白字符,包括空格、制表、换页符等。//参考:http://www.runoob.com/java/java-regular-expressions.htmlString words[] = data.split("\\s+");//判断数据如果不等于6个字段,则退出程序if(words.length != 6){return;//return语句后不带返回值,作用是退出该程序的运行  https://www.cnblogs.com/paomoopt/p/3746963.html}//用逗号代替空白字符String newData = data.replaceAll("\\s+",",");//输出context.write(new Text(newData),NullWritable.get());}@Override/*** 在任务结束时,被调用一次。且只会被调用一次。*/protected void cleanup(Context context) throws IOException, InterruptedException {super.cleanup(context);}
}

App.java

package com.Zongheshiyan;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/*** 数据清洗器 主类**/
public class App
{public static void main( String[] args ) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(App.class);//指定map输出job.setMapperClass(SogouMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);//指定reduce的输出job.setOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);//指定输入、输出FileInputFormat.setInputPaths(job,new Path(args[0]));FileOutputFormat.setOutputPath(job,new Path(args[1]));//提交job,等待结束job.waitForCompletion(true);}
}

3.5 打包工程:mvn clean package

3.6上传到Linux: WinScp工具

3.7 运行jar包

在运行jar包之前,确保开启了hadoop所有进程

start-all.sh

同时也把mr历史服务器进程打开

mr-jobhistory-daemon.sh start historyserver

运行jar包:

hadoop jar Zongheshiyan-0.0.1-SNAPSHOT.jar /SogouQ.reduced /out/Oneday

机器配置不同,执行时间也不同(执行时间约3分钟左右)。 看到输出如下图所示为执行成功。

查看输出结果

hdfs dfs -ls /out/Oneday

查看输出文件最后10行数据:

hdfs dfs -tail /out/Oneday/part-r-00000

4.创建hive表

进入hive命令行

hive

创建hive表

create table sogoulog_1(accesstime string,useID string,keyword string,no1 int,clickid int,url string) row format delimited fields terminated by ',';

5.将MapReduce清洗后的数据导入Hive sogoulog_1表中

load data inpath '/out/Oneday/part-r-00000' into table sogoulog_1;

6.使用SQL查询满足条件的数据(只显示前10条)

select * from sogoulog_1 where no1=2 and clickid=1 limit 10;

其实,还可以对数据做一些探索,例如:

查看 sogoulog_1表结构

hive> describe sogoulog_1;

OK

accesstime           string

useid                string

keyword              string

no1                  int

clickid              int

url                  string

Time taken: 0.411 seconds, Fetched: 6 row(s)

一天内,一共搜索关键词的个数

hive> select count(keyword) from sogoulog_1;

1724253

第一次点击的次数来看,排名越靠前,点击次数越多

hive> select count(keyword) from sogoulog_1 where no1=1 and clickid=1;

279492

hive> select count(keyword) from sogoulog_1 where no1=2 and clickid=1;

99224

hive> select count(keyword) from sogoulog_1 where no1=3 and clickid=1;

50782

从排名第一URL来看,点击顺序越小越多(首先被点到的可能性就越大)。

hive> select count(keyword) from sogoulog_1 where no1=1 and clickid=1;

279492

hive> select count(keyword) from sogoulog_1 where no1=1 and clickid=2;

79721

hive> select count(keyword) from sogoulog_1 where no1=1 and clickid=3;

39726

小结:

MapReduce对原始数据进行清洗,是本实验的难点,要结合注释看懂代码(数据清洗)。

hive对数据进行数据分析,找到隐含在数据中的规律/价值(数据挖掘)。

还可以做的是数据可视化等。

完成! enjoy it!

搜狗日志查询分析 (MapReduce+Hive综合实验)相关推荐

  1. Kubernetes 日志查询分析实践

    准备工作 为了完成后续的相关操作,我们需要准备一个 K8s 集群,操作步骤如下: 登陆容器服务控制台. 创建一个标准托管集群(杭州区域),在向导中勾选上[使用 EIP 暴露 API Server] 和 ...

  2. Azure NSG Flow Log 引发的自嗨 -- 日志查询分析

    上一篇中通过 Function 服务来实现了 NSG Flow Log 的 ETL 和流化处理,然后将处理好的 NSG Flow Log 推入到 Event Hub 中.NSG Flow Log 的分 ...

  3. 三款“非主流”日志查询分析产品初探

    前言 近些年在开源领域,用于构建日志系统的软件有两类典型: Elasticsearch:基于 Lucene 构建倒排索引提供搜索功能,DocValue 存储支持了其统计分析能力. Clickhouse ...

  4. 大数据课程综合实验案例:网站用户行为分析

    大数据课程综合实验案例 1 案例简介 1.1 案例目的 1.2 适用对象 1.3 时间安排 1.4 预备知识 1.5 硬件要求 1.6 软件工具 1.7 数据集 1.8 案例任务 1.9 实验步骤 2 ...

  5. 鲲鹏Bigdata pro 之日志分析综合实验-补充细节

    1 引言 鲲鹏云大数据技术课程中有一次实验叫<鲲鹏Bigdata pro 之日志分析综合实验>,给出了详细的操作步骤文档,基本上覆盖了主要的操作流程.但是,如果完全按照其操作流程,基于同学 ...

  6. 搜狗日志Hive数据分析

    目录 Hive数据分析... 4 一.数据处理.... 4 1.1处理不符合规范的数据.... 4 1.2访问时间分段.... 5 二.基本统计信息.... 6 三.数据属性基础分析.... 6 3. ...

  7. Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)...

    课程大纲及内容简介: 每节课约35分钟,共不下40讲 第一章(11讲) ·分布式和传统单机模式 ·Hadoop背景和工作原理 ·Mapreduce工作原理剖析 ·第二代MR--YARN原理剖析 ·Cl ...

  8. 第十二章 结合flume+mapreduce+hive+sqoop+mysql的综合实战练习

    简介: 项目大致过程是:flume监控日志文件,定时把文件清洗后上传到hdfs上,上传清晰后的数据是格式化的,可被hive识别,然后hive创建表,写脚本,执行hql语句,把执行结果写到hdfs上,最 ...

  9. 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶

    数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...

最新文章

  1. 最强代码生成器平台,杀疯了!
  2. mysql online ddl
  3. 线段树动态开点 - - - > 线段树合并
  4. Java 内存模型 JMM 详解
  5. leetcode228. 汇总区间
  6. java se程序设计课后答案,JAVA SE程序设计及实践
  7. 【例1】 给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n。
  8. 面向机器学习的特征工程 一、引言
  9. java 构造方法_Java构造方法和子类构造方法
  10. SiteMesh JSP布局框架介绍
  11. 【转】Oracle查询用户所有表
  12. 【ArcGIS 10.2新特性】地理数据(Geodatabase 和database)10.2 新特性
  13. 【SDE】随机微分方程(1)
  14. 最长公共子串 动态规划
  15. excel筛选和排序
  16. 学习笔记之Python的六种内置对象
  17. idea中webapp无法添加到mian文件夹中
  18. 国风就是帅,会三板吗,看看新天吧
  19. java棒棒糖和皮卡丘八音盒_KFC用玩具提前要走了压岁钱
  20. 在IE浏览器,icon字体图标不显示

热门文章

  1. Mean shift目标跟踪算法
  2. 抽象类+接口+内部类(有点晕 写的自己都感觉不太对)
  3. 从爆火的“哇呀挖”,思考我软件开发的人生意义何在?
  4. 查询各门课程的最高分、最低分、平均成绩
  5. gyp linux,GYP 简介
  6. 前端静态资源加载顺序
  7. 26岁,转行Python,是这辈子最成功的一件事......
  8. h5 动画效果常见制作手法
  9. ofstream和ifstream详细用法
  10. 【考研初试】基础问题汇总 学硕or专硕? 数一数二差别在哪?怎么择校?