| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Hive面试题 -> 正文阅读 |
|
[大数据]Hive面试题 |
Hive面试题1.Hive的架构2.Hive和数据库比较Hive 和数据库除了拥有类似的查询语言,再无类似之处。 1)数据存储位置 Hive 存储在 HDFS 。数据库将数据保存在块设备或者本地文件系统中。 2)数据更新 Hive中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的, 3)执行延迟 Hive 执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。 4)数据规模 Hive支持很大规模的数据计算;数据库可以支持的数据规模较小。 hive和传统数据库之间的区别1、写时模式和读时模式 3.内部表和外部表1.hive内部表和外部表的区别 内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除 外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。 这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 2.什么时候使用内部表,什么时候使用外部表
4.分区分桶的区别,为什么要分区**分区表:**原来的一个大表存储的时候分成不同的数据目录进行存储。如果说是单分区表,那么在表的目录下就只有一级子目录,如果说是多分区表,那么在表的目录下有多少分区就有多少级子目录。不管是单分区表,还是多分区表,在表的目录下,和非最终分区目录下是不能直接存储数据文件的
有了分区为什么还要分桶? (2) 使取样( sampling)更高效。在处理大规模数据集时,在开发和修改査询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。 5.四个By区别1)Sort By:分区内有序; 2)Order By:全局排序,只有一个Reducer; 3)Distrbute By:类似MR中Partition,进行分区,结合sort by使用。 4) Cluster By:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。 1、 order by可以指定desc降序asc升序 order by会对输入做全局排序,因此只有一个 reducer(多个 reducer无法保证全局有序),然而只有一个 Reducer,会导致当输入规模较大时,消耗较长的计算时间。 2、 sort by不是全局排序,其在数据进入 reducer前完成排序,因此,如果用 sort by进行排序并且设置 mapped. reduce. tasks〉1,则 sort by只会保证每个 reducer的输出有序,并不保证全局有序。(全排序实现:先用 sortby保证每个 reducer输出有序,然后在进行 order by归并下前面所有的 reducer输出进行单个 reducer排序,实现全局有序。) 3、 distribute by(重要) distribute by是控制在map端如何拆分数据给 reduce端的。hive会根据 distribute by后面列,对应 reduce的个数进行分发,默认是采用hash算法。sort by为每个 reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个 reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此, distribute by经常和 sort by配合使用。 4、 cluster by cluster by具有 distribute by和 sort by的组合功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC 如何实现组内排序或者组内TopN?语法格式 row number(0)OVER( partition by COLI order by CL2desc)rank先对COL1列进行分区,再对COL2列进行排序。组内排序 6.窗口函数RANK() 排序相同时会重复,总数不会变 DENSE_RANK() 排序相同时会重复,总数会减少 ROW_NUMBER() 会根据顺序计算 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类型。 7.自定义UDF、UDTF在项目中是否自定义过UDF、UDTF函数,以及用他们处理了什么问题,及自定义步骤? 1)自定义过。 2)用UDF函数解析公共字段;用UDTF函数解析事件字段。 自定义UDF:继承UDF,重写evaluate方法 自定义UDTF:继承自GenericUDTF,重写3个方法:initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close 为什么要自定义UDF/UDTF,因为自定义函数,可以自己埋点Log打印日志,出错或者数据异常,方便调试. 8.udf udaf udtf区别UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。 UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。 UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。lateral view explore() 简单来说: UDF:返回对应值,一对一 UDAF:返回聚类值,多对一 UDTF:返回拆分值,一对多 9.Hive优化https://blog.csdn.net/qq_37933018/article/details/106891773(行哥) (1条消息) 真正让你明白Hive调优系列3:笛卡尔乘积,小表join大表,Mapjoin等问题_涤生手记-CSDN博客 1)MapJoin
10.大表join小表产生的问题,怎么解决?mapjoin方案 join因为空值导致长尾(key为空值是用随机值代替) join因为热点值导致长尾,也可以将热点数据和非热点数据分开处理,最后合并 Hive中小表与大表关联(join)的性能分析 : https://blog.csdn.net/niuyan666/article/details/118579181 11.hive有哪些保存元数据的方式,分别有什么特点。Hive Metastore有三种配置方式,分别是:
Metadata、Metastore作用 metadata即元数据。元数据包含用Hive创建的database、tabel等的元信息。 三种配置方式区别 内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。 内存数据库derby,安装小,但是数据存在内存,不稳定 mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。 12.hive的判断函数有哪些hive 的条件判断(if、coalesce、case) 13.简单描述一下HIVE的功能?用hive创建表几种方式?hive表有几种?hive主要是做离线分析的hive建表有三种方式
hive表有2种:内部表和外部表 14.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因选择lzo,因为该压缩算法可切分,压缩率比较高,解压缩速度很快,非常适合日志 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0L3WJIK-1628167496677)(C:/Users/67332/AppData/Roaming/Typora/typora-user-images/image-20210723232108183.png)] 15.若在hive中建立分区仍不能优化查询效率,建表时如何优化可以重新建表为分区分桶表 16.union all和union的区别union 去重 union oll 不去重 17.如何解决hive数据倾斜的问题18.简述delete,drop,truncate的区别delet 删除数据 drop 删除表 truncate 摧毁表结构并重建 19.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?hive 默认的字段分隔符为 ascii 码的控制符\001(^A),建表的时候用 fields terminated by ‘\001’ 遇到过字段里边有\t 的情况,自定义 InputFormat,替换为其他分隔符再做后续处理 20.mapjoin的原理MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。 21.在hive的row_number中distribute by 和 partition by的区别row_number() over( partition by 分组的字段 order by 排序的字段) as rank(rank 可随意定义表示排序的标识); 22.hive都有哪些函数,你平常工作中用到哪些
23.手写sql,连续活跃用户24.left semi join和left join区别
25.聊聊hive的执行引擎,spark和mr的区别?引擎是mr,基于磁盘进行计算,比较慢 引擎是spark,基于内存进行计算,速度比较快 对于超大数据量的话,hiveOnSpark可能会有内存溢出情况 26.hive的join底层mr是如何实现的?https://blog.csdn.net/u013668852/article/details/79768266 27.sql问题,连续几天活跃的用户?28.Hive的执行流程?
29.sql语句的执行顺序from-where-group by-having -select-order by -limitfrom-where-group by-having -select-order by -limit from-where-group by -(select 后面的语句 上课讲的) -having -select-order by -limit 30.on和where的区别不考虑where条件下,left join 会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)
31.hive中导入数据的4种方式https://blog.csdn.net/niuyan666/article/details/119412890 32. Hive如何将hsql转化成mapreduce任务的解析器将sql字符串转化成抽象的语法树,遍历语法树生成逻辑执行计划,优化器对执行计划进行优化,然后执行器将优化后的逻辑计划翻译成mapreduce任务。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:00:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |