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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用Hive LOAD语句导入数据时,如果遇到内存不足的情况,可以尝试以下方法: 1. 增加Hive服务的内存限制 可以通过修改Hive服务的JVM参数来增加内存限制,例如: ``` export HADOOP_HEAPSIZE=2048 hive --service hiveserver2 ``` 这将会将Hive服务的JVM内存限制增加到2GB。 2. 增加Hadoop集群的内存限制 如果Hive服务所在的Hadoop集群内存不足,可以增加集群的内存限制,例如: ``` export HADOOP_HEAPSIZE=2048 hadoop jar /path/to/hadoop-streaming.jar -Dmapred.job.map.memory.mb=2048 -Dmapred.job.reduce.memory.mb=2048 ... ``` 这将会将Hadoop集群的Map和Reduce任务的内存限制都增加到2GB。 3. 使用分区加载数据 如果数据量较大,可以考虑使用Hive的分区功能来分批导入数据,例如: ``` LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-01'); LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-02'); LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-03'); ``` 这将会将数据按日期分成多个分区来导入,减少一次性导入数据的内存压力。 4. 使用压缩格式 如果数据文件较大,可以考虑使用压缩格式来减小文件大小,例如: ``` SET hive.exec.compress.output=true; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; LOAD DATA INPATH '/path/to/data' INTO TABLE mytable; ``` 这将会将数据文件压缩成Snappy格式,减小文件大小,从而减少内存压力。 总之,Hive导入数据时内存不足可以通过增加内存限制、分区加载、使用压缩格式等方法来解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱知菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值