离线日志分析平台day03

hive与hbase的整合

在hive中如果关联hbase中已经存在的表,要使用外部表,反之使用内部关联的话,会在hbase中创建对应的新表:
实例:

CREATE EXTERNAL TABLE hhh1 (
id int, 
name string,
age int
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f:name,f:age")
TBLPROPERTIES ("hbase.table.name" = "xyz");	
将hbase当中的表与hive相关联

CREATE EXTERNAL TABLE event_log_hourly (
rowkey string, 
u_ud string,
pl string,
s_time bigint,
bt string,
bv string,
province string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f:u_ud, f:pl,f:s_time,f:bt, f:bv, f:province")
TBLPROPERTIES ("hbase.table.name" = "nginx_js");	

需求:
每天 每个小时(24小时) 每个平台 每个浏览器 每个浏览器版本 的活跃用户数

create temporary table event_log_hourly_tmp (
	date_ string comment 'yyyy-MM-dd',
	hour string comment '00|01...23',
	pl string, 
	bt string,
	bv string,
	u_ud string
);

常见hive函数:
1、current_database()—>查看当前的数据库

		select current_database() from event_log_hourly limit 1;
		OK
		event_log
		在mysql中查看当前数据库使用select database();
2、current_date--->查看当前日期
		select current_date() from event_log_hourly limit 1;
		OK
		2018-08-08
3、current_timestamp--->查看当前时间
		hive (event_log)> select current_timestamp() from event_log_hourly limit 1;
		OK
		2018-08-08 19:01:30.75
获取日期
		select from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd') from event_log_hourly limit 1;
获取小时
		select from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd HH:mm:ss') from event_log_hourly limit 1;

临时表:

create table event_log_hourly_tmp (
	date_ string comment "yyyy-MM-dd",
	hour string comment "00|01...23",
	pl string, 
	bt string,
	bv string,
	u_ud string
); 

	insert into event_log_hourly_tmp select 
		from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd'),
		from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd HH:mm:ss'),
		pl, 
		bt,
		bv,
		u_ud 
	from event_log_hourly;

说明:为了获取用户的操作时间戳和u_ud,完全可以从rowkey中进行拆分获取,这样减少数据的冗余。

	select split(rowkey, "_")[0], split(rowkey, "_")[1] from event_log_hourly limit 1;
每天 每个小时(24小时) 每个平台 每个浏览器 每个浏览器版本 的活跃用户数
	select date_, hour, pl, bt, bv, count(distinct u_ud) as u_count from event_log_hourly_tmp group by date_, hour, pl, bt, bv;
echarts呈现(因为要从mysql中读取对应的数据,所以需要从hive将结果迁移至mysql)
mysql表
		create table event_log_hourly(
		date_ varchar(20) comment "yyyy-MM-dd",
		hour_  varchar(20) comment "00|01...23",
		pl 	  varchar(100), 
		bt    varchar(100),
		bv    varchar(100),
		u_count int
	);
	create table event_log_hourly_tmp1 (
		date_ string comment "yyyy-MM-dd",
		hour_ string  comment "00|01...23",
		pl 	  string , 
		bt    string ,
		bv    string ,
		u_count int
	) as select date_, hour, pl, bt, bv, count(distinct u_ud) as u_count from event_log_hourly_tmp group by date_, hour, pl, bt, bv;
insert <into | overwrite table> tblName

insert overwrite table event_log_hourly_tmp1 select date_, hour, pl, bt, bv, count(distinct u_ud) as u_count from event_log_hourly_tmp t group by date_, hour, pl, bt, bv;

自动化脚本


#!/bin/sh

###############
##
##  collect mysql data import into hdfs 
##  约定:变量都用大写,多个单词之间使用下划线分割
##	mysql: test/t_user 
##  hdfs : /input/data-clean/t_user
##  在""中会执行``命令,但是在''中,无法解析${}
###############

##source配置文件


function run() {
    source /home/bigdata/shells/db-conf.conf
    
    HIVE_BIN=/home/bigdata/app/hive/bin/hive
    SQOOP_BIN=/home/bigdata/app/sqoop/bin/sqoop
    
    
    ##创建hive中外部表关联hbase
    
    ##查询对应的数据,生成临时表
    
    ##统计数据,生成临时表1
    
       sql="
    		set hive.exec.mode.local.auto=true;     ## 本地模式
    		USE event_log;
    		CREATE EXTERNAL TABLE event_log_hourly ( rowkey string,  u_ud string, pl string, s_time bigint, bt string, bv string, province string ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES (\"hbase.columns.mapping\" = \":key,f:u_ud, f:pl,f:s_time,f:bt, f:bv, f:province\") TBLPROPERTIES (\"hbase.table.name\" = \"nginx_js\");
    		CREATE TABLE event_log_hourly_tmp(date_ string, hour string, pl string, bt string, bv string, u_ud string); 
    		insert overwrite table event_log_hourly_tmp select from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd'), from_unixtime(cast((s_time/1000) as int), 'yyyy-MM-dd HH:mm:ss'), pl, bt, bv, u_ud from event_log_hourly;
    		CREATE TABLE event_log_hourly_tmp1 (date_ string, hour_ string, pl string, bt string , bv string, u_count int);
    		insert overwrite table event_log_hourly_tmp1 select date_, hour, pl, bt, bv, count(distinct u_ud) as u_count from event_log_hourly_tmp t group by date_, hour, pl, bt, bv;
       "
    	
    	${HIVE_BIN} -e "${sql}"
    
    ##将结果通过sqoop迁移到mysql
    	
    ${SQOOP_BIN} export \
    --connect jdbc:mysql://${DB_PRODUCT_HOST}:${DB_PRODUCT_PORT}/test \
    --username ${DB_PRODUCT_USER} \
    --password ${DB_PRODUCT_PASSWORD} \
    --export-dir hdfs://ns1/user/hive/warehouse/event_log.db/event_log_hourly_tmp1 \
    --table event_log_hourly \
    --fields-terminated-by '\001';
    
	
	
}

run $*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的校园二手书交易平台,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的校园二手书交易平台实现了图书信息查询。系统用到了关系型数据库中MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让校园二手书交易平台更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql;Spring Boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值