Hive+MapReduce实现对网站流量数据分析

目的: 实现对网站流量数据分析 (MapReduce+Hive综合实验)

文件说明:

http.log 日志文件,是电信运营商记录用户手机上网访问某些网站行为的日志记录数据,其中上行流量+下行流量 = 总流量
phone.txt 是手机号段规则,是手机号码对应地区城市和运营商的数据。

数据部分内容:

http.log 部分数据

.

phone.txt 部分数据
.

数据格式说明:

  • http.log日志 数据格式:
    手机号码,请求网站的URL,上行流量(20字节),下行流量(5000字节)
    例如:18611132889 http://v.baidu.com/tv 20 5000
  • phone.txt 数据格式:
    手机号前缀,手机号段,手机号码对应的省份,城市,运营商,邮编,区号,行政划分代码
    例如:133 1332170 广西 南宁 电信 530000 0771 450100
    (一条数据中多个字段用空格或制表符分隔)

要求:

  • 用 MapReduce 将数据段的间隔改成“,”
  1. 根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com,weibo.com);
  2. 根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3
  3. 根据给的手机号段归属地规则,计算出总流量最高的省份Top3
  4. 根据给的手机号段运营商规则,计算出总流量最高的运营商Top2
  5. 根据给的手机号段归属地规则,计算出总流量最高的城市Top3

首先对数据用 MapReduce 进行简单的处理,流程如下:

http.log 数据处理流程
phone.txt 数据处理流程


处理完数据,得到我们想要的数据,如下:

http.log 处理后的数据

.

phone.txt 处理后的数据


以下是 MapReduce 主要代码。
http_Mapper 代码:

public class http_Mapper extends Mapper<LongWritable, Text, Text, NullWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //用正则表达式将文件每一行的制表符和空格换成逗号
        String new_value = value.toString().replaceAll("\s+", ",");

        //将修改后的每一行数据切割成数组
        String[] new_value_split = new_value.split(",");

        //将每一行数据的网站保留有效域名
        String domain_name = new_value_split[1].replaceAll("[a-zA-Z]+://|(/.*)", "");

        //将每一行数据的上下行流量求和
        int all_flow = Integer.parseInt(new_value_split[2]) + Integer.parseInt(new_value_split[3]);

        //将手机号、域名网址、总流量作为处理后的有效数据,例如:15639120688	v.baidu.com 15994
        String k2 = new_value_split[0] + "," + domain_name + "," + all_flow;

        //写入上下文对象
        context.write(new Text(k2), NullWritable.get());
    }
}

http_Reducer 代码:

public class http_Reducer extends Reducer<Text, NullWritable, Text, NullWritable> {
    @Override
    protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        //将shuffle过来的(k3,v3)直接当(k4,v4)就好了
        context.write(key, NullWritable.get());
    }
}

phone_Mapper 代码:

public class phone_Mapper extends Mapper<LongWritable, Text, Text, NullWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //将文件每一行的制表符换成逗号
        String new_value = value.toString().replace("\t", ",");

        //将修改后的每一行数据切割成数组
        String[] new_value_split = new_value.split(",");

        //将手机号段、省份、城市、运营商作为最后的有效数据,例如:1300000 山东 济南 联通
        String mes = new_value_split[1] + "," + new_value_split[2] + "," + new_value_split[3] + "," + new_value_split[4];

        //写入上下文对象
        context.write(new Text(mes), NullWritable.get());
    }
}

phone_Reducer 代码:

public class phone_Reducer extends Reducer<Text, NullWritable, Text, NullWritable> {
    @Override
    protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        //将shuffle过来的(k3,v3)直接当(k4,v4)就好了
        context.write(key, NullWritable.get());
    }
}

接下来,创建 Hive 表,
输入命令:

create table if not exists lhr_http
(h_no bigint ,h_url string ,h_allstream int) 
row format delimited fields terminated by ',';

create table if not exists lhr_phone
(p_no bigint ,p_prov string ,p_city string ,p_oper string) 
row format delimited fields terminated by ',';

运行结果:


将清洗后的数据导入Hive
输入命令:

load data inpath '/http_out/part-r-00000' into table lhr_http;
load data inpath '/phone_out/part-r-00000' into table lhr_phone;

运行结果:


导入的的数据:


现在我们已经将处理好的数据导入到创建的两张 Hive 表了,接下来就可以写 Hql 语句来完成前面提到的 5 个要求了。


1.根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com, weibo.com)

输入命令:

select h_url,sum(h_allstream) as sum 
from lhr_http 
group by h_url 
order by sum desc 
limit 3;

输出结果:



2. 根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3

输入命令:

select h_no,sum(h_allstream) as sum 
from lhr_http 
group by h_no 
order by sum desc 
limit 3;

输出结果:



3. 根据给的手机号段归属地规则,计算出总流量最高的省份Top3

输入命令:

select p_prov,sum(h_allstream) as sum 
from lhr_http, lhr_phone 
where substr(h_no,0,7)=p_no 
group by p_prov 
order by sum desc limit 3;

输出结果:



4. 根据给的手机号段运营商规则,计算出总流量最高的运营商Top2

输入命令:

select p_oper,sum(h_allstream) as sum 
from lhr_http,lhr_phone 
where substr(h_no,0,7)=p_no 
group by p_oper 
order by sum desc 
limit 2;

输出结果:



5. 根据给的手机号段归属地规则,计算出总流量最高的城市Top3

输入命令:

select p_city,sum(h_allstream) as sum 
from lhr_http,lhr_phone 
where substr(h_no,0,7)=p_no 
group by p_city 
order by sum desc 
limit 3;

输出结果:


over!!!

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 面向服务的体系架构(SOA) 1   本章主要介绍和解决以下问题,这些也是全书的基础:   HTTP协议的工作方式与HTTP网络协议栈的结构。   如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适应何种场景。   如何实现服务的动态注册和路由,以及软负载均衡的实现。   1.1 基于TCP协议的RPC 3   1.1.1 RPC名词解释 3   1.1.2 对象的序列化 4   1.1.3 基于TCP协议实现RPC 6   1.2 基于HTTP协议的RPC 9   1.2.1 HTTP协议栈 9   1.2.2 HTTP请求与响应 15   1.2.3 通过HttpClient发送HTTP请求 16   1.2.4 使用HTTP协议的优势 17   1.2.5 JSON和XML 18   1.2.6 RESTful和RPC 20   1.2.7 基于HTTP协议的RPC的实现 22   1.3 服务的路由和负载均衡 30   1.3.1 服务化的演变 30   1.3.2 负载均衡算法 33   1.3.3 动态配置规则 39   1.3.4 ZooKeeper介绍与环境搭建 40   1.3.5 ZooKeeper API使用简介 43   1.3.6 zkClient的使用 47   1.3.7 路由和负载均衡的实现 50   1.4 HTTP服务网关 54   第2章 分布式系统基础设施 58   本章主要介绍和解决如下问题:   分布式缓存memcache的使用及分布式策略,包括Hash算法的选择。   常见的分布式系统存储解决方案,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。   如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。   垂直化的搜索引擎在分布式系统中的使用,包括搜索引擎的基本原理、Lucene详细的使用介绍,以及基于Lucene的开源搜索引擎工具Solr的使用。   2.1 分布式缓存 60   2.1.1 memcache简介及安装 60   2.1.2 memcache API与分布式 64   2.1.3 分布式session 69   2.2 持久化存储 71   2.2.1 MySQL扩展 72   2.2.2 HBase 80   2.2.3 Redis 91   2.3 消息系统 95   2.3.1 ActiveMQ & JMS 96   2.4 垂直化搜索引擎 104   2.4.1 Lucene简介 105   2.4.2 Lucene的使用 108   2.4.3 Solr 119   2.5 其他基础设施 125   第3章 互联网安全架构 126   本章主要介绍和解决如下问题:   常见的Web攻击手段和防御方法,如XSS、CRSF、SQL注入等。   常见的一些安全算法,如数字摘要、对称加密、非对称加密、数字签名、数字证书等。   如何采用摘要认证方式防止信息篡改、通过数字签名验证通信双方的合法性,以及通过HTTPS协议保障通信过程中数据不被第三方监听和截获。   在开放平台体系下,OAuth协议如何保障ISV对数据的访问是经过授权的合法行为。   3.1 常见的Web攻击手段 128   3.1.1 XSS攻击 128   3.1.2 CRSF攻击 130   3.1.3 SQL注入攻击 133   3.1.4 文件上传漏洞 139   3.1.5 DDoS攻击 146   3.1.6 其他攻击手段 149   3.2 常用的安全算法 149   3.2.1 数字摘要 149   3.2.2 对称加密算法 155   3.2.3 非对称加密算法 158   3.2.4 数字签名 162   3.2.5 数字证书 166   3.3 摘要认证 185   3.3.1 为什么需要认证 185   3.3.2 摘要认证的原理 187   3.3.3 摘要认证的实现 188   3.4 签名认证 192   3.4.1 签名认证的原理 192   3.4.2 签名认证的实现 193   3.5 HTTPS协议 200   3.5.1 HTTPS协议原理 200   3.5.2 SSL/TLS 201   3.5.3 部署HTTPS Web 208   3.6 OAuth协议 215   3.6.1 OAuth的介绍 215   3.6.2 OAuth授权过程 216   第4章 系统稳定性 218   本章主要介绍和解决如下问题:   常用的在线日志分析命令的使用和日志分析脚本的编写,如cat、grep、wc、less等命令的使用,以及awk、shell脚本的编写。   如何进
### 回答1: flume+spark+hive+spark sql离线分析系统是一种基于大数据技术的离线数据分析系统。其中,flume用于数据采集和传输,spark用于数据处理和计算,hive用于数据存储和管理,spark sql用于数据查询和分析。通过这个系统,可以实现对大量数据的高效处理和分析,为企业决策提供有力的支持。 ### 回答2: flume spark hive spark sql离线分析系统是一种数据处理系统。该系统可以用于处理大量的数据,生成相应的报告和分析。博客文章有详细讨论。 flume是一个分布式日志采集系统,它可以将数据从不同的地方采集并传输到所需的位置。它可以采集不同的日志数据,包括web日志、服务器日志、应用程序日志等。flume是一个可扩展的系统,可以用于处理大量的数据。 spark是一个强大的分布式计算引擎,它允许用户在大规模的数据集上进行高性能计算。spark可以快速地处理大量的数据,并支持多种编程语言,例如Java、Python和Scala等。spark还提供了可视化编程工具,例如RDD(弹性分布式数据集)来支持数据处理和分析等任务。 hive是一个基于Hadoop的数据仓库系统,它可以将结构化的数据存储在Hadoop的HDFS文件系统中。hive提供了类SQL的查询语言,例如HQL,并支持复杂查询和数据分析任务。hive还提供了很多插件,使用户可以轻松地将数据导入和导出到不同的数据源中。 spark sql是spark的一部分,它提供了SQL查询和数据分析功能。spark sql的灵活性和可扩展性使其非常适合处理大数据量的数据,包括结构化数据和半结构化数据。 综上所述,flume spark hive spark sql离线分析系统是一个可以用于处理大量的数据的系统,它由flume、spark、hive以及spark sql等组成部分。该系统可以帮助用户轻松地采集、存储、分析和报告大量的数据,有着非常广泛的应用。 ### 回答3: Flume、Spark、Hive、Spark SQL四个工具都是用于离线分析系统的。 Flume是由Apache基金会开发的开源数据采集系统,用于收集、聚合和移动大量数据。Flume可以实现数据的采集、压缩、持久化和转发,从而实现数据流水线。Flume可以将数据从不同来源收集到不同的目标,支持多种数据源,包括文件、HTTP、数据库等。Flume可以使数据收集更加高效和可靠。 Spark是一种快速、通用的计算引擎,用于大规模数据处理。Spark支持分布式计算,可以在数百台计算机上并行运行。Spark是用Java、Scala或Python编写的,可以处理数据,并提供先进的机器学习和图形处理功能。Spark具有内存计算和多种处理任务的灵活性,可以用于各种大规模数据处理的场景中。 Hive是面向Hadoop的数据仓库软件,提供了一个类似SQL的查询语言,用于查询和分析大规模数据。Hive将数据以表格的形式组织和存储,并通过SQL语言进行查询和分析。Hive可以用于各种数据仓库的管理,包括文件、HDFS、HBase等。 Spark SQL是在Spark引擎之上构建的结构化数据处理系统,提供了一种基于SQL的编程接口。Spark SQL可以将结构化数据与RDD集成在一起,可以使用Spark的内存计算引擎和流式处理引擎进行大规模的数据分析。Spark SQL可以在SQL查询中使用自己的数据格式,从而实现高效的数据处理和分析。 综上所述,Flume、Spark、Hive、Spark SQL这四个工具是离线分析系统中的重要组成部分,可以实现数据采集、数据处理和数据分析。在大数据分析的过程中,这些工具为数据科学家提供了丰富的选项,从而可以更好地处理数据,加快分析速度并获得更深入的见解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值