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

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




猜你喜欢

转载自blog.csdn.net/rav009/article/details/80320022