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. Git合并时遇到冲突或错误后取消合并

    当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西 有这个状态存在时,会导致后面想要再合并的时候提示如下 所以需要先取消这次合并,使用“git merge --abort”命令

  2. Spring NamedParameterJdbcTemplate详解(10)

    NamedParameterJdbcTemplate和JdbcTemplate功能基本差不多.使用方法也类型.下面具体看下代码. db.properties 1 jdbc.user=root 2 jd ...

  3. java_打印流

    public class transientTest { /** * 反序列化操作2 * 序列化后的文件被修改后进行反序列化时会报错 * 决绝方法: * 手动添加序列号Serializable中有声明 ...

  4. hadoop 环境下不知道yarn端口可以通过此命令查找

    yarn jar hadoop-examples-2.6.0-mr1-cdh5.10.0.jar pi 1 30 hadoop-examples-2.6.0-mr1-cdh5.10.0.jar 此JA ...

  5. 基于Java Properties类设置本地配置文件

    一.Java Properties类介绍 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件, ...

  6. 注解@Qualifier@Primary

    在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢 根据注入资源的注解不同实现的方式有一点小小的区别 在Controller中使用 @Auto ...

  7. (转)NodeJS收发GET和POST请求

    NodeJS收发GET和POST请求 目录: 一 express框架接收 二 接收Get 三 发送Get 四 接收Post 五 发送Post 一 express框架接收 1 2 3 4 5 app.g ...

  8. 【树剖】CF916E Jamie and Tree

    好吧这其实应该不是树剖... 因为只要求子树就够了,dfs就好了 大概就是记录一个全局根root 多画几幅图会发现修改时x,y以root为根时的lca为以1为根时的lca(x,y),lca(root, ...

  9. var、fucntion关键字优先级问题

    情况1:使用var关键字定义的变量优先被声明 console.log(a);    // undefined var a = 20; /* var a =20; (1)声明变量a --  优先被执行, ...

  10. RabbitMQ 五种工作模式

    官网介绍:https://www.rabbitmq.com/getstarted.html 五种工作模式的主要特点 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获 ...