一、hive的压缩

1. hadoop的压缩

1)为什么需要压缩

MapReduce的性能瓶颈:网络IO、磁盘IO

数据量:对于MapReduce的优化,最主要、根本就是要能够减少数据量

Combiner:减少跨网络传输的数据量

压缩:将数据量减少,但是需要消耗CPU计算功能

2)哪些地方可以压缩

(1)输入文件进行压缩

(2)map的输出进行压缩

(3)reduce的输出进行压缩

3)压缩方式

gzip,lzo,snappy,bzip2

10G -->128M

10G -->压缩gizp -->6G -->128M(无法切分)

map的输入文件如果是压缩的,最好选择一种支持split的压缩方式;如果选择不支持split的压缩方式,那么大文件将会由一个map进程进行处理。

如果要选择不支持split的压缩方式,那么解决办法:先将大文件分割成大小接近128M的小文件,然后对这些小文件进行单独压缩。

4)压缩方式选择原则

(1)压缩比率

(2)压缩解压速度

(3)是否支持split切分

综合压缩比率和压缩解压速度,更注重压缩解压速度。

常用压缩方式: SNAPPY,LZO

reduce端的输出:

(1)reduce端的输出结果,后面很少使用;使用压缩比率较高的方式

(2)迭代计算,使用压缩提升性能;

5)如何配置

配置map端输出压缩  mapreduce.map.output.compress=true

配置map端压缩算法  mapreduce.map.output.compress.codec=默认zlib,通常改为snappy

配置reduce端输出压缩    mapreduce.output.fileoutputforamt.compress=true

mapreduce.output.fileoutputforamt.compress.type=NONE,RECORD or BLOCK

配置reduce端压缩算法 mapreduce.output.fileoutputforamt.compress.codec=默认zlib

6)hdoop参数配置查找:

(1)官网

(2)*-default.xml

(3)hive

启动hive,启用hadoop历史服务器进程,运行一个mapreduce的sql查询,到8088页面,点击job的【history】--->左边栏位的

7)压缩配置临时生效

bin/hadoop jara abc.jar wordcount -Dmapreduce.map.output.compress=true -D mapreduce.output.fileoutputforamt.compress=压缩算法类

2. hive的压缩

hive.exec.compress.intermediate设为true

SQL翻译成多个mapreduce的话,hive.exec.compress.intermediate不仅仅控制MapReduce中map的输出结果压缩,也控制着job之间的输出输入压缩

set hive.exec.compress.intermediate=true

二、hive的文件格式

1. 存储格式

create table

stored as textfile;

hive一般以文本格式来加载源数据,因为源数据本身就是文本格式。

统计分析过程,采用其他优化的文件格式。

1)以行格式存储文件

textfile

sequenceFile 二进制序列化文件

2)以列式格式存储文件

rcfile

orfile

parquet: hive/spark/impala

2. 案例实战

淘宝日志

在企业中(优化手段)

orc + snappy

parquete + snappy : spark天生支持parquet

UDF

压缩和文件格式相结合

对于MapReduce、Hive优化,可以将压力从磁盘IO、网络IO转移到CPU上。

三、日志数据的处理

某培训机构日志分析案例:

大数据,H5,PHP

Nginx服务器 --> web服务器

(nginx服务器安装)

淘宝 nginx -> 升级成tengine版本

正则表达式: http://wpjam.qiniudn.com/tool/regexpal/

在分析过程中,根据业务需求所需要的字段,拆解出小表。

大表拆分成小表

hive jdbc : mvnrepository.com

UDF/UDTF/UDAF

四、hive的优化方案

1. hive的性能下降

1)本质:MapReduce

map个数 reduce个数

map输出结果数据传输到reduce:数据量、数据倾斜

2)sql层面

group by:

order by:全局排序,只会有一个reduce

join

3)整体架构

服务器资源

4G->8G

2. 优化措施

1)不转成mapreduce任务

(1)minimal:

select * from where (分区表)

fetch task:抓取任务,直接hdfs相关目录下读取文件内容

(2)more:

select clolumnname from tablename where xxx limit xx;

2)mapreduce的运行模式

本地模式、伪分布式模式、分布式模式

少数据量,如果直接启动本地模式进行,对性能会有一定的提高。

3)并发执行

某些sql会转成多个MapReduce job

(1)集群资源匮乏,这时候就不要并发执行

(2)集群空闲,可以通过并发执行提供性能

4)join优化

能先进行过滤则先过滤再join

启动mapjoin优化:使用mapjoin是不需要再执行reduce

select /*+MAPJOIN(samlltablename)*/

5)group by优化

数据倾斜:

map或者reduce中,某个map或者reduce的执行时间比较长;

不可split的压缩方式来压缩输入文件 -->map端的数据倾斜。

reduce端的数据倾斜:

数据倾斜:自然的普遍现象。 2/8原理,80%的访问量/订单量,由20%的用户产生。

不可避免,无法规避。

group by:

(1)随机分配,key值打散到每个reduce进行一次group by,再进行另外一次group by,

hive.groupby.skewindata=true

(2)相同的key分配到同一个reduce再进行另外一次group by(汇总)

写sql进行减缓,日志分析里面null值往往是造成数据清洗额的原因。

user_id很多是null值,这时使用user_id作为join的on key字段,就很容易造成数据倾斜。

解决方案:

user_id为Null,使用case when then else end函数,将null先转成一个随机值(不可重复)

6)分区表、大表拆小表、桶表

7)压缩、文件格式

8)JVM重用

前提条件:job数量多,每个job处理的数据量少

hive sql 转成mapreduce job是多个,

启动、停止mapreduce的进程(map进程和reduce进程)也是需要消耗时间的,

当每个job处理的数据量并不是很大,这时候,就可以启用jvm重用措施。

默认是不重用

mapred.job.reuse.jvm.num.tasks=1

可以先使用explain sql查看一下sql执行计划,再去调整

mapreduce任务是进程级别的任务

spark任务是线程级别

9)multi insert

from tablename

insert overwrite table newtable1

select *

from tablename

insert overwrite table newtable2

select * where clause1

from tablename

insert overwrite table newtable2

select * where clause2

10)推测执行

对于某个map/reduce,当map/reduce出现延迟现象,推测执行机制会从集群中另外找台比较空闲的服务器,重新执行该map/reduce,

此时会有两个相同的map/reduce(处理的数据相同)运行,

最终的结果以最先执行结束的map/reduce为准,另一个没有执行完的map/reduce会被杀掉。

spark里面也有该机制

《OD学hive》第六周20160731的更多相关文章

  1. 《OD学Hive》第六周20160730

    一.Hive的JDBC连接 日志分析结果数据,存储在hive中 <property> <name>hive.server2.thrift.port</name> & ...

  2. 《OD学hive》第五周0723

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual 一.创建表 create table student(id int, n ...

  3. 《OD学hive》第四周0717

    一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...

  4. 《OD学hadoop》第二周0702

    大数据离线计算hadoop2.x 三周(6天) markdown文本剪辑器 罗振宇--跨年演讲,时间的朋友 http://tech.163.com/16/0101/11/BC87H8DF000915B ...

  5. 《OD学hadoop》第二周0703

    hdfs可视化界面: http://beifeng-hadoop-01:50070/dfshealth.html#tab-overview yarn可视化界面: http://beifeng-hado ...

  6. 《OD学hadoop》第一周0625

    一.实用网站 1. linux内核版本 www.kernel.org 2. 查看网站服务器使用的系统  www.netcraft.com 二.推荐书籍 1. <Hadoop权威指南> 1- ...

  7. 从零开始学Python第六周:面向对象基础(需修改)

    标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  8. 《OD学hadoop》第一周0626 作业二:Linux基础

    一.打包压缩 知识点: tar -zxvf -C PATH tar -jxvf tar -zcvf tar -jcvf tar:打包命令 -z 打包同时gzip压缩 -j 打包同时bzip2 -c 打 ...

  9. 《OD学hadoop》第一周0625 LINUX作业一:Linux系统基本命令(一)

    1. 1) vim /etc/udev/rules.d/-persistent-net.rules vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE= ...

随机推荐

  1. UML构建模块(转载)

    UML描述的实时系统,这是非常重要的一个概念模型,然后进行逐渐. UML的概念模型可以通过学习掌握以下三大要素: UML构建模块 规则连接构建模块 UML的公共机制 本章介绍了所有的UML构建块. U ...

  2. centos msyql 安装与配置

    Mysql具有简单易学.体积小等优点,深受编程开发初学者的喜爱 工具/原料 接入Internet的Centos计算机 安装Mysql 1 Centos 6.6下安装Mysql很简单, yum list ...

  3. samsung-smart app 开发

    http://www.samsungdforum.com/ http://seller.samsungapps.com/login/signIn.as?returnURL=%2fmain%2fsell ...

  4. Sqli-labs less 59

    Less-59 与less58一致,直接给出一个示例payload: http://127.0.0.1/sqli-labs/Less-59/?id=-1 union select extractval ...

  5. Ruby探针的基本实现原理

    李哲 - MAY 13, 2015 语言本身 Ruby语言支持语法级别的系统,框架,甚至语言本身的方法复写,一般叫做元编程(meta programming), 此基础之上还有一些术语为mixin,方 ...

  6. hdu 1800 Flying to the Mars(简单模拟,string,字符串)

    题目 又来了string的基本用法 //less than 30 digits //等级长度甚至是超过了int64,所以要用字符串来模拟,然后注意去掉前导零 //最多重复的个数就是答案 //关于str ...

  7. UVA 11795

    B Mega Man’s Missions Input Standard Input Output Standard Output Mega Man is off to save the world ...

  8. POJ 2689 Prime Distance (素数筛选法,大区间筛选)

    题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...

  9. 简约的单页应用引擎:sonnyJS

    点这里 SonnyJS是一个简约的单页应用引擎和HTML预处理器,旨在帮助开发人员和设计人员创建难以置信的强大和快速的单页网站. 主要特性: 模板嵌套,模板继承 动态同步模板路由(非Ajax) 跨窗口 ...

  10. 初始JSON

    SON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来传输的 JSON的两种静态方法: 1.JSON.parse();  string --> ...