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中String str=new String("a")和String str = "a"有什么区别?

    Q: String A="ABC"; String B=new String("ABC"); 这两个值,A,B 是否相等,如果都往HashSet里面放,能放下吗 ...

  2. AQS(队列同步器)

    目录导引: 一.简介 二.源码解析(JDK8) 三.运用示例 一.简介 1.volatile volatile修饰的共享变量可以保证可见性和有序性(禁止指令重排序). 2.CAS: CAS的原理很简单 ...

  3. Django杂篇(2)

    目录 Django杂篇(2) cookie与session cookie session django中间件 自定义中间件 跨站请求伪造(csrf) CSRF的解决方案 Django杂篇(2) 本文主 ...

  4. VMware Workstation 10 配置Ubuntu环境

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 VMware Work ...

  5. Newtonsoft.Json高级篇:TypeNameHandling设置

    原文:Newtonsoft.Json高级篇:TypeNameHandling设置 此示例使用TypeNameHandling 设置在序列化JSON和读取类型信息时包含类型信息,以便在反序列化JSON时 ...

  6. js 实时监听textarea输入

    html: <textarea class="area" name="" id="text1" maxlength="100 ...

  7. PropertyPlaceholderConfigurer的注意事项

    1.基本的使用方法是<bean id="propertyConfigurerForWZ" class="org.springframework.beans.fact ...

  8. 编写main方法

  9. [转]Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  10. CodeForces - 27E

    https://vjudge.net/problem/CodeForces-27E 求因子个数为n的最小的数dfs枚举质因子的幂 #include <iostream> #include ...