一.Join原则

  • 将条目少的表/子查询放在Join的左边。原因:在Join的reduce阶段,位于Join左边的表的内容会被加载进内存,条目少的表放在左边,可以减少发生内存溢出的几率。
  • 小表关联大表:用MapJoin把小表全部加载到内存在map端Join,避免reducer处理。如:
    select /*+ MapJoin(user)*/ l.session_id,u.username
    from user u
    join page_views l
    on u.id = l.user_id

二.控制map数量

  例:input目录下有一个文件a,大小780M。分成7块(6*128+12M),产生七个map

  减少map:合并小文件(对数据源来讲)

  增加map:控制上一个job的reducer数

三.设置合理的reducer个数

  reducer过多:生成很多小文件,作为下一个任务的输入

  reducer过少:执行效率低

四.注意事项

  • 只支持insert/load操作,无update/del
  • Hive 0.10之前版本无索引
  • 不支持having
  • 不支持where子句的子查询
  • join只支持等值关联
  • String类型没有长度限制

案例一.脚本运行太慢

  原因:表太大,使用了count(distinct)来统计,造成了数据倾斜,大量数据在一个reduce进行运算

  优化:使用group by 替换,将大表根据指标条件,拆分成8个表

案例二.关联顺序不同导致数据缺失

  问题:测试报表时,发现周/月的累计用户小于同日期的7/30天数据相加的和

  原因:关联顺序写错了

  解决:累计用户 left 活跃用户 /新增用户(即使用数据较全的表在最左边进行左关联)或使用union all

  说明:当某个应用当天不活跃时,在活跃表中该应用ID为空或者不存在,就无法关联累计用户所在的表。

案例三.Spark偶尔遇到Full GC,任务会执行很久

  原因:默认Full GC 30min一次

  解决:调整参数 spark.cleaner.periodGC.interval = 270min

案例四.Spark-submit 部分参数没设置,导致spark执行过慢

  原因:核心字段内容为null,导致性能非常差

  解决:设置核心字段参数默认值

Hive、Spark优化案例的更多相关文章

  1. Hive优化案例

    1.Hadoop计算框架的特点 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业效率相对比较低,比如即使有几百万的表,如果多次关联多次汇总,产生十几个jobs,耗时很长.原因是map re ...

  2. Spark集群之yarn提交作业优化案例

    Spark集群之yarn提交作业优化案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.启动Hadoop集群 1>.自定义批量管理脚本 [yinzhengjie@s101 ...

  3. 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

    一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...

  4. 常见的七种Hadoop和Spark项目案例

    常见的七种Hadoop和Spark项目案例 有一句古老的格言是这样说的,如果你向某人提供你的全部支持和金融支持去做一些不同的和创新的事情,他们最终却会做别人正在做的事情.如比较火爆的Hadoop.Sp ...

  5. Hive SQL优化思路

    Hive的优化主要分为:配置优化.SQL语句优化.任务优化等方案.其中在开发过程中主要涉及到的可能是SQL优化这块. 优化的核心思想是: 减少数据量(例如分区.列剪裁) 避免数据倾斜(例如加参数.Ke ...

  6. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  7. Hive性能优化

    1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...

  8. mysql优化案例

    MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, ...

  9. SQL 优化案例 1

    create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...

随机推荐

  1. POJ - 1287 Networking (最小生成树&并查集

    You are assigned to design network connections between certain points in a wide area. You are given ...

  2. vs 小贴士

    1. ubuntu上vs code root执行 sudo code --user-data-dir="~/.vscode-root" 2. 设置vs code 打开在新的标签页打 ...

  3. HDU-4219-Randomization?

    题目描述 给定一棵\(n\)个节点的树,每条边的权值为\([0,L]\)之间的随机整数,求这棵树两点之间最长距离不超过\(S\)的概率. Input 第一行三个整数\(n,L,S\) 接下来n-1行, ...

  4. Linux免密登陆设置了免密登陆为啥还需要输入密码

    一.设置了免密码登陆但是还是需要输入密码: 权限保证:1.authorized-keys 的权限为 600 2.home.账户所在的目录如hadoop..ssh这三个文件的权限都必须设置为700,缺少 ...

  5. php 图像处理 抠图,生成背景透明png 图片

    *自定义一个图片等比缩放函数 *@param string $picname 被缩放图片名 *@param string $path 被缩放图片路径 *@param int $maxWidth 图片被 ...

  6. PostGIS 爆管分析之找出上游阀门(优化版)

    说明 前面描述过利用postgis查找上游阀门的原理,以及代码,其实当初写完就发现又很大的优化空间,但一直没有时间去做. 最近遇到一个情况,处理60w+条管网数据时,效率太慢了,于是腾时间优化了一版. ...

  7. C# 从集合A中取出集合B中不包含的数据(根据ID判断),并添加到集合B中

    从一个集合A中取出另一个集合B中不包含的数据,并添加到集合B中 private void button2_Click(object sender, EventArgs e) { var ListA = ...

  8. js将时间戳转化为年月日时分秒

    export const dateFormatter = (nows) => { if (!nows) return '' var now = new Date(nows) var year = ...

  9. 68. Text Justification (JAVA)

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  10. iOS App沙盒目录结构

    转自:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件( ...