注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

碳基体

http://weibo.com/tanjiti

 
 
 
 
 

日志

 
 

将hdfs web日志映射到hive table的方法  

2015-12-16 19:06:31|  分类: 琐碎技术点 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前段时间,自己仿modsecurity 规则,用mapreduce写了个搜索任务,任务慢到挂,后来想想还是将数据导入hive,让hive来干ETL的工作。
考虑到集群空间非常吃紧,不能增加存储量,因此选择外部表的方式

hadoop的目录结构如下
/data/xxx/20151216/00/xxx.log 
第一步:创建表

CREATE EXTERNAL TABLE IF NOT EXISTS xxx_access_log(
http_host STRING,
ip STRING,
time STRING,
http_method STRING,
uri STRING,
http_response_code STRING,
body_bytes_send INT,
referer STRING,
user_agent STRING,
x_forwarded_for STRING,
cookie STRING,
request_time STRING,
content_length INT,
request_body STRING)
COMMENT 'input xxx access log'
PARTITIONED BY(event_date STRING, event_hour STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES(
"input.regex" = "自己的正则")
STORED AS TEXTFILE
LOCATION "/data/xxx";

第二步: 增加分区,导入数据

ALTER TABLE $table_name ADD IF NOT EXISTS

PARTITION event_date='20151216', event_hour='00' location "/data/xxx/20151216/00";

PARTITION event_date='20151216', event_hour='01' location "/data/xxx/20151216/01";

...

PARTITION event_date='20151216', event_hour='23' location "/data/xxx/20151216/23";


需要一一指定分区,看起来有点蠢,也查了查自动分区的方法 
http://stackoverflow.com/questions/7544378/hive-dynamic-partition-adding-to-external-table 待试验

问题1:当serde使用以下包的时候

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES

数据导入后,会因为hive找不到hive-contrib-xxx.jar包,查询时会报错

解决方案将hive-contrib-xxx.jar包的位置写入环境变量中

hive/conf/hive-env.sh

增加

export HIVE_AUX_JARS_PATH=/home/xxx/hive/lib/hive-contrib-xxx.jar


参考:
http://hadooptutorial.info/processing-logs-in-hive/
  评论这张
 
阅读(386)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017