当前位置: 首页 >数据库 > hive面试总结

hive面试总结

metastore 安装方式有什么区别

 

内嵌模式
  内嵌模式使用的是内嵌的 Derby 数据库来存储元数据,也不需要额外起 Metastore 服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

 

本地元存储
  本地安装 mysql 替代 derby 存储元数据,这种安装方式和嵌入式的区别在于,不再使用内嵌的 Derby 作为元数据的存储介质,而是使用其他数据库比如 MySQL 来存储元数据。hive 服务和 metastore 服务运行在同一个进程中,mysql 是单独的进程,可以同一台机器,也可以在远程机器上。

 

远程元存储(HiveServer2)
  Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.uris 设置为 metastore 服务器 URL,如果有多个 metastore 服务器,将 URL 之间用逗号分隔,metastore 服务器 URL 的格式为 thrift://127.0.0.1:9083。

hive 分区跟分桶的区别

 

  • 分区: 是以字段的形式在表结构中存在,通过 describe table 命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列)。
  • 分桶:对于表(table)或者分区,Hive 可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 也是针对某一列进行桶的组织。Hive 采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。实际使用比较少。

hive 有哪些 file formats

 

Text File format : 默认格式,数据不做压缩,磁盘开销大,数据解析开销大。Sequence File format :SequenceFile 是 Hadoop API 提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。SequenceFile 支持三种压缩选择:NONE, RECORD, BLOCK。 Record 压缩率低,一般建议使用 BLOCK 压缩。RC file format : RCFILE 是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个 record 在一个块上,避免读一个记录需要读取多个 block。其次,块数据列式存储,有利于数据压缩和快速的列存取。RCFile 目前没有性能优势,只有存储上能省 10% 的空间。Parquet : 列式数据存储。AVRO : avro Schema 数据序列化。ORC : 对RCFile做了一些优化,支持各种复杂的数据类型。

 

hive 最优的 file formats 是什么?

 

ORC file formats: 1、ORC 将行的集合存储在一个文件中,并且集合内的行数据将以列式存储。采用列式格式,压缩非常容易,从而降低了大量的存储成本。2、当查询时,会查询特定列而不是查询整行,因为记录是以列式存储的。3、ORC 会基于列创建索引,当查询的时候会很快。

 

hive 传参

 

使用 env 获取当前 shell 环境的环境变量eg: export datatime=’2017-11-10select * from tabliname where datatime = ${env:datatime};使用 --hivevar 方式传入hive --hivevar datatime ='datatime' --hivevar limit=10 -f filename.sqlselect * from tablename where datatime = ${hivevar:datatime} limit ${hivevar:limit}

 

Hive 数据分析面试

场景举例:北京市学生成绩分析
成绩的数据格式:时间,学校,年纪,姓名,科目,成绩
样例数据如下:

 

2013,北大,1,裘容絮,语文,972013,北大,1,庆眠拔,语文,522013,北大,1,乌洒筹,语文,852012,清华,0,钦尧,英语,612015,北理工,3,冼殿,物理,812016,北科,4,况飘索,化学,922014,北航,2,孔须,数学,702012,清华,0,王脊,英语,592014,北航,2,方部盾,数学,492014,北航,2,东门雹,数学,77

 

问题:

1、分组 TopN,选出今年每个学校、每个年级、分数前三的科目

 

hive -e "set mapreduce.job.queuename=low;select t.*from(selectschool,class,subjects,score,row_number() over (partition by school, class, subjects order by score desc) rank_codefrom spark_test_wxwhere partition_id = "2017") twhere t.rank_code <= 3;"

 

详解如下:
  row_number函数:row_number() 按指定的列进行分组生成行序列,从 1 开始,如果两行记录的分组列相同,则行序列 +1。
  over 函数:是一个窗口函数。
  over (order by score) 按照 score 排序进行累计,order by 是个默认的开窗函数。
  over (partition by class) 按照班级分区。
  over (partition by class order by score) 按照班级分区,并按着分数排序。
  over (order by score range between 2 preceding and 2 following) 窗口范围为当前行的数据幅度减2加2后的范围内的数据求和。

 

 

2、今年,北航,每个班级,每科的分数,及分数上下浮动 2 分的总和

 

select school, class, subjects, score,sum(score) over (order by score range between 2 preceding and 2 following) sscorefrom spark_test_wxwhere partition_id = "2017" and school="北航";

 

3、where 与 having:今年,清华 1 年级,总成绩大于 200 分的学生以及学生数

 

hive -e "set mapreduce.job.queuename=low;select school,class,name,sum(score) as total_score,count(1) over (partition by school, class) nctfrom spark_test_wxwhere partition_id = "2017" and school="清华" and class = 1group by school, class, namehaving total_score > 200;"

 

4、情景分析题
今年加入进来了 10 个学校,学校数据差异很大计算每个学校的平均分。
该题主要是考察数据倾斜的处理方式。
group by 方式很容易产生数据倾斜,需要注意一下几点:

Map 端部分聚合hive.map.aggr=true(用于设定是否在 map 端进行聚合,默认值为真,相当于 combine) hive.groupby.mapaggr.checkinterval=100000(用于设定 map 端进行聚合操作的条数)有数据倾斜时进行负载均衡设定 hive.groupby.skewindata,当选项设定为 true 是,生成的查询计划有两个 MapReduce 任务。(先打散数据)第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个 reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 group by key 有可能分发到不同的 reduce 中,从而达到负载均衡的目的;第二个 MapReduce 任务再根据预处理的数据结果按照 group by key 分布到 reduce 中(这个过程可以保证相同的 group by key 分布到同一个 reduce 中),最后完成最终的聚合操作。

 

作者:青紫天涯
来源链接:https://www.cnblogs.com/wcgstudy/p/11435440.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118153.html

标签:group by
分享给朋友:

“hive面试总结” 的相关文章

sql递归查询 2022年05月17日 21:40:33
mysql 查询表中前10条数据 2022年06月08日 04:35:17
mysql查询各分区数据量大小 2022年06月10日 23:41:45
如何查看MySQL的版本? 2022年06月11日 22:08:01
MYSQL查询一个月前的数据 2022年06月12日 09:48:55
MySql查询某一天的数据 2022年06月14日 10:43:20