Hive企业使用优化二

大表【拆分】

子表
根据实际业务可以把大表拆分为几个小表。
例如可以把merit_log20180304表拆分出ip,user,url,date 等字表。

外部表、分区表

  • 结合使用 :把分区和外部表结合使用
create external table if not exists  emp_partition(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
partitioned by (month string)
row format delimited fields terminated by '\t'
  • 多级分区
drop table default.kwu_tracklog;  
create EXTERNAL table default.kwu_tracklog (   
    datetime string comment "时间 : 如2015-01-01 11:30:01:123",  
    ip string comment "IP:用户本机IP或用户所在网段对外路由IP",  
    cookieid string comment "用户cookie:和讯统一在用户端生成的唯一标志",  
    userid string comment "用户和讯注册ID :用户在和讯网的注册ID",   
    logserverip string comment "记录日志服务器IP : 和讯的日志收集服务器IP",  
    referer string comment "来源 :用户浏览网页的REFER",  
    requesturl string comment "访问网址 : 当前访问网址" ,  
    remark1 string comment "【暂时没用】 :该数据无意义,由于早期加入目前不能去除",  
    remark2 string comment "【暂时没用】 : 该数据无意义,由于早期加入目前不能去除",  
    alexaflag string comment "ALEXA标志  :这个字段也是早期加入,当用户安装alexa工具时值为1,否则为0.早期加入,目前来看应该没有任何意义了。",  
    ua string comment "UA :用户浏览器UA",  
    wirelessflag string comment "无线频道标志:给无线频道专用的,一个单词,表示该文章对应和讯哪一个频道"  
)   
comment "浏览轨迹日志"  
partitioned by(day string comment "按天的分区表字段",hour string comment "按小时的分区表字段")
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '  
location '/hdfs/hive/default/kwu_tracklog';  
  • 导入数据
load data local inpath '/diskg/hexunlogs/tracklog_by5min/tracklog_10.0.121.74/20151014/2015101414*.dat' overwrite into table default.kwu_tracklog partition (day='20151014',hour='14');  
load data local inpath '/diskg/hexunlogs/tracklog_by5min/tracklog_10.0.121.74/20151014/2015101415*.dat' overwrite into table default.kwu_tracklog partition (day='20151014',hour='15'); 
  • 测试导入数据
select count(*) from default.kwu_tracklog where day='20151014' and hour='14' limit 1;  
select count(*) from default.kwu_tracklog where day='20151014' and hour='15' limit 1; 

数据

  • 存储格式(textfile、orcfile、parquet)
drop table default.kwu_tracklog;  
create EXTERNAL table default.kwu_tracklog (   
    datetime string comment "时间 : 如2015-01-01 11:30:01:123",  
    ip string comment "IP:用户本机IP或用户所在网段对外路由IP",  
    cookieid string comment "用户cookie:和讯统一在用户端生成的唯一标志",  
    userid string comment "用户和讯注册ID :用户在和讯网的注册ID",   
    logserverip string comment "记录日志服务器IP : 和讯的日志收集服务器IP",  
    referer string comment "来源 :用户浏览网页的REFER",  
    requesturl string comment "访问网址 : 当前访问网址" ,  
    remark1 string comment "【暂时没用】 :该数据无意义,由于早期加入目前不能去除",  
    remark2 string comment "【暂时没用】 : 该数据无意义,由于早期加入目前不能去除",  
    alexaflag string comment "ALEXA标志  :这个字段也是早期加入,当用户安装alexa工具时值为1,否则为0.早期加入,目前来看应该没有任何意义了。",  
    ua string comment "UA :用户浏览器UA",  
    wirelessflag string comment "无线频道标志:给无线频道专用的,一个单词,表示该文章对应和讯哪一个频道"  
)   
comment "浏览轨迹日志"  
partitioned by(day string comment "按天的分区表字段",hour string comment "按小时的分区表字段")  
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '  
STORED AS ORCFILE
location '/hdfs/hive/default/kwu_tracklog';
  • 数据压缩(snappy)


SQL

优化SQL语句

  • join
语法
join_table:
    table_reference [INNER] JOIN table_factor [join_condition]
  | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition
  | table_reference LEFT SEMI JOIN table_reference join_condition
  | table_reference CROSS JOIN table_reference [join_condition] (as of Hive 0.10)
 
table_reference:
    table_factor
  | join_table
 
table_factor:
    tbl_name [alias]
  | table_subquery alias
  | ( table_references )
 
join_condition:
    ON expression

join 分类

1、Common/Shuffle/Reduce Join

连接发生的阶段,发生在Reduce task。
大表对大表
每个表中的数据都是在文件中读取的。


2、Map Join

连接发生的阶段,发生在Map task。
小表对大表
a、大表的数据从文件中读取 cid
b、小表中的数据从内存中读取。根据cid把小表数据从内存中取出。实现方式是通过DistinctedCache


3、 SMB Join(SMB(Sort-Merge-Bucket) Join)


过程描述:排序-->合并-->入桶


关于桶的文章见Hive 基础之:分区、桶、Sort Merge Bucket Join

MapReduce

Reduce Number
JVM重用
推测执行

优化方式

  • 让hive自动判断是执行哪种join。大表对小表还是大表对小表。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容