脚本如何生成日志 (实时日志分析)

Nginx的日志信息很多都是用时间进行区分的,比如下面的日志信息

脚本如何生成日志,脚本抓取日志关键字

可以按照这样的数据建立分区表:二级分区表

建立数据库

脚本如何生成日志,脚本抓取日志关键字

创建数据表

create table load_dynamic_table (

id string,

url string,

referer string,

keyword string,

type string,

guid string,

pageId string,

moduleId string,

linkId string,

attachedInfo string,

sessionId string,

trackerU string,

trackerType string,

ip string,

trackerSrc string,

cookie string,

orderCode string,

trackTime string,

endUserId string,

firstLink string,

sessionViewNo string,

productId string,

curMerchantId string,

provinceId string,

cityId string,

fee string,

edmActivity string,

edmEmail string,

edmJobId string,

ieVersion string,

platform string,

internalKeyword string,

resultSum string,

currentPage string,

linkPosition string,

buttonPosition string

)partitioned by(date string,hour string)

row format delimited fields terminated by '\t';

创建表

脚本如何生成日志,脚本抓取日志关键字

将之前的数据重新命名下

(昨天凌晨3点、4点、5点的数据)

cp data1 2019122103.log

cp data1 2019122104.log

cp data1 2019122105.log

脚本如何生成日志,脚本抓取日志关键字

创建脚本:

vim load_to_hive.sh

#!/bin/bash

YESTERDAY=`date -d '-1 days' +%Y%m%d`

#定义日志数据目录,文件名称是在变化,不能写死

ACCESS_LOG_DIR=/data/test/$YESTERDAY .log

定义HIVE_HOME

HIVE_HOME=/opt/bigdata/hive-0.13.1-cdh5.3.6

for FILE in `ls $ACCESS_LOG_DIR`

do

DAY=${FILE:0:8}

HOUR=${FILE:8:2}

#echo " ${DAY} -- ${HOUR} "

$HIVE_HOME/bin/hive -e " load data local inpath '$ACCESS_LOG_DIR/$FILE' into table load_hive.load_dynamic_table partition(date='${DAY}',hour='${HOUR}') "

done

$HIVE_HOME/bin/hive -e "show partitions load_hive. load_dynamic_table "

脚本如何生成日志,脚本抓取日志关键字

我们先debug运行下脚本

sh -x load load_to_hive.sh

有错误

脚本如何生成日志,脚本抓取日志关键字

我们数据准备的有问题,做下更改

mkdir 20191222

脚本如何生成日志,脚本抓取日志关键字

cp data1 20191222/2019122201.log

cp data1 20191222/2019122202.log

cp data1 20191222/2019122203.log

脚本如何生成日志,脚本抓取日志关键字

更改下脚本

脚本如何生成日志,脚本抓取日志关键字

重新debug,没有问题了

脚本如何生成日志,脚本抓取日志关键字

脚本如何生成日志,脚本抓取日志关键字

查看分区情况:

show partitions load_hive.load_dynamic_table;

脚本如何生成日志,脚本抓取日志关键字

也可以-f的方式加载数据,创建一个sql文件

load data local inpath '${hiveconf:log_dir}/${hiveconf:file_path}' into table load_hive.load_dynamic_table partition(date='${hiveconf:DAY}',hour='${hiveconf:HOUR}')

脚本如何生成日志,脚本抓取日志关键字

修改我们的脚本

$HIVE_HOME/bin/hive --hiveconf log_dir=$ACCESS_LOG_DIR --hiveconf file_path=$FILE --hiveconf DAY=$DAY --hiveconf HOUR=$HOUR -f "/data/test/load_data.sql"

脚本如何生成日志,脚本抓取日志关键字

继续debug

sh -x load_to_hive.sh

脚本如何生成日志,脚本抓取日志关键字

脚本如何生成日志,脚本抓取日志关键字