1,数据存储调优

1.1 设置压缩:
  设置中间数据/输出结果压缩传输,使用snappy格式。

hive-site.xml:

set hive.exec.compress.output = true  # 输出结果压缩

set hive.exec.compress.intermediate = true  # 中间结果压缩

具体压缩算法配置:

mapred-default.xml(Hadoop 安装目录内):

mapreduce.map.output.compress = true  # map任务输出压缩
mapreduce.map.output.compress.codec = Snappy #压缩算法

mapreduce.output.fileoutputformat.compress  # reducer 输出压缩

mapreduce.output.fileoutputformat.compress.codec  # reducer 压缩算法

mapreduce.output.fileoutputformat.compress.type  #reducer 压缩类型

1.2 增加热数据的副本数. 减少传输延迟。

hdfs系统的副本数是固定的。这里是修改单个文件的副本数量。

在写入表(文件)时设置:

set dfs.replication=10;  # dfs默认3
Insert overwrite table tmp.dim_test select * from other_table;

或者在hdfs 内,上传文件时修改;

hadoop dfs -D dfs.replication=2 -put  dim_test.txt   /***/

2,常见配置项调优

2.1 当查询的数据量足够小时,启用本地模式。

hive-site.xml:

hive.exec.mode.local.auto = true  # 自动启动local 模式
hive.exec.mode.local.auto.inputbytes.max = 50000000 # 最大字节数的阈值

2.2 在一些可以设置并行执行的任务中,配置 parallel

可以运行并行的任务,比如 在join 之前,对多个数据源的处理。 还有移动多个数据源插入目标表。

hive.exec.parallel = true  # 并行运行
hive.exec.parallel.thread.number = 8 # 最多线程数

2.3 Fetch task获取数据,直接读取文件,不MR。 某些简单操作适用。

hive.fetch.task.conversion = more # 对 SELECT, FILTER, LIMIT only UDFs, 有效

2.4 更换执行引擎: spark  tez  mr

hive.execution.engine  = spark # 设置spark引擎

3,计算代码级调优

3.1,去重算法调优

不可使用DISTINCT;Hive去重最佳方法----row_number() ,模拟了分区排序。map 内分区排序,reduce内 归并排序,效率高。

举例对 客户表(id , name ,  order_id , data )去重, 假设数据量非常大。

3.2  排序算法

  order by :一个reduce,全局排序,性能差。 数据量较少时,可以使用

  sort by : map端排序完成,分区输出,局部有序。

  distribute by:按照指定的字段对数据进行划分到不同的输出reduce

  cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能,建议使用。

 

4,常见问题调优

4.1 、小文件太多如何调优

4.1.1,调用 hdfs的方法合并小文件,sync() append() 文件层面; 或者使用hadoop 管理命令合并;

举例 : 每日产生大量product_info_* 的文件, 合并这些文件 

hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf  # 合并后保存到本地

hadoop fs -put  /local_path/product_inf  /hdfs_path # 合并文件再上传到hdfs

4.1.2,   Hadoop archive 命令, 解决对于NN 内存问题。  但是不能解决计算中的问题

可以更有效的把大量小文件打包放入block,因此减少NameNode压力。

 hadoop archive -archiveName name -p <parent>  <src>* <dest> # 打包成 .har文件

4.1.3,SequenceFile ,使用文件名作为 key,文件内容作为 value。支持mr分块处理,支持压缩
    最好将源数据直接写入 SequenceFile,而不是作为中间步骤写入小文件。

4.2 、数据倾斜如何调优

  本质原因是,1,发生大量数据的网络传输  2,磁盘IO速度缓慢

4.2.1 配置项

hive.optimize.skewjoin=true;     #默认false,如果存在数据倾斜可能性,可以将其设置为true

SET hive.skewjoin.key=100000;  #默认为100000,如果key的数量大于配置的值,则超过的数量的key对应的数据会被发送到其他的reduce任务

hive.groupby.skewindata=true  #在分组任务,首先额外触发一个mr作业,该作业的map任务的输出会被随机地分配到reduce任务上,从而避免数据倾斜

hive.auto.convert.join=true  # 大表和小表连接问题,  新版可以配置后,自动识别到此情况。

4.2.2  代码级

1,行列裁剪; 2个都是分桶表,连接key是分桶字段。 只读取需要的桶数据。

 select  name , order  from table_a  where  date >= '2008-03-01' AND date <= '2008-03-31' 

2,大表和大表连接问题

    1,Key 字段加随机字段,把分区打散。 

比如, a 和 b 表连接,连接的key集中于 date = 20200120

2,把2个表定义为 ”有序分桶表“   使用 BUCKET MAP JOIN / SORT MERGE BUCKET MAP JOIN  // 分桶 有序

最新文章

  1. react native windows开发环境搭建(二)
  2. iOS 关于AFNetworking ssl 待完成
  3. [Tomcat] Tomcat远程调试
  4. strtotime 的几点不同
  5. PostgreSQL和GreenPlum数据库的区别
  6. Lesson 4: Know Your Tools
  7. VC 对话框背景颜色、控件颜色
  8. Nopcommerce架构浅谈之架构层次
  9. 在.NET Core 上运行的 WordPress
  10. 2015 多校联赛 ——HDU5334(构造)
  11. 23 服务音乐的启动Demo4
  12. 通过Jenkins定期清除为None的镜像
  13. 全国天气预报信息数据 API 功能简介与代码调用实战视频
  14. DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型
  15. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词
  16. phpcms栏目标签调用
  17. 【转】HTTP学习---图解HTTP[三次握手&amp;&amp;ISO模型]
  18. 【大数据】Hive学习笔记
  19. Emmet 语法介绍
  20. phpsocketclient以及server样例

热门文章

  1. 从 Newtonsoft.Json 迁移到 System.Text.Json
  2. IOS12 + Xscode12 报错:Building for iOS Simulator, but linking in dylib built for iOS, file &#39;/Users/XXX/Desktop/XXXX/XXX.framework/JSSDK&#39; for architecture arm64
  3. xmind使用分享
  4. CF750H New Year and Snowy Grid
  5. JZOJ 1083. 【GDOI2006】拯救亚特兰蒂斯
  6. Lucky Tree
  7. MySQL 查询常用操作(0) —— 查询语句的执行顺序
  8. redis(14)主从复制
  9. 100、 FilenameUtils
  10. ARC157E XXYX Binary Tree 题解