一、什么是动态分区
静态分区与动态分区的主要区别:
①:静态分区是手动指定,而动态分区是在插入数据时有查询语句决定。
②: 静态分区一次只能导入一个分区的分区的数据,动态分区可以在执行SQL时将所有分区的数据全部导入
二、 为什么使用动态分区
从业务层面:
①:当我们在业务中频繁的对某一个字段分区聚合时,就会将该字段作为分区字段来设置分区,
②: 在分布式计算框架中减少数据的IO迁移带来的负载,从而提升效率,性能
从技术层面:
在我们创建一个分区表后,需要将大量的数据插入到该表,动态分区可以一次性的将这些数据导入分区中
(与静态分区不一样,静态分区一次只能导入一个分区的数据)
三、怎么创建动态分区
set hive.exec.dynamic.partition=true 开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict 开启动态分区的非严格模式
四、HDFS实现文件上传的流程
①: Client通过distributeFileSystem向NameNode申请上传文件,NameNode接到请求后首先会校验是否已经存在该文件,若存在,则向Client返回异常,不存在则返回可以上传,Client接到可以长传的命令后,将文件切分成大小为128M的block块,然后再次先NameNode申请该block块的上传位置,NameNode会根据当前集群各节点的运行情况返回三个节点给Client,(默认三个备份)
五 Hive中数据缓存技术以及区别
三种: 视图 临时表 with查询
在大家不是特别理解这三个技术的情况下都可以将他们理解为临时表,都是用来缓存数据
在我们进行查询时,多次使用到子查询就可以将他们生成视图,临时表,或者with查询(多次使用)
不同点:(作用域不同)
①视图:永久(只要不删除就会存在),但是视图只是一个逻辑结构,只有在我们查询这个视图时才会将数据加载到内存中,不查的时候只是一条SQL语句
②:临时表:存在于当前的连接的客户端,且各客户端不能共享,如果断开连接,就会被自动删除(存在于内存中)
③:with查询:存在于当前的查询中,出了当前的查询就会失效
六、shuffle流程
七、Hive优化中并行化和串行化是什么,为什么要使用这种手段
八、hive的数据倾斜以及解决方法