华亮建设集团股份有限公司网站,跨境电商是干嘛的,神奇的工作室最新网站,谷歌优化培训本文目录
No1. 请谈一下 Hive 的特点No2. Hive 底层与数据库交互原理#xff1f;No3. Hive 的 HSQL 转换为 MapReduce 的过程#xff1f;No4. Hive 的两张表关联#xff0c;使用 MapReduce 怎么实现#xff1f;No5. 请说明 hive 中 Sort By#xff0c;Order By#xff0…
本文目录
No1. 请谈一下 Hive 的特点No2. Hive 底层与数据库交互原理No3. Hive 的 HSQL 转换为 MapReduce 的过程No4. Hive 的两张表关联使用 MapReduce 怎么实现No5. 请说明 hive 中 Sort ByOrder ByCluster ByDistrbute By 各代表什么意思No6. 写出 hive 中 split、coalesce 及 collect_list 函数的用法可举例No7. Hive 有哪些方式保存元数据各有哪些特点No.8 内部表和外部表的区别以及各自的使用场景No9. Hive 中的压缩格式 TextFile、SequenceFile、RCfile 、ORCfile 各有什么区别 1. TextFile2. SequenceFile3. RCFile4. ORCFileNo10. 所有的 Hive 任务都会有 MapReduce 的执行吗No11. Hive 的函数UDF、UDAF、UDTF 的区别No12. 说说对 Hive 桶表的理解No13. Hive 表关联查询如何解决数据倾斜的问题No14. 了解过 Hive 的哪些窗口函数No.15 小文件是如何产生的解决方案No.16 Tez 引擎优点1请谈一下 Hive 的特点 hive 是基于 Hadoop 的一个数据仓库工具可以将结构化的数据文件映射为一张数据库表并提供完整的 sql 查询功能可以将 sql 语句转换为MapReduce 任务进行运行。 其优点是学习成本低可以通过类 SQL 语句快速实现简单的 MapReduce 统计不必开发专门的 MapReduce 应用十分适合数据仓库的统计分析但是 Hive 不支持实时查询。
2Hive 底层与数据库交互原理 由于 Hive 的元数据可能要面临不断地更新、修改和读取操作所以它显然不适合使用 Hadoop 文件系统进行存储。 目前 Hive 将元数据存储在 RDBMS 中比如存储在 MySQL、Derby 中。元数据信息包括存在的表、表的列、权限和更多的其他信息。
3Hive 的 HSQL 转换为 MapReduce 的过程 HiveSQL - AST(抽象语法树) - QB(查询块) - OperatorTree操作树- 优化后的操作树 - mapreduce 任务树 - 优化后的 mapreduce 任务树 过程描述如下 SQL ParserAntlr 定义 SQL 的语法规则完成 SQL 词法语法解析将 SQL 转化为抽象语法树 AST Tree Semantic Analyzer遍历 AST Tree抽象出查询的基本组成单元 QueryBlock Logical plan遍历 QueryBlock翻译为执行操作树 OperatorTree Logical plan optimizer: 逻辑层优化器进行 OperatorTree 变换合并不必要的 ReduceSinkOperator减少 shuffle 数据量 Physical plan遍历 OperatorTree翻译为 MapReduce 任务 Logical plan optimizer物理层优化器进行 MapReduce 任务的变换生成最终的执行计划
4Hive 的两张表关联使用 MapReduce 怎么实现 如果其中有一张表为小表直接使用 map 端 join 的方式map 端加载小表进行聚合。 如果两张都是大表例如分别是客户表和订单表 。那么采用联合 key联合 key 的第一个组成部分是 join on 中的公共字段第二部分是一个 flag0 代表表 A1 代表表 B由此让 Reduce 区分客户信息和订单信息在 Mapper 中同时处理两张表的信息将 join on 公共字段相同的数据划分到同一个分区中进而传递到一个 Reduce 中然后在 Reduce 中实现聚合。
5请说明 hive 中 Sort ByOrder ByCluster ByDistrbute By 各代表什么意思 order by会对输入做全局排序因此只有一个 reducer多个 reducer 无法保证全局有序。只有一个 reducer会导致当输入规模较大时需要较长的计算时间 。 sort by分区内有序不是全局排序其在数据进入 reducer 前完成排序 distribute by按照指定的字段对数据进行划分输出到不同的 reduce 中 结合 sory by 使用 cluster by当Distribute by和Sorts by字段相同时可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序不能指定排序规则为ASC或者DESC。
6写出 hive 中 split、coalesce 及 collect_list 函数的用法可举例 split 将字符串转化为数组即split(a,b,c,d , ,) [a,b,c,d] coalesce(T v1, T v2, …) 返回参数中的第一个非空值如果所有值都为 NULL那么返回 NULL。 collect_list 列出该字段所有的值不去重 select collect_list(id) from table
7Hive 有哪些方式保存元数据各有哪些特点 Hive 支持三种不同的元存储服务器分别为内嵌式元存储服务器、本地元存储服务器、远程元存储服务器每种存储方式使用不同的配置参数 。 内嵌式元存储主要用于单元测试在该模式下每次只有一个进程可以连接到元存储Derby 是内嵌式元存储的默认数据库 。 在本地模式下每个 Hive 客户端都会打开到数据存储的连接并在该连接上请求 SQL 查询 。 在远程模式下所有的 Hive 客户端都将打开一个到元数据服务器的连接该服务器依次查询元数据元数据服务器和客户端之间使用 Thrift 协议通信 。
8内部表和外部表的区别以及各自的使用场景
内部表如果 Hive 中没有特别指定则默认创建的表都是管理表也称内部表。由Hive负责管理表中的数据管理表不共享数据。删除管理表时会删除管理表中的数据和元数据信息 。
外部表当一份数据需要被共享时可以创建一个外部表指向这份数据 。 删除该表并不会删除掉原始数据删除的是表的元数据。这样外部表相对来说更加安全些数据组织也更加灵活方便共享源数据 。当表结构或者分区数发生变化时需要进行一步修复的操作。
9Hive 中的压缩格式 TextFile、SequenceFile、RCfile 、ORCfile 各有什么区别
1. TextFile 默认格式存储方式为行存储数据不做压缩磁盘开销大数据解析开销大。可结合 Gzip、Bzip2 使用(系统自动检查执行查询时自动解压)但使用 这种方式压缩后的文件不支持 splitHive 不会对数据进行切分从而无法对数据进行并行操作。并且在反序列化过程中必须逐个字符判断是不是分隔符和行结束符因此反序列化开销会比 SequenceFile 高几十倍 。
2. SequenceFile SequenceFile 是 Hadoop API 提供的一种二进制文件支持存储方式为行存储其具有使用方便、可分割、可压缩的特点。 SequenceFile 支持三种压缩选择NONERECORDBLOCK。Record 压缩率低一般建议使用 BLOCK 压缩。 优势是文件和 hadoop api 中的 MapFile 是相互兼容的 。
3、RCFile 存储方式数据按行分块每块按列存储。结合了行存储和列存储的优点 首先RCFile 保证同一行的数据位于同一节点因此元组重构的开销很低 其次像列存储一样RCFile 能够利用列维度的数据压缩并且能跳过不必要的列读取
4、ORCFile 存储方式数据按行分块 每块按照列存储。 压缩快、快速列存取。 效率比 rcfile 高是 rcfile 的改良版本。
总结
相比 TEXTFILE 和 SEQUENCEFILERCFILE 由于列式存储方式数据加载时性能消耗较大但是具有较好的压缩比和查询响应。 数据仓库的特点是一次写入、多次读取因此整体来看RCFILE 相比其余两种格式具有较明显的优势。
10所有的 Hive 任务都会有 MapReduce 的执行吗 不是从 Hive0.10.0 版本开始对于简单的不需要聚合的类似 SELECT from LIMIT n 语句不需要起 MapReduce job直接通过 Fetch task 获取数据。
11Hive 的函数UDF、UDAF、UDTF 的区别 UDF单行进入单行输出 UDAF多行进入单行输出 UDTF单行输入多行输出
12说说对 Hive 桶表的理解 桶表是对数据进行哈希取值然后放到不同文件中存储 。 数据加载到桶表时会对字段取 hash 值然后与桶的数量取模。把数据放到对应的文件中。物理上每个桶就是表(或分区目录里的一个文件一个作业产生的桶(输出文件)和 reduce 任务个数相同 。 桶表专门用于抽样查询是很专业性的不是日常用来存储数据的表需要抽样查询时才创建和使用桶表。
13 Hive 表关联查询如何解决数据倾斜的问题 定位原因 map 输出数据按 key Hash 的分配到 reduce 中由于 key 分布不均匀、业务数据本身的特点、建表时考虑不周、某些 SQL 语句本身就有数据倾斜等原因造成的 reduce 上的数据量差异过大。 如何避免 对于 key 为空产生的数据倾斜可以对其赋予一个随机值 解决方案:
1参数调节
hive.map.aggr true
hive.groupby.skewindatatrue 有数据倾斜的时候进行负载均衡当选项设定位 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中Map 的输出结果集合会随机分布到 Reduce 中每个 Reduce 做部分聚合操作并输出结果这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中从而达到负载均衡的目的 第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中最后完成最终的聚合操作
2SQL语句调节
① 选用 join key 分布最均匀的表作为驱动表。做好列裁剪和 filter 操作以达到两表做 join 的时候数据量相对变小的效果。
② 大小表 Join使用 map join 让小的维度表1000 条以下的记录条数先进内存。在map 端完成 reduce。
③ 大表 Join 大表把空值的 key 变成一个字符串加上随机数把倾斜的数据分到不同的 reduce 上由于 null 值关联不上处理后并不影响最终结果。
④ count distinct 大量相同特殊值count distinct 时将值为空的情况单独处理如果是计算 count distinct 可以不用处理直接过滤在最后结果中加 1。如果还有其他计算需要进行 group by可以先将值为空的记录单独处理再和其他计算结果进行 union。
更多调优技巧可以 关注 大数据梦想家 公众号后台回复 “hive调优” 即可解锁 “hive 性能调优指南” .pdf
14了解过 Hive 的哪些窗口函数
1Rank 1RANK() 排序相同时会重复总数不会变 2DENSE_RANK() 排序相同时会重复总数会减少 3ROW_NUMBER() 会根据顺序计算
2 OVER() 指定分析函数工作的数据窗口大小这个数据窗口大小可能会随着行的变而 变化 1CURRENT ROW当前行 2 n PRECEDING往前 n 行数据 3 n FOLLOWING往后 n 行数据 4 UNBOUNDED 起 点 UNBOUNDED PRECEDING 表 示 从 前 面 的 起 点 UNBOUNDED FOLLOWING 表示到后面的终点 5 LAG(col,n) 往前第 n 行数据 6 LEAD(col,n)往后第 n 行数据 7 NTILE(n)把有序分区中的行分发到指定数据的组中各个组有编号编号从 1 开始对于每一行NTILE 返回此行所属的组的编号。注意n 必须为 int 类型。
15小文件是如何产生的解决方案 定位原因 1动态分区插入数据产生大量的小文件从而导致 map 数量剧增 2reduce 数量越多小文件也越多reduce 的个数和输出文件是对应的 3数据源本身就包含大量的小文件。 解决方案 1在 Map 执行前合并小文件减少 Map 数 CombineHiveInputFormat 具有对小文件 进行合并的功能系统默认的格式。HiveInputFormat 没有对小文件合并功能。 2merge
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;
-- 当输出文件的平均大小 小于 16m 该值时启动一个独立的 map-reduce 任务进行文件 merge
3开启 JVM 重用
set mapreduce.job.jvm.numtasks10
16 Tez 引擎优点 Tez 可以将多个有依赖的作业转换为一个作业这样只需写一次 HDFS且中间节点较少从而大大提升作业的计算性能。 Mr/tez/spark 区别 Mr 引擎多 job 串联基于磁盘落盘的地方比较多。虽然慢但一定能跑出结果。一般处理周、月、年指标 。 Spark 引擎虽然在 Shuffle 过程中也落盘但是并不是所有算子都需要 Shuffle尤其 是多算子过程中间过程不落盘 DAG 有向无环图。兼顾了可靠性和效率。一般处理天指标。 Tez 引擎完全基于内存。注意如果数据量特别大慎重使用。容易 OOM。一般用于快速出结果数据量比较小的场景。