什么是Hive?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。
2.HIve的意义(最初研发的原因)
减少开发人员的开发成本和学习成本。
3.Hive的内部组成模块,作用分别是什么
元数据:描述数据的数据 内部执行流程: 解析器(解析SQL语句)、编译器(把SQL语句编译成MapReduce程序)、优化器(优化MapRedue程序)、执行器(将MapReduce程序运行的结果提交到HDFS)
4.Hive支持的数据格式
Text,SequenceFile,ParquetFile,ORC,RCFILE
5.进入Hiveshell窗口的方式?
第一种交互方式:Hive交互shell(直接通过bin/hive的方式) 第二种交互方式:Hive JDBC服务 1.启动hiveserver2服务 前台:bin/hive --service hiveserver2 2.beeline连接hiveserver2 beeline beeline> !connect jdbc:hive2://node01:10000
6.Hive数据库、表在HDFS上存储的路径时什么?
/user/hive/warehouse
7、like与rlike的区别
like:like是模糊匹配查询 rlike:rlike支持正则表达式。
8.内部表与外部表的区别?
内部表删除将表的元数据和数据同时删除。 外部表的元数据被删除,数据本身不删除。
9.分区表的优点是,分区字段的要求是?
优点: 指定分区查询,提高查询,分析的效率 要求: 分区字段绝对不能出现在数据表以有的字段中。
10、分桶表的优点是,分桶字段的要求是?
优点: 1、对于join的需求,能够起到优化加速的作用。(前提是,join字段设置为分桶字段) 2、用于数据取样(获取/提取数据样本) 要求: 分桶字段必须是表中的字段
11、数据导入表的方式
1.直接向表中插入数据 2.通过查询插入数据 3.多插入模式 4.查询语句中创建表并加载数据 5.创建表时通过location指定加载数据路径
12.数据导出表的方式
1、将查询的结果导出到本地 2、将查询的结果格式化导出到本地 3、将查询的结果导出到HDFS上(没有local) 4、Hadoop命令导出到本地 5 、hive shell 命令导出 6、export导出到HDFS上(全表导出) 7. sqoop导出
13、order by与sort by的区别
order by:全局排序,一个MapReduce sort by: 对每个分区内进行排序,对全局结果集来说不是排序。
14.where 与having的区别?
“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”; “Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。
15、distribute by何时使用,通常与哪个联合使用?
当需要根据某个字段 进行 分区时 使用 通常与sort by 结合使用(先分区后排序) Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。
16.Cluster by何时使用?
需要按照某个字段分区同时也按照这个字段进行升序排序时使用cluster by
17. distribute by sort by(相同字段) 与Cluster by的区别?
distribute by sort by 方式可以指定正序和倒序 Cluster 只能是正序,无法指定排序方式
18.hive -e/-f/-hiveconf分别是什么意思?
-e从命令行执行指定的HQL -f 执行HQL脚本 -hiveconf 设置hive运行时候的参数配置
19、hive声明参数有哪些方式,优先级是什么?
配置文件<命令行参数<参数声明
20.编写hiveUDF代码,方法名称叫什么?
evaluate
21.企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
存储格式是ORC,ParquetFile格式, 数据压缩格式是snappy
22.hive自定义函数的类型
自定义函数分为三个类别: UDF(User Defined Function):一进一出 UDAF(User Defined Aggregation Function):聚集函数,多进一出(例如count/max/min) UDTF(User Defined Table Generating Function):一进多出,如lateral view explode()
23.Fetch抓取中设置more有什么效果,设置none有什么效果?
设置成more,简单的查询语句不会转化成为MR程序 设置成none,所有查询语句都要转化成为MR程序
24、本地模式有什么好处
在小数据量的前提下 提高了查询效率
25.当一个key数据过大导致数据倾斜时,如何处理
开启Map端聚合和功能开启局部聚合后 hive会创建两个MR 程序 第一个进行数据的局部聚合 第二个进行数据的最终汇总
26、Count(distinct) 的替换语句如何编写
SELECT count(DISTINCT id) FROM bigtable; 替换语句 SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a; 先过滤在管理
27、如何使用分区剪裁、列剪裁
列剪裁: 只拿需要的列 分区剪裁:只拿需要的分区 要什么 拿什么
28.如何理解动态分区调整
以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区,全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可
29.数据倾斜时,如何将众多数据写入10个文件
(将一个大的任务拆分成多个小任务,再次执行) 设置reduce数量(10) 1:distribute by (字段) 2 distribute by rand()
30.影响map数量的因素
文件很小时候:影响map数量的因素是文件数量 文件很大时候:影响map数量的因素是块的数量
31.reduce数量的计算是什么
公式: N=min(参数2,总输入数据量/参数1) 参数1:每个Reduce处理的最大数据量 参数2:每个任务最大Reduce数量
32.并行执行有什么好处
并行执行使得多个没有依赖关系的任务同时执行,起到了提高查询效率的作用
33.严格模式不能执行哪些命令
1、不允许扫描所有分区 2、使用了order by语句查询,要求必须使用limit语句 3、限制笛卡尔积的查询
34.JVM重用有什么好处
允许多个task使用一个jvm 降低了任务启动的开销,提高了任务的执行效率 (但是,在整个任务结束前,jvm不释放,长时间占用。导致资源不足时,资源浪费)
35. 什么是MR本地模式
任务在提交SQL语句的节点上"本地执行",任务不会分配到集群
36. 什么是本地计算
数据存储到HDFS后,编写分析代码实现计算程序,程序在进行分发时,优先分发放到这个程序所使用到的数据所在的节点上。
37.先join后过滤的优化方案
1.将过滤条件写在join…on 的 on中 SELECT a.id FROM ori a LEFT JOIN bigtable b ON (b.id <= 10 AND a.id = b.id); 2.将过滤条件写在join…on 的join,子查询过滤 SELECT a.id FROM bigtable a RIGHT JOIN (SELECT id FROM ori WHERE id <= 10 ) b ON a.id = b.id;