【无标题】

学习目标:

总结几点Hive的一些知识点

学习内容:

  1. hive源数据为何不放在内置derby数据库中?
    一般会使用mysql作为源数据存储,内置的数据库主要是并发性能差,可以理解为单线程操作
  2. Hive中的四种排序
    order by 属于全局排序,只有一个reduce
    sort by 设置的reduce Task 大于1,只在每个输出reducer进行排序,不保证全局排序
    distribute by 通常与sort by结合使用, 比如说对同一年份的温度进行排序,distribute by 是保证同一reducer接受到的是同一年份的数据,而sort by是对reducer中的数据进行排序
    cluster by 当distribute by的字段和sort by 的字段相同的时候,可以用cluster by的方式,但排序只能升序
    3.内部表和外部表
    用external修饰得到的是外部表,删除表的时候只会删除源数据,不会删除hdfs的文件;而内部表的源数据存放在指定的位置,删除表会同时删除文件,内部表适合创建中间表
    4.分区表和分桶表的区别
    分区会在hdfs上创建物理目录;分桶可以在分区的基础上进行再次划分小表,实际为更加细颗粒的进行划分,还要指定桶的数量,依据表中真实的列,比如用户表根据name进行分桶,分为10个桶,然后会将name的hash值对10取模,按照取模的值将name分到10个桶里面
    5.谈谈对hive的理解
    hive是开源的基于hadoop的用于统计海量结构化数据的一个数据仓库,它定义了类似sql的语句,也就是类sql语句,换句话讲,Hive就是将hql语句转化成mapreduce过程的一个程序
    6.hive的作用有哪些
    将结构化数据文件映射出一张表,并提供类sql查询语句
    7.hql和sql的区别
    1.hql面向对象,sql面向数据库
    2.hql 分大小写
    3.Hql语句的数据类型除了基本数据类型外,还有其他的复杂的数据类型(如struct、map、array),而sql只有基本数据类型
    4.hql语句不支持行级别的增、删、改,所有数据在加载时就以及确定,不可更改
    5.hql不支持事务
    8.hive模式设计
    1.按天划分:在创建表时加入时间戳,在表名中加入时间
    2.没有设置分区会全局查询,浪费资源
    3.同一份数据,多种处理方式 从一个数据源产生多种数据聚合,而无需每次聚合都要重新扫描一遍
    4.对于每个表的分区 有时对中间表的临时表进行分区,以避免任务失败,重新开始执行任务,或者某天某些数据被覆盖
    5.分桶表的数据存储
    6.使用列存储表使用age等这样的字段,也就是说字段重复比较多的表的属性,用列存储比较好。
    9.数据倾斜
    `首先了解数据倾斜产生的原因是什么,其实数据倾斜产生的原因很简单,某一条key的数据远远大于其他key中的数据。
    解决办法:就是将某一节点中key的数据较多分散到其他的节点上。
    (1)空值产生的数据倾斜
  • 数值为空的不参与关联;
  • 赋予空值新的key值;
    (2)不同数据类型关联产生数据倾斜
    ​ 如用户表中user_id的数据类型为int,log表中user_id的数据类型为String,两者相关联进行join操作时,默认是按照int进行关联的,String字符串的会分到同一个reducer中。
    解决方法:进行数据类型转换
    (3)大小表关联查询时产生数据倾斜
    (4)小文件过多
    小文件过多,需要合并小文件。
    5)当HQL中包含count(distinct)
    采用sum()group by的方式来替换count(distinct)完成合并。`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值