把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的表.
---------------------本文来自 爱知菜 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/rav009/art ... 022?utm_source=copy
|
|