1hive总结

1hive元数据管理

  • 1库,表的基本信息,包括表名,存储类型及地址,分区信息列等
  • 2已经注册的UDF相关信息
  • 3用户,权限相关信息

2spark ThriftServer

  • 1 spark sql处理
  • 2sql语法解析
  • 3逻辑执行计划生成及优化
  • 4物流执行计划及优化

3表,分区与桶

  • 内外表
  • 数据格式(推荐parquet存储)
  • 分区(基于文件目录index)
  • 桶(大表join)

4hive表小文的数量影响namenode的性能和稳定

  1产生:

  • 动态分区插入数据,产生大量的小文件,从而导致map数量剧增。
  • reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的)。
  • 数据源本身就包含大量的小文件。

   2影响:

  • hdfs角度: 小文件的文件信息要保存在namenode的内存中的,对namenode的内存有很大的压力
  • hive角度:小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。
  • 压缩:小文件的压缩性能会产生影响

 3解决方案:

  源头解决:

  • 使用Sequencefile作为表存储格式,不要用textfile,在一定程度上可以减少小文件。
  • 减少reduce的数量(可以使用参数进行控制)。
  • 少用动态分区,用时记得按distribute by分区。

已经存在小文件

  •  使用hadoop archive命令把小文件进行归档。
  • 重建表,建表时减少reduce数量。
  • 通过参数进行调节,设置map/reduce端的相关参数,如下:

           设置map输入合并小文件的相关参数:


//每个Map最大输入大小(这个值决定了合并后文件的数量)
set mapred.max.split.size=256000000;  
//一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
set mapred.min.split.size.per.node=100000000;
//一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)  
set mapred.min.split.size.per.rack=100000000;
//执行Map前进行小文件合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

       设置map输出和reduce输出进行合并的相关参数:

//设置map端输出进行合并,默认为true
set hive.merge.mapfiles = true
//设置reduce端输出进行合并,默认为false
set hive.merge.mapredfiles = true
//设置合并文件的大小
set hive.merge.size.per.task = 256*1000*1000
//当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。
set hive.merge.smallfiles.avgsize=16000000

5数据表的列类型应该基于业务含义

    例子:如果int类型,用string类型存储

    1不同类型压缩会影响

     2你在处理的过程中可能要类型换行,需要时间

 6表之间join关联比较消耗性能,表反范式可能更好(数据冗余)

        两个表如何频繁进行join时候,我们可以设计成一个表中,因为hdfs存储比较便宜,牺牲存储实现更高的查询效率

7sql优化

  • 1不要在sql使用星号
  • 2使用limit,除非你确定表数据有多少行,否则表过大加载到内存中,可能ThriftServer就会oom,挂掉
  • 3Cross join可能导致task数量过多(笛卡尔积关联)
  • 4Container killed by YARN for exceeding memory limits. 2.5 GB of 2.5 GB physical memory used. Consider boosting

  • join操作,尽量使用broadcast join减少shuffe数据

8排序

  • order by 全局排序,只有一个reduce Task用于排序
  • sort by 只保证一个reuduce内部有序,常常和distribute by 一起,按照key1分组,按照key2排序
  • distribute by 保证相同的key分发到到相同的reduce task中
  • cluster by=Distribute by +sort by on some key

9数据倾斜

  • 转换为broadcast join
  • adaptive exection (调整执行策略)1动态调整shuffle partition数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值