脚本宝典收集整理的这篇文章主要介绍了不积跬步无以至千里,不积小流无以成江海,大数据高频面试题——Hive篇(一)用心整理23题,建议收藏!,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本期与大家分享的是,小北用心整理的与HIVE相关的常见的面试题,希望对大家能有帮助,大家喜欢就给点鼓励吧,欢迎各位大佬评论区指教讨论!
💜🧡💛制作不易,各位大佬们给点鼓励! 🧡💛💚点赞👍 ➕ 收藏⭐ ➕ 关注✅ 💛💚💙欢迎各位大佬指教,一键三连走起!
往期好文推荐F1a;
🔶🔷Hive从入门到精通,HQL硬核整理四万字,全面总结,附详细解析,赶紧收藏吧!!
🔶🔷Hadoop深入浅出 ——三大组件HDFS、Mapreduce、Yarn框架结构的深入解析式地详细学习【建议收藏!!!】
🔶🔷Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
🔶🔷硬核整理四万字,学会数据库只要一篇就够了,盘它!MySQL基本操作以及常用的内置函数汇总整理
🔶🔷Redis主从复制 以及 集群搭建 详细步骤解析,赶快收藏练手吧!
🔶🔷Hadoop集群HDFS、YARN高可用HA详细配置步骤说明,附ZookeePEr搭建详细步骤【建议收藏!!!】
🔶🔷SQL进阶-深入理解MySQL,JDBC连接MySQL实现增删改查,赶快收藏吧!
⭕ 🧡1、Hive的排序函数有哪些(4种) ⭕ 🧡2、Hive 内部表和外部表的区别 ⭕ 🧡3、Hive 和(传统)数据库比较 ⭕ 🧡4、说下你对窗口函数的了解 ⭕ 🧡5、窗口函数row_number,rank,dense_rank有什么区别 ⭕ 🧡6、Hive的自定义函数 ⭕ 🧡7、Hive 的架构 ⭕ 🧡8、 Hive 优化 ⭕ 🧡9、count(*),count(1),count(’ 字段名 ')区别 ⭕ 🧡10、hive的存储格式 ⭕ 🧡11、hive的数据压缩 ⭕ 🧡12、hive的元数据存储 ⭕ 🧡13、介绍一下hive的分区 ⭕ 🧡14、介绍下hive的分桶 ⭕ 🧡15、hive的组成部分有哪些 ⭕ 🧡16、使用hive的优缺点 ⭕ 🧡17、hive的SQL执行顺序 ⭕ 🧡18、hive有没有索引,如果有,请介绍下 ⭕ 🧡19、hive的后期运维,该如何调度 ⭕ 🧡20、数据仓库,为什么要分层 ⭕ 🧡21、数据倾斜,是怎么产生的 ⭕ 🧡22、数据倾斜,如何处理 ⭕ 🧡23、使用hive建数据仓库,有哪些模型
点我返回目录
点我返回目录
点我返回目录
点我返回目录
1) OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化 2) current ROW:当前行 3) n PRECEDING:往前 n 行数据 4) n FOLLOWING:往后 n 行数据 5) UNBOUNDED : 起 点 , UNBOUNDED PRECEDING 表 示 从 前 面 的 起 点 ,UNBOUNDED FOLLOWING 表示到后面的终点 6) LAG(col,n):往前第 n 行数据 7) LEAD(col,n):往后第 n 行数据 8) NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从 1 开始,对于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。
Hive窗口函数,详解
点我返回目录
ROW_NUMBER RANK DENSE_RANK 三者的区别,详解
点我返回目录
Hive自定义函数包括三种UDF、UDAF、UDTF
自定义函数使用步骤 :(在HIVE会话中add 自定义函数的jar文件,然后创建function继而使用函数)
点我返回目录
hive架构介绍,详解
点我返回目录
(1)MapJoin优化 如果没有指定 MapJoin 或者不符合 MapJoin 的条件时,Hive 解析器会将 Join 操作转换成 Common Join,也就是指:在 Reduce 阶段完成 join,会容易发生数据倾斜问题。我们可以使用 MapJoin 把小表全部加载到内存后再在 map 端进行 join操作,这样就避免了 reducer 处理。
2)行列过滤优化 列处理优化:在 SELECT 查询时,只拿需要的列,如果有需要的列,那么尽量使用分区过滤,并且少用 SELECT *
。 行处理优化:在分区剪裁过程中,当使用外关联时,若是将副表的过滤条件写在 Where 后面,那么就会先全表关联之后再过滤。 3)采用分桶技术、或者采用分区技术来进行hive优化 4)合理设置 Map 的个数
6)将小文件进行合并 在 Map 执行前合并小文件,从而减少 Map 数:CombineHiveinputFormat 具有对小文件进行合并的功能(系统默认的格式)。但是HiveInputFormat 没有对小文件合并功能。 7)合理设置 Reduce 数
8)常用参数
// 输出合并小文件
SET hive.merge.mapfiles = true; -- 默认 true,在 map-only 任务结束时合并
小文件
SET hive.merge.mapredfiles = true; -- 默认 false,在 map-reduce 任务结
束时合并小文件
SET hive.merge.size.per.task = 268435456; -- 默认 256M
SET hive.merge.smallfiles.avgsize = 16777216; -- 当输出文件的平均大小
小于该值时,启动一个独立的 map-reduce 任务进行文件 merge
点我返回目录
从执行结果上来看使用时它们的效率是一样的,但是:
点我返回目录
Hive的数据存储基于Hadoop HDFS。Hive没有专门的数据文件格式,常见的有以下几种:TEXTFILE、SEQUENCEFILE、AVRO、RCFILE、ORCFILE、PARQUET;其中TextFile、RCFile、ORC、Parquet为Hive最常用的四大存储格式;
存储效率及执行速度比较如下:
ORCFile存储文件读操作效率最高,耗时比较(ORC<Parquet<RCFile<TextFile) ORCFile存储文件占用空间少,压缩效率高 (ORC<Parquet<RCFile<TextFile)
点我返回目录
hive的数据压缩可以减少存储磁盘空间,可以降低单节点的磁盘IO,并且压缩后的数据占用的带宽会减少,可以加快数据在Hadoop集群中的流动速度,但是hive的数据压缩会需要花费额外的时间或者CPU资源来压缩和解压缩计算;数据压缩是文件处理很重要的方面,通过数据压缩来实现高效存储,而选择合适的压缩编解码器尤为重要。使用Avro和SequenceFile等文件格式是内置压缩支持的,压缩对用户几乎是完全透明的。对压缩编解码器的选择,通常会针对压缩编解码器的功能和性能是有一定的选择准则的,例如:
点我返回目录
hive默认元数据(Metastore)是存储在derby中的,但是derby是单session的,一般会修改存储在mysql中,hive的元数据表中存储着表的属性、名称、列、分区及其属性以及表数据所在的目录等等,即metastore中存储着hive创建的数据库,数据表等的元信息。例如元数据存储在mysql中,当客户端存取元数据时,客户端会先连接metastore服务,然后metastore再去连接MySQL来存取元数据,而通过metastore服务就可以实现多个客户端同时连接,而这些客户端就不需要知道MySQL的用户名和密码就可以操作存储在MySQL中的元数据,这样客户端就只需要连接metastore即可。
hive的元数据存储有三种部署方式:内嵌模式(Embedded)、本地模式(Local)以及远程模式(Remote);
点我返回目录
在Hive 中使用Select查询语句一般会扫描整个表内容,而当单个表中的数据量越来越大的时候,使用select查询就会消耗很多不必要的资源。而这时就引入了分区的概念,分区表实际上是在表的目录下再以分区命名,创建子目录,hive分区就是进行分区裁剪,避免全表扫描,减少MapReduce处理的数据量,从而提高效率。但是分区也不是越多越好,一般都不超过3级,根据实际业务来衡量。
点我返回目录
因为不是所有的数据集都可以形成合理的分区,为了解决这一问题hive中引入了分桶的概念,分桶就是指对于每一个表或者分区,可以进一步地细分成桶,而桶是对数据进行更细粒度的划分。Hive默认是关闭分桶的;当我们往分桶表中插入数据的时候,会根据 clustered by 指定的字段进行hash分组,并对指定的buckets个数进行取余,进而可以将数据分割成buckets个数个文件,以达到数据均匀分布,从而可以解决Map端的“数据倾斜”的问题,这样方便我们取抽样数据,提高Map join的效率,然而,我们实际使用时的分桶字段则需要根据业务进行设定。
点我返回目录
hive的组成部分包括有:
点我返回目录
使用hive的优势:
点我返回目录
From where select group by having order by
点我返回目录
在hive 0.7.0版本之后就,hive就添加了索引(其实就是索引表),提高了hive查询的指定列的速度;在索引表中存储着索引列的值(该列的值对应着hdfs的文件路径,也是指数据文件中的偏移量)。当通过索引列来执行查询时,hive会首先通过一个mapreduce去查询索引表,并且根据索引列的过滤条件查询出该索引列的值,然后根据值查找所对应的hdfs的文件目录以及偏移量,并且把这些数据输出到hdfs的一个文件中,然后再根据这个文件中去筛选原文件,来作为查询job的输入。使用索引,在select查询时可以避免全表扫描和资源浪费,同时也可以增快含有group by的分组语句的查询速度。
点我返回目录
我们可以通过将sql语句写在脚本中,然后使用脚本来执行hive的sql语句;可以监控任务的调度页面;也可以通过使用azkaban或者oozie来进行任务的调度。
点我返回目录
点我返回目录
数据倾斜一般是由于,key分布不均匀(实际上就是key重复, 比如 group by 或者 distinct的时候,会因为key的分布不均匀而产生数据倾斜);其次,就是数据重复,导致join操作时 笛卡尔积 而造成的数据膨胀。 数据倾斜主要表现在,任务进度长时间维持在99%(或100%),而查看任务的监控页面,发现只有少量的(1个或几个)reduce子任务未完成。这是因为其处理的数据量和其他reduce差异过大,而导致的数据倾斜。还有一种就是单一的reduce的记录数与平均记录数差异过大,通常这个差异可能会达到3倍以上,并且最长时长要远大于平均时长。
点我返回目录
解决数据倾斜问题,我们要首先看下业务上面的数据源头能否对数据进行过滤,比如 key为 null的数据,可以在业务层面进行优化。其次,再找到key重复的具体值,对该值进行拆分,hash或异步求和。
点我返回目录
hive数仓建模有星型,雪花型和星座型这主要的三种建仓模型;其中,星型是由多张维度表和一张事实表组成的,而维度表之间没有关系。若使用星型模型建数仓,那么对数据查询的性能要好些但是存储的数据会有冗余。雪花型建仓模型是星型建模的扩展,雪花型的维度表之间是有关系的,该模型也只有一张事实表。使用雪华型建仓,会减少存储数据的冗余,但是对数据的查询的性能就会有所损失,它需要通过多级连接来查询数据。而星座型建模也是星型的扩展,不过该模型会存在有多张事实表。
以上是脚本宝典为你收集整理的不积跬步无以至千里,不积小流无以成江海,大数据高频面试题——Hive篇(一)用心整理23题,建议收藏!全部内容,希望文章能够帮你解决不积跬步无以至千里,不积小流无以成江海,大数据高频面试题——Hive篇(一)用心整理23题,建议收藏!所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。