揭秘hive常见面试题(六)-20道

为什么创建类 DataWritable?

【揭秘hive常见面试题(一)-13】

如何实现统计手机流量?

【揭秘hive常见面试题(一)-13】

对比 hive 与 mapreduce 统计手机流量的区别?

【揭秘hive常见面试题(一)-13】

如今有 10 个文件夹,每个文件夹都有 1000000 个 url.如今让你找出top1000000url

不思考歪斜,功能,运用 2 个 job,第一个 job 直接用 filesystem 读取 10 个文件夹作为
map 输入,url 做 key,reduce 计算个 url 的 sum,下一个 job map 顶用 url 作 key,运用-sum 作二次排序,reduce 中取 top10000000第二种方法,建 hive 表 A,挂分区 channel,每个文件夹是一个分区.select x.url,x.c from(select url,count(1) as c from A where channel ='' group byurl)x order by x.c desc limie 1000000;

hive 的物理模型跟传统数据库的不同

hive 底层与数据库交互原理

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。
Hive集成HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列(columns)和列类型(column types)与HBase表的列族(column families)及列限定词(column qualifiers)建立关联。每一个在Hive表中的域都存在于HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的RowKey对应到Hive中为选择一个域使用:key来对应,列族(cf:)映射到Hive中的其它所有域,列为(cf:cq)。

有一个 1G 大小的一个文件,里面每一行是一个词,词的大小不超过 16 字节,内存限制大小是 1M。返回频数最高的 100 个词。

方案:顺序读文件中,对于每个词 x,取 hash(x)%5000,然后按照该值存到 5000 个小文
件(记为 x0,x1,…x4999)中。这样每个文件大概是 200k 左右。如果其中的有的文件超过了 1M 大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过 1M。对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用 trie 树/hash_map 等),并取出出现频率最大的 100 个词(可以用含 100 个结 点的最小堆),并把 100 个词及相应的频率存入文件,这样又得到了 5000 个文件。下一步就是把这 5000 个文件进行归并(类似与归并排序)的过程了。

hive 中的压缩格式 RCFile、TextFile、SequenceFile 各有什么区别?以上 3 种格式一样大的文件哪个占用空间大小

image.png

你们的 hive 处理数据能达到的指标是多少?

Hive分桶

在实际生产环境中,每一个表都可能存储很多的数据,如果直接进行join,通过笛卡尔积会造成大量的shuffle溢出,会延迟job完成时间甚至内存不足的想象,那么就可以对两个表先进行分桶,然后在join。这样就可以大大减少笛卡尔积

Hive内部表和外部表的区别:

1、导入数据的时候:
外部表是复制,内部表是剪切
2、删除表的时候:
外部表只删除元数据,数据仍然保留
内部表会删除元数据和数据

Hive中的UDF

先开发一个java类,继承UDF,并重载evaluate方法

常用的hive分析函数

1、row_number:行号递增
2、rank:行号递增,如果有相等的,相当的部分行号一样。然后下面直接递增N
3、dense_rank:行号递增,相等的行号仍然递增

join中出现数据倾斜优化

hive.optimize.skewjoin=true;
如果join过程中出现了数据倾斜,应该设置为true
set hive.skewjoin.key=100000;
这个是join的键对应的记录条数超过这个值则会进行优化,优化措施:正常是只有一个job的,优化后会有两个job。当数据量达到100000以上的时候,hive会在启动一个job,然后将原有的数据的key加上的一个随机数,将数据打乱。这样数据就会分不到不同的节点上计算。在原打乱的基础上在做一次计算,然后启动一个job,恢复原来的key,在做一次计算。

Hive中的mapjoin

就是将小表加载到缓存中,这样所有的节点都可以访问到这个小表
开启方式:
set hive.auto.convert.join=true;
hive.mapjoin.smalltable.filesize默认值是25Mb
这个是自动判断的,当文件小于25M的时候,自动启动
或者这样使用:手动
select /+ mapjoin(A)/ f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)
其中A表是小表,B表是大表,这样让join发生在map端
mapjoin的使用场景:
1、关联操作中有一张小表
2、不等值的链接操作
mapjoin最好是手动操作

hive bucket join

1、两个表以相同的方式划分桶
2、两个表的桶的个数是倍数关系
create table order(cid int , price float) clustered by (cid) into 32 buckets;
create table customer(id int , first string) clustered by(id) into 32 buckets;
select price from order t join customer s on t.cid=s.id;

关于where和join的优化

优化前:
select o* from order o join customer c on o.cid=c.id where o.time='2017-01-01'
优化后:
select o.* from (select cid from order where time='2016-01-01') o join customer c on o.cid=c.id;
优化前是先join后再通过where进行过滤,这样并没有减轻reduce的压力。
优化后是先在map端执行where,过滤数据,然后在join。这样就会降低计算量

Hive group by优化

1、hive.groupby.skewindata=true;
如果group by过程出现倾斜,应该设置为true
2、set hive.groupby.mapagger.checkinterval=100000;
group对应的键对应的记录条数超过这个值则会进行优化,这个仍然是启动两个job

hive的表优化

1、分区
‘表’相当于一个大目录,分区就是在这个大目录下面的小目录
分区包括静态分区和动态分区
静态分区:就是在建表的时候指定分区的
如果数据量量多,一个分区需要一个insert,就会很麻烦,所以可以使用动态分区
动态分区:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
默认值:strict
描述:strict是避免全分区字段是动态的,必须有至少一个分区字段是指定有值的

hive job的优化 并行化执行

hive执行过程中的job是按照默认的顺序来执行的,如果没有太大的依赖关系,最好并行执行,减少执行的时间,每个查询被hive转化成多个阶段,有些阶段关联性不大,则可以并行执行,减少执行时间。
set hive.exec.parallel=true;
set hive.exec.parallel.thread.numbe=16(默认8);

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