hive作业的优化策略
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作业的优化策略的更多相关文章
- 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...
- Hive(六)hive执行过程实例分析与hive优化策略
一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...
- Hive整体优化策略
一 整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez.Spark等.根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点: 1 根据 ...
- Hive优化策略
hive优化目标 在有限的资源下,运行效率高. 常见问题 数据倾斜.Map数设置.Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain ...
- Spark SQL概念学习系列之Spark SQL 优化策略(五)
查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存 ...
- 常见性能优化策略的总结 good
阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后 ...
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
- PHP中的数据库一、MySQL优化策略综述
前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查是核心.为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对 ...
- .Net中的并行编程-6.常用优化策略
本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略. 一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...
随机推荐
- 如何在 JavaScript 中使用 C 程序
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
- NEO4J 图数据库使用APOC数据导入
Neo4j 数据导入 一.安装与部署 直接在官网下载安装包安装,解压即可. 二.下载相应的jar包 apoc 包下载链接: https://github.com/neo4j-contrib/ne ...
- C# IP正则表达式
public static bool IsValidIp(string strIn) { bool b = Regex.IsMatch(strIn, @"^[0-9]{1,3}\.[0-9] ...
- SecureCRT 64位 破解版和安装,以及解决乱码问题
链接:https://pan.baidu.com/s/1q1DEmohK7ISNJ7UbJkN3jw 提取码:yea3 复制这段内容后打开百度网盘手机App,操作更方便哦 securecrt 破解版是 ...
- JavaScript特效源码(5、背景特效)
1.数字时钟 背景时钟[好大的钟][推荐][共1步] ====1.以下是这个效果的全部代码.[最好从一个空页面开始] <html> <head> <TITLE>背景 ...
- sqllocaldb
创建实例 sqllocaldb create v12.0 启动实例 sqllocaldb start v12.0
- css,js文件后面加一个版本号
由于前几天,更新了项目,更新的文件有js文件,今天客人截图过来,我发现修改之后的效果没有显示出来,我回复说清理浏览器缓存.到了晚上,客人找老板,说还没有处理到這个,说客人不懂這个.所以想到之前自己为了 ...
- LoadRunner脚本编写(6)— 数据类型转换和字符串操作
LoadRunner脚本编写(6)— 数据类型转换和字符串操作 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难.下面介绍这方面的知识. 1. 相似函 ...
- Apache添加多端口及实现单ip多端口映射的方法
这篇文章主要介绍了Apache添加多端口及实现单ip多端口映射的方法的相关资料,需要的朋友可以参考下(http://www.0831jl.com) 先给大家说下apache添加多端口的方法,具体步骤如 ...
- 廖雪峰Java11多线程编程-3高级concurrent包-2ReadWriteLock
ReentrantLock保证单一线程执行 ReentrantLock保证了只有一个线程可以执行临界区代码: 临界区代码:任何时候只有1个线程可以执行的代码块. 临界区指的是一个访问共用资源(例如:共 ...