Mapreduce自身的特点:

1、IO和网络负载大;优化策略:减少IO和网络负载。

2、内存负载不大。优化策略:增大内存使用率;

3、CPU负载不大。优化策略:增大CPU使用率;

(hive的优化应当根据mapreduce的作业特点和自己的作业实际需求进行优化)

优化1、合并输入

淘宝一个大型项目,上万Hive作业进行合并输入。

A、单个作业

B、多个作业

作业间的血缘关系:作业间相同的查询,相同的源表。

优化2、源表归纳,常用复杂或低效统计统一给出,以避免上层作业过多计算

如低性能的UDF、低性能、高使用率的计算模块 等情况,在底层表统一处理。

3、合理设计表分区,静态分区和动态分区

比如如果对日志表等大表有较多按小时的查询,则设计为二级分区表,分区字段:日期、小时。

动态分区:

曾经一个案例,需要一天每个小时的数据。

方案一:统计24次,分别统计每个小时的。

方案二:动态分区,只需要统计一次就完成24个小时分区的加载。

需求:

按省份统计每小时的流量。

create table province_hour_visit(

provice_id int,

uv bigint,

pv bigint

) partitioned by (ds string,hour string);

insert overwrite table province_hour_visit partition(ds='2015-08-28',hour)

select provinceid,

count(distinct guid) uv ,

count(url) pv,

hour

from track_log where ds='2015-08-28'

group by ds,hour,provinceid;

一、压缩

Map读取文件(IO压力),shuffle阶段进行网络传输(网络压力),reduce落地结果(IO压力)。

压缩后,文件可以缩小70-75%,缓解网络传输压力。但需要压缩和解压增加了CPU负载,所以是把压力转到了CPU上。

二、不采取全局压缩方式,而是采取局部压缩方式。

原因:

1、数据量大的表才值得压缩,小表无所谓。

2、全局压缩会导致开发的MapReduce作业、Sqoop作业存在兼容性问题。

全局压缩的方式是:

修改mapreduce属性mapred-site.xml

<property>

<!-- 整个作业输出端(Reduce端)是否开启压缩->

<name>mapred.output.compress</name>

<value>false</value>

</property>

<property>

<!-- 整个作业输出端压缩算法->

<name>mapred.output.compression.codec</name>

<value>org.apache.hadoop.io.compress.DefaultCodec</value>

</property>

<property>

<!-- 压缩方式->

<name>mapred.output.compression.type</name>

<value>BLOCK</value>

</property>

<property>

<!-- map端输出压缩算法-->

<name>mapred.map.output.compression.codec</name>

<value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

<property>

<!-- map端输出进行压缩-->

<name>mapred.compress.map.output</name>

<value>true</value>

</property>

三、压缩方式对比

算法

压缩后/压缩前

压缩速度

解压速度

GZIP

13.4%

21 MB/s

118 MB/s

LZO

20.5%

135 MB/s

410 MB/s

DefaultCodec

24.2%

155MB/s

390MB/s

Snappy

22.2%

172 MB/s

409 MB/s

曾经用LZO压缩,CDH没集成,需要手工安装,且常导致个别老机器down机,故废弃。

CDH4 集成了Snappy,也推荐用该方式。

Snappy 网站:http://code.google.com/p/snappy/

Snappy的前身是Zippy。虽然只是一个数据压缩库,它却被Google用于许多内部项目程,其中就包括BigTable,MapReduce和RPC。Google宣称它在这个库本身及其算法做了数 据处理速度上的优化,作为代价,并没有考虑输出大小以及和其他类似工具的兼容性问题。Snappy特地为64位x86处理器做了优化,在单个Intel Core i7处理器内核上能够达到至少每秒250MB的压缩速率和每秒500MB的解压速率。

四、局部压缩的方式,以Snappy为例

Hive作业或cli里设置会话域参数:

set hive.exec.compress.output=true;

set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

set mapred.output.compression.type=BLOCK;

举例对比压缩前后的大小,计算压缩比。

测试1:TEXTFILE+默认压缩算法DefaultCodec

压缩前:6669210

压缩后:1991772

压缩比:压缩后/压缩前 = 29.9%

测试2:TEXTFILE+压缩算法SnappyCodec

压缩前:6669210

压缩后:3549226

压缩比:压缩后/压缩前 = 53.2%

测试3:RCFile+压缩算法SnappyCodec

压缩前:6669210

压缩后:3520648

压缩比:压缩后/压缩前 = 51.2%

测试4:RCFile+压缩算法DefaultCodec

压缩前:6669210

压缩后:1938476

压缩比:压缩后/压缩前 = 29.1%

五、hive表的存储格式

TEXTFILE:文本文件,默认

SEQENCEFILE:序列化文件

RCFile

orc

http://blog.csdn.net/lxpbs8851/article/details/18553961

从存储和压缩上组合考虑,用RCFile+DefaultCodec 组合效果最好。

用RCFile存储的话,在hive.exec.compress.output=false情况下无压缩效果,为true时才压缩。默认压缩算法是set mapred.output.compression.codec查看为DefaultCodec

如:

set mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;

create table test_rcfile(

url string,

referer string,

ip string)  stored as RCFile;

六、分布式缓存

如果你有个jar想引用,有种方式:

Add jar

通过设置hive的配置文件hive-site.xml 加入

<property>

<name>hive.aux.jars.path</name>

<value>file:///opt/software/lib/UDF.jar,file:///opt/software/lib/hiveF.jar</value>

</property>

劣势:不灵活,设置之后需要重启hive服务才生效。

像UDF这种更新频繁的情况不适用。

像固定型的如hiveF,适合。

hive作业的优化策略的更多相关文章

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

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

  2. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  3. Hive整体优化策略

    一 整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez.Spark等.根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点: 1 根据 ...

  4. Hive优化策略

    hive优化目标 在有限的资源下,运行效率高. 常见问题 数据倾斜.Map数设置.Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain ...

  5. Spark SQL概念学习系列之Spark SQL 优化策略(五)

    查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存 ...

  6. 常见性能优化策略的总结 good

    阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后 ...

  7. 直播推流端弱网优化策略 | 直播 SDK 性能优化实践

    弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...

  8. PHP中的数据库一、MySQL优化策略综述

    前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查是核心.为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对 ...

  9. .Net中的并行编程-6.常用优化策略

                本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略.      一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...

随机推荐

  1. Java基础拾遗(二) — 关于equals(),hashcode()和 ==

    这里分别讲==和equals()的关系,以及equals()和hashcode()的关系 讲解之前,需要先明白对象的内容.对象的引用,基本类型,引用类型这几个概念,此处不做解释 一.==和equals ...

  2. 4_3.springboot2.x之默认访问首页和国际化

    1.默认访问首页 1.引入thymeleaf和引入bootstrap <!--引入thymeleaf--> <dependency> <groupId>org.sp ...

  3. USACO 2008 November Gold Cheering up the Cows /// MST oj24381

    题目大意: 输入n,p:n个点,p条路 接下来n行输入c[]:在各个点需要花费的时间 接下来p行输入u,v,w:u点到v点的路需要花费时间w 求经过所有点且最后回到起点的最少花费时间 https:// ...

  4. 打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口。 语法: window.open([URL], [窗口名称], [参数字符串])

    打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...

  5. fetchSql是3.2.3新增的连贯操作方法,用于直接返回SQL而不是执行查询。

    fetchSql是3.2.3新增的连贯操作方法,用于直接返回SQL而不是执行查询. 例如: $result = M('User')->fetchSql(true)->find(1); 输出 ...

  6. Ubuntu usb设备端口号绑定

    1.将串口设备插入USB口,通过lsusb查看端口信息.例如: ID 1a86:7523 表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备) 1a86 usb_device_desc ...

  7. videojs实现双击视频全屏播放、播放器全屏时视频未全屏

    https://blog.csdn.net/staritstarit/article/details/78451963 暂停时只能使用左下角的暂停按钮,点击视频时不再响应 使用width和height ...

  8. 服务器迁移部署OmsWeb

    绑定 基本设置 高级设置

  9. 查询sitemap中重复的记录

    ; ;

  10. HDU--3466 Proud Merchants (01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=3466 分析:这个题目增加了变量q 因此就不能简单是使用01背包了. 网上看到一个证明: 因为如果一个物品是5 ...