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. private变量引用问题

    public class Scope{ private int i; public static void main(String argv[]){ //注意main参数不能少,否则编译ok,运行抛出 ...

  2. 像bootstrap一样的去做web编程

    1: 闭包 boot的闭包方式有点特别,普通的闭包是这样的: (function ($) { })(jQuery) 这种写法是怕全局污染,把$封闭在自己的空间里,暴露在外面的只有jQuery,这样,如 ...

  3. 《Python之BMI计算》

    <Python之BMI计算> 前段时间写了个 BMI 因为刚刚开始学 有几个错误 第一个: 厘米我当时也没注意因为觉得去掉0.00的话后面1866666666是正确的BMI值 刚刚去看看去 ...

  4. Berlin Programming Contest 2004 Heavy Transportation /// dijkstra oj22604

    题目大意: 输入t:t为样例数 每个样例输入n,m:n 为顶点个数 m 为路径数 接下来m行  每行输入 u v w :从 u 点到 v 点的路承重为 w 输出 车子若想通过 1~n的最短路 车重需限 ...

  5. 实现ViewPager的联动效果

    参考链接:android - Synchronizing two ViewPagers using OnPageChangeListener - Stack Overflow 其中有个非常完美的解决方 ...

  6. Linux 容器 vs 虚拟机——谁更胜一筹

    自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手.本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异. Linux容器vs虚拟机 - 应用程序与操作系统 ...

  7. oracle 如何在一个数据库创建多个实例

    实例:是一个非固定的.基于内存的基本进程与内存结构.当服务器关闭后,实例也就不存在了. 数据库(Database)指的是固定的.基于磁盘的数据文件.控制文件.日志文件.参数文件和归档日志文件等. 一般 ...

  8. java笔试之放苹果

    题目描述:M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入:每个用例包含二个整数M和N.0<=m< ...

  9. [NOIP2019模拟赛]HC1147 时空阵

    题目描述: 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和从b到a都只需要单位1的时间. ...

  10. 关于Slice的一些补充说明

    s[m:n:l] 规则总结如下. (1) 范围 [m,n),从m开始轮询:超出范围后选边界值. l>0 l<0 关于边界值 (2) 把字符串完全反序,用 s[::-1]. 有些文档上说 s ...