数据迁移过程中hive sql调优
时间:2022-05-02
本文章向大家介绍数据迁移过程中hive sql调优,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程。
先上sql
select t1.create_time from
(
select * from beatles_ods.route where year=2017 and month=07 and day=01
) t1
left outer join
(
select * from (select *,row_number() over(partition by id) num from beatles_test.route where year=2017 and month=07 and day=01) t where t.num =1
) t2
on t1.id = t2.id where t2.id = NULL;
可以看到这个sql由1个join,一个去重语句,组成,这两种操作都是很耗费资源的。
1、对链接操作,小表放在链接左边。
这是一个老生常谈的事情了,在这里不做细致介绍。基本来说,小表会减少mapreduce过程中的shuffle。
事实上“把小表放在前面做关联可以提高效率”这种说法是错误的。正确的说法应该是“把重复关联键少的表放在join前面做关联可以提高join的效率。”
最终得出的结论是:写在关联左侧的表每有1条重复的关联键时底层就会多1次运算处理。
假设A表有一千万个id,平均每个id有3条重复值,那么把A表放在前面做关联就会多做三千万次的运算处理,这时候谁写在前谁写在后就看出性能的差别来了。
如果想深刻了解,请移步:
http://blog.sina.com.cn/s/blog_6ff05a2c01016j7n.html
2、调整reduce的个数,这个个数可以调整到256以内,并不是越大越好,太大会消耗集群上的资源,并增加汇总压力。
set mapred.reduce.tasks = 30;
3、将内存调大,防止内存溢出
设置map和reduce的内存
set mapreduce.map.memory.mb=4096;
set mapreduce.reduce.memory.mb=4096;
设置JVM内存
set mapreduce.map.java.opts=-Xmx2500M;
map和reduce可以视情况开大一些,我这里设置的是4G。如果资源充裕的情况下,可以将此值设置的大一些。但是绝对不是越大越好,单纯靠提升内存来优化程序是不被推荐的。
- 集中管理远程计算机终端程序
- [C#1] 3-基元类型、引用类型和值类型、装箱拆箱
- 如何封装属于自己的ajax
- [C#1] 4-通用对象操作
- [C#3] 2-var 类型推断
- [C#3] 3-对象和集合初始化器
- 制作WordPress“带Gravatar头像评论”小工具(集成主题中、含选项)
- 移除WordPress 顶部管理菜单左侧的logo 图标
- [C#3] 1-扩展方法
- 无插件仅代码实现 WordPress 分页导航(2)
- [C#3] 4-匿名类型
- jquery操作DOM 元素(3)
- 腾讯汤道生对话牛津大学互联网研究院Luciano:大数据将如何改变世界
- 分享本站右侧 “类Metro风格侧边栏” 的实现方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RSeQC判断链特异性(strand-specific)
- bigWigMerge合并bigwig文件
- WPF桌面开发集成Nginx服务器
- chrome浏览器拦截(block)特定网站某些请求的方法
- 聊一聊:一道 Promise 链式调用的题目
- linux编译运行c++程序
- Python的运算符 (下)
- 深入理解JVM(③)Java的锁优化
- Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
- Spring 中的事件处理
- Vim安装插件管理器Vundle
- Ubuntu下为vim安装YouCompleteMe插件
- 单机部署k8s
- VIM个性化配置(一)
- Django+Vue开发生鲜电商平台之6.使用Vue实现商品类别和商品数据前台显示