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

本文介绍如何将Windows日志文件转换为Linux格式,使用awk命令处理时间戳,以便符合Hive的timestamp格式要求。并通过wc和split命令分割大文件,最后使用Hadoop和Hive命令将数据导入Hive表。

把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的表.

---------------------本文来自 爱知菜 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/rav009/art ... 022?utm_source=copy 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值