向HIVE导入windows平台(dos类型)的日志

本文介绍如何将Windows系统的日志文件转换为适用于Hive的数据格式,并通过分割大型文件及利用awk命令处理时间格式,最终导入Hive进行数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把windows的日志复制到linux目录下, 可以先用file,head,tail等命令查看文件概况.

使用dos2unix命令将文件转成unix格式


由于HIVE的时间类型只支持timestamp(hive中timestamp的格式是"YYYY-MM-DD HH:MM:SS"), 所以我们要把日志中的时间列转成timestamp

这里我们使用awk命令(原始时间格式: 2014-02-01_14:09:34.000000):

head sample_data.txt | awk 'BEGIN{FS=",";OFS=","} {gsub(/[-:]/," ",$6);gsub(/[-:_]/," ",$7);print $1,$2,$3,$4,$5,strftime("%Y-%m-%d %H:%M:%S",mktime(substr($6,1,19)))}' 
这里使用了awk命令的内置函数 gsub, substr和mktime. 注意gsub的返回值不是改完的以后的字符串, 而是匹配了几次,改了几个字符这样的值, 改动已经直接应用到列上了

到这里可能碰到的一个问题是日志文件太大, 一个解决办法是 用 wc+split

wc -l file.txt #获取文件行数

#分割文件,每个文件三十万行,分割后的文件名字前缀为file,-d表示后缀使用数字,-a 2表示后缀有两位
split -l 300000 file.txt file -d -a 2

分割后的文件名字如: file00,file01,.....

再对这些子文件使用awk命令即可.


使用hadoop fs -put 命令把文件放入dfs中, 使用hive的load data inpath命令导入数据进表.

或者使用hive的load data local inpath直接把awk处理后的文件导入hive的表.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱知菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值