一.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. Django之AJAX传输JSON数据

    目录 Django之AJAX传输JSON数据 AJAX 中 JSON 数据传输: django响应JSON类型数据: django 响应 JSON 类型数据: Django之AJAX传输JSON数据 ...

  2. 常用的PHP函数封装,有排序和数据库操作函数

    //二分查找 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $hi ...

  3. vue项目进行时,script标签中,methods事件中函数使用的async/await

    用 async/await 来处理异步 await关键字只能放到async函数里面,通过await得到就是Promise返回的内容:当然也能通过then()去获取,若通过then()获取了则就无Pro ...

  4. python-装饰器2

    python-装饰器2 1.函数既“变量 def bar(): print("in the bar") def foo(): print("in the foo" ...

  5. laravel 添加筛选方式

    protected function grid() { return Admin::grid(Client::class, function (Grid $grid) { $grid->id(' ...

  6. 通过lua扩展nginx

    1. 安装 准备主要的三个安装包,分别是 nginx-1.15.9.tar.gz LuaJIT-2.0.5.tar.gz lua-nginx-module-0.10.14.tar.gz 相关版本可以去 ...

  7. python核心编程正则表达式练习题1-2匹配由单个空格分隔的任意单词对,也就是性和名

    # 匹配由单个空格分隔的任意单词对,也就是姓和名 import re patt = '[A-Za-z]+ [A-Za-z]+' # 方法一 +加号操作符匹配它左边的正则表达式至少出现一次的情况 # p ...

  8. windows CMD常用基础命令

    一.ping 主要是测试本机TCP/IP协议配置正确性与当前网络现状. ping命令的基本使用格式是: ping IP地址/主机名/域名 [-t] [-a] [-n count] [-l size] ...

  9. jquery预览本地图片

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  10. 第二章Python入门

    第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Pytho ...