hive的项目实现

1.日志采集
生产日志:

(1)安装nginx

sudo apt-get install nginx

(2)上传shop.html文件到/var/www/html目录
(3)浏览器访问

http://master/shop.html
网页每隔几秒刷新一次,就会产生一条访问日志

(4)监控nginx生成的访问日志

sudo tail -F /var/log/nginx/access.log

采集日志:用flume
(1)创建/home/hadoop/web_log目录

mkdir /home/hadoop/web_log

(2)进入/home/hadoop/web_log目录

cd /home/hadoop/web_log

(3)创建nginx_memory_hdfs.properties文件,填写以下内容:

# agent 起个名字叫做 a1
# 设置 a1 的 sources 叫做 r1
a1.sources = r1
# 设置 a1 的 sinks 叫做 k1
a1.sinks = k1
# 设置 a1 的 channels 叫做 c1
a1.channels  = c1
# 设置 r1 的类型是 exec,用于采集命令产生的数据
a1.sources.r1.type = exec
# 设置 r1 采集 tail -F 命令产生的数据
a1.sources.r1.command = tail -F /var/log/nginx/access.log
# 设置 c1 的类型是 memory
a1.channels.c1.type = memory
# 设置 c1 的缓冲区容量
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 设置 k1 的类型是 hdfs
a1.sinks.k1.type = hdfs
# 设置 k1 输出路径,按照时间在 hdfs 上创建相应的目录
a1.sinks.k1.hdfs.path = /web_log/%y-%m-%d/%H
a1.sinks.k1.hdfs.filePrefix = events-
# 设置 k1 输出的数据保存为文本
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text
# 把时间戳放入数据的头中
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# 设置 r1 连接 c1
a1.sources.r1.channels = c1
# 设置 k1 连接 c1
a1.sinks.k1.channel = c1

(4)使用nginx_memory_hdfs.properties文件启动Flume

flume-ng agent -n a1 -c conf -f /home/hadoop/web_log/nginx_memory_hdfs.properties

(5)去HDFS检查日志数据是否采集到/web/log目录

2.ETL
(1)清洗数据:

hadoop jar /home/hadoop/web_log/NginxEtl.jar 2020-06-17 18
注:是自己HDFS上的日期 2020-06-17 18
生成的数据保存在hdfs上的/web_log/2020-06-17/18目录中。

编写web_log_etl.sh脚本

#!/bin/bash
hadoop -jar /home/hadoop/web_log/NginxEtl.jar $1 $2

给脚本可执行的权限

chmod 777 web_log_etl.sh

运行此脚本

/home/hadoop/web_log/web_log_etl.sh 2020-06-17 18

3.搭建数据仓库

编写web_log_import.sh 脚本

给脚本可执行的权限

chmod 777 web_log_etl.sh

#!/bin/bash
HQL="
CREATE DATABASE IF NOT EXISTS web_log;
USE web_log;
CREATE TABLE IF NOT EXISTS ods_web_log(
            path        string
 )
PARTITIONED BY (day string, hour string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
LOAD DATA INPATH '/web_log/etl/$1/$2' INTO TABLE ods_web_log PARTITION(day='$1', hour='$2');
"
hive -e "$HQL"

在web_log目录下下

./web_log_import.sh 21-12-08 09
21-12-08 09自己HDFS上的日期

编写web_log_analysis.sh脚本

给脚本可执行的权限

chmod 777 web_log_etl.sh

#!/bin/bash
HQL="
USE web_log;
DROP TABLE IF EXISTS dwd_web_log;
CREATE TABLE dwd_web_log AS
SELECT path, day, hour
FROM ods_web_log
WHERE day='$1' AND hour='$2';
DELETE jar /home/hadoop/web_log/UDFGetShop.jar;
ADD jar /home/hadoop/web_log/UDFGetShop.jar;
CREATE TEMPORARY FUNCTION GET_SHOP as 'com.dzqc.udf.GetSHOP';
DROP TABLE IF EXISTS dws_web_log;
CREATE TABLE dws_web_log AS
SELECT GET_SHOP(path) shop, day, hour
FROM dwd_web_log;
DROP TABLE IF EXISTS ads_web_log;
CREATE TABLE ads_web_log AS
SELECT shop
         , COUNT(*) count
         , day
         , hour
         , DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) rank
FROM dws_web_log
GROUP BY shop,day,hour;
"
hive -e "$HQL"

./web_log_import.sh 21-12-08 09
21-12-08 09自己HDFS上的日期
在这里插入图片描述
拉这个jar包

在dbeaver上运行在这里插入图片描述

运行
SELECT * FROM web_log.ods_web_log;
SELECT * FROM web_log.dwd_web_log;

结果
在这里插入图片描述
运行
SELECT * FROM web_log.dws_web_log;
结果
在这里插入图片描述
运行
SELECT * FROM web_log.ads_web_log;
结果
在这里插入图片描述

5.保存结果
导出Hive数据到MySQL需要我们先做以下几个准备操作:

(1)查看MySQL管理员的账户和密码

sudo cat /etc/mysql/debian.cnf

(2)使用管理员账户和密码登录MySQL

mysql -u debian-sys-maint -p

(3)创建web_log数据库,用来存相关的表

CREATE DATABASE IF NOT EXISTS web_log;

(4)创建web_log用户,设置密码为123456

CREATE USER ‘web_log’@’%’ IDENTIFIED BY ‘123456’;

(5)授予web_log用户操纵web_log数据库的权限

GRANT ALL PRIVILEGES ON web_log. * TO ‘web_log’@’%’;
FLUSH PRIVILEGES;

(6)退出MySQL使用web_log用户登录,并使用web_log数据库;

mysql -u web_log -p123456

(7)创建shop_count_rank表,存储hive导出的数据

CREATE TABLE shop_count_rank (
shop varchar(10) NOT NULL,
count int,
day char(10) NOT NULL,
hour char(2) NOT NULL,
PRIMARY KEY(shop, day, hour)
);

编写web_log_export.sh脚本

**#!/bin/bash
sqoop export 
--connect jdbc:mysql://localhost:3306/web_log 
--username web_log 
--password 123456 
--table shop_count_rank 
--export-dir /user/hive/warehouse/web_log.db/ads_web_log 
--input-fields-terminated-by "\001"  
-m 1**

增量导出hive数据到mysql

sqoop export
–connect jdbc:mysql://localhost:3306/web_log
–username web_log
–password 123456
–table shop_count_rank
–export-dir /user/hive/warehouse/web_log.db/ads_web_log
–input-fields-terminated-by “\001”
-m 1

在MYSQL上查看
(1)先进入mysql

mysql -u web_log -p123456

(2)切换到web_log

use web_log;

(3)查看表

show tables;

(4)查询表中的内容

select * from shop_count_rank;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值