大数据篇(2-3)--Hive(3)Hive调优

hvie调优可以分为几个模块进行考虑,数据的压缩与存储,hive参数的优化,sql的优化,解决数据的倾斜等。

一,数据的压缩与存储格式


1)压缩方式

      压缩可以节约磁盘的空间,基于文本的压缩率可达40%+; 压缩可增加吞吐量和性能量(减小载入内存的数据量),但是在压缩和解压过程中会增加CPU的开销。所以针对IO密集型的jobs(非计算密集型)可以使用压缩的方式提高性能。 几种压缩算法:

压缩方式

压缩后大小

压缩速度

是否可分割

GZIP

BZIP2

LZO

Snappy

2)存储格式(行存与列存)

1. TextFile

2.Sequence Files

3. RCFile

4.ORCFile

5.Parquet

压缩算法

Text格式

Parquet格式

ORC

RCFile

不压缩

119.2G

54.1G

20.0G

98G

Snappy压缩

30.2G

23.6G

13.6G

27.0G

Gzip压缩

18.8G

14.1G

不支持

15.2G

ZLIB压缩

不支持

不支持

10.1G

不支持

建表中与mapreduce可以选择压缩的地方

设置方式:

1. map阶段输出数据压缩 ,在这个阶段,优先选择一个低CPU开销的算法。

set hive.exec.compress.intermediate=true

set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec

set mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec;

2.hive.exec.compress.output:用户可以对最终生成的Hive表的数据通常也需要压缩。该参数控制这一功能的激活与禁用,设置为true来声明将结果文件进行压缩。 (也可以在建表的时候进行设置)

set hive.exec.compress.output=true

set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec

结论,一般选择orcfile/parquet + snappy 的方式

建表语句:

create table tablename (

 xxx,string

 xxx, bigint

)

ROW FORMAT DELTMITED FIELDS TERMINATED BY '\t'

STORED AS orc tblproperties("orc.compress" = "SNAPPY")

二、创建分区表,桶表


1)创建分区表:(分区表相当于hive的索引,加快查询速度)

2)创建桶表:

三、hive参数优化


1)fetch task 为执行hive时,不用执行MapReduce。如select * from emp;

将Hive.fetch.task.conversion属性设置为more(默认为minimal)

2)并行执行

当一个sql中有多个job时候,且这多个job之间没有依赖,则可以让顺序执行变为并行执行(一般为用到union all )

// 开启任务并行执行
set hive.exec.parallel=true;
// 同一个sql允许并行任务的最大线程数
set hive.exec.parallel.thread.number=8;

3)jvm 重用

重用JVM可以减少JVM启动时带来的开销:

JVM重用对hive的性能具有非常大的 影响,特别是对于很难避免小文件的场景或者task特别多的场景,这类场景大多数执行时间都很短。jvm的启动过程可能会造成相当大的开销,尤其是执行的job包含有成千上万个task任务的情况。

set mapred.job.reuse.jvm.num.tasks=10;

备注:

        JVM的一个缺点是,开启JVM重用将会一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡“的job中有几个 reduce task 执行的时间要比其他reduce task消耗的时间多得多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。

4)设置reduce的数目

调整reduce个数方法一: 调整hive.exec.reducers.bytes.per.reducer参数的值;

set hive.exec.reducers.bytes.per.reducer=500000000; (500M)

调整reduce个数方法二;

set mapred.reduce.tasks = number

reduce个数的设定极大影响任务执行效率,不指定reduce个数的情况下,Hive会猜测确定一个reduce个数,基于以下两个设定:

hive.exec.reducers.bytes.per.reducer
(每个reduce任务处理的数据量,在Hive 0.14.0版本之前默认值是1G(1,000,000,000);

而从Hive 0.14.0开始,默认值变成了256M(256,000,000) )

 hive.exec.reducers.max
(每个任务最大的reduce数,在Hive 0.14.0版本之前默认值是999;

而从Hive 0.14.0开始,默认值变成了1009 )

 计算reducer数的公式很简单N=min(参数2,总输入数据量/参数1) 即,如果reduce的输入(map的输出)总大小不超过1G,那么只会有一个reduce任务;

reduce个数并不是越多越好; 同map一样,启动和初始化reduce也会消耗时间和资源; 另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题

5) 推测执行

  什么是推测执行?

        所谓的推测执行,就是当所有task都开始运行之后,Job Tracker会统计所有任务的平均进度,如果某个task所在的task node机器配置比较低或者CPU load很高(原因很多),导致任务执行比总体任务的平均执行要慢,此时Job Tracker会启动一个新的任务(duplicate task),原有任务和新任务哪个先执行完就把另外一个kill掉

怎么配置推测执行参数?

推测执行需要设置Job的两个参数:

    mapred.map.tasks.speculative.execution

    mapred.reduce.tasks.speculative.execution

两个参数的默认值均为true.

四、优化sql


(1)where条件优化

优化前(关系数据库不用考虑会自动优化):

select m.cid,u.id from order m join customer u on( m.cid =u.id )where m.dt='20180808';

优化后(where条件在map端执行而不是在reduce端执行):

select m.cid,u.id from (select * from order where dt='20180818') m join customer u on( m.cid =u.id);

(2)union优化

尽量不要使用union (union 去掉重复的记录)而是使用 union all 然后在用group by 去重

(3)count distinct优化

不要使用count (distinct   cloumn) ,使用子查询

select count(1) from (select id from tablename group by id) tmp;

(4) 用in 来代替join

如果需要根据一个表的字段来约束另为一个表,尽量用in来代替join .

select id,name from tb1  a join tb2 b on(a.id = b.id);

select id,name from tb1 where id in(select id from tb2); in 要比join 快

(5)消灭子查询内的 group by 、 COUNT(DISTINCT),MAX,MIN。 可以减少job的数量。

(6) join 优化:

优化Map join 、Reduce join:

set hive.auto.convert.join=true;

   Common/shuffle/Reduce JOIN 连接发生的阶段,发生在reduce 阶段, 适用于大表 连接 大表(默认的方式)

Map join : 连接发生在map阶段 , 适用于小表 连接 大表

            大表的数据从文件中读取

            小表的数据存放在内存中(hive中已经自动进行了优化,自动判断小表,然后进行缓存)

SMB join:

   Sort -Merge -Bucket Join  对大表连接大表的优化,用桶表的概念来进行优化。在一个桶内发送生笛卡尔积连接(需要是两个桶表进行join)

set hive.auto.convert.sortmerge.join=true; 

set hive.optimize.bucketmapjoin = true; 

set hive.optimize.bucketmapjoin.sortedmerge = true; 

set hive.auto.convert.sortmerge.join.noconditionaltask=true;

五、数据倾斜


某个reduce的数据输入量远远大于其他reduce数据的输入量

(比如:任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。)

原因:

1)、key分布不均匀

2)、业务数据本身的特性

3)、建表时考虑不周

4)、某些SQL语句本身就有数据倾斜

关键词

情形

后果

join

其中一个表较小,但是key集中

分发到某一个或几个Reduce上的数据远高于平均值

join

大表与大表,但是分桶的判断字段0值或空值过多

这些空值都由一个reduce处理,非常慢

group by

group by 维度过小,某值的数量过多

处理某值的reduce非常耗时

count distinct

某特殊值过多

处理此特殊值reduce耗时

解决方案:

(1)参数调节

set hive.map.aggr=true

set hive.groupby.skewindata=true

(2) 熟悉数据的分布,优化sql的逻辑,找出数据倾斜的原因。

六、合并小文件


小文件的产生有三个地方,map输入,map输出,reduce输出,小文件过多也会影响hive的分析效率:

设置map输入的小文件合并

set mapred.max.split.size=256000000; 

//一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)

set mapred.min.split.size.per.node=100000000;

//一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并) 

set mapred.min.split.size.per.rack=100000000;

//执行Map前进行小文件合并

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

设置map输出和reduce输出进行合并的相关参数:

//设置map端输出进行合并,默认为true

set hive.merge.mapfiles = true

//设置reduce端输出进行合并,默认为false

set hive.merge.mapredfiles = true

//设置合并文件的大小

set hive.merge.size.per.task = 256*1000*1000

//当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。

set hive.merge.smallfiles.avgsize=16000000

更多Hive内容:

大数据篇(2-1)--Hive(1)简介

大数据篇(2-2)--Hive(2)Hive分区表和分桶表

大数据篇(2-3)--Hive(3)Hive调优

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于⼤数据平台数据分析技术选型调研 技术选型调研 ⼤⽅向任务 分布式平台 选出⼏个可⾏的⽅案 分析优缺点 任务细分: 数据源存储的问题 ⽀持分布式的深度学习组件 业内端到端的解决⽅案有哪些——可借鉴的架构⽅案 ⽅案路线 1. hdfs -> mapreduce -> hive(on spark/Tez) -> 提取⼩批量数据 -> 预建模预分析:sklearn/Tensorflow 2. hdfs -> yarn -> spark -> spark mllib/TensorFlowonSpark/BigDL 数据存储 分布式⽂件系统–HDFS 分布式关系型数据库–Hive 优点: 1. 将sql转化为MapReduce,适⽤于离线批处理环境 2. Hive的执⾏延迟⽐较⾼,因此Hive常⽤于数据分析,对实时性要求不⾼的场合 3. Hive 优势在于处理⼤数据 4. Hive ⽀持⽤户⾃定义函数,⽤户可以根据⾃⼰的需求来实现⾃⼰的函数 缺点: 1. 基于MapReduce,速度慢 2. Hive调优⽐较困难,粒度较粗 3. 迭代式算法⽆法表达 4. 由于 MapReduce 数据处理流程的限制,效率更⾼的算法却⽆法实现 分布式⾮关系型数据库–HBase 优点: 1. 容量⼤:Hbase单表可以有百亿⾏、百万列,数据矩阵横向和纵向两个维度所⽀持的数据量级都⾮常具有弹性 2. 列存储:其数据在表中是按照某列存储的,这样在查询只需要少数⼏个字段的时候,能⼤⼤减少读取的数量,可以动态增加列 3. ⾼可⽤,依赖于Zookeeper 4. 写⼊速度快,适⽤于读少写多的场景 5. 稀疏性,为空的列并不占⽤存储空间,表可以设计的⾮常稀疏。不需要null填充 缺点: 1. 不能⽀持条件查询,只⽀持按照row key来查询 2. 只能在主键上索引和排序 3. 对join以及多表合并数据的查询性能不好 4. 更新过程中有⼤量的写⼊和删除操作,需要频繁合并和分裂,降低存储效率 优化Hive on Tez / Spark 使⽤Tez和Spark替代MapReduce,达到提⾼Hive执⾏效率的⽬的 计算引擎 Spark ⽬前Spark⽀持三种分布式部署⽅式,分别是 standalone spark on MESOS spark on YARN(较流⾏) 优点:(与MapReduce相⽐) 1. 能处理循环迭代式数据流处理 2. 适⽤于多并⾏的数据可复⽤场景(如:机器学习、图挖掘算法、交互式数据挖掘算法) 3. RDD提供了⽐MapReduce 丰富的模型,可以快速在内存中对数据集进⾏多次迭代,来⽀持复杂的数据挖掘算法和图形计算算法 4. Spark 多个作业之间数据通信是基于内存,效率更⾼ 缺点: 1. Spark 是基于内存的,由于内存的限制,可能会由于内存资源不够导致 Job 执⾏失败 算法层 SparkMLlib ⽀持的语⾔:python,scala,java ⽀持的⽂件系统:HDFS ⽀持的数据库:Hive,HBase ⽀持的算法:分类,聚类,回归,降维,协同过滤 优点: 1. Spark善于处理机器学习中迭代式运算,基于内存,因此迭代结果不会落在磁盘中 2. 可以使⽤Spark其他的衍⽣⼯具 缺点: 1. 缺少深度学习算法框架 Mahout ⽀持的语⾔:java,scala ⽀持的⽂件系统:HDFS ⽀持的数据库:Hive,HBase ⽀持的算法:分类,聚类,回归,降维,协同过滤 优点: 1. 基于hadoop实现 2. 利⽤MapReduce计算引擎,提升了算法可处理的数据量和处理性能。 缺点: 1. 由于实现算法需要MR化,所以实现的算法相对较少 2. 学习资料较少,官⽹提供的相关⽂档并没有很详细的关于每个算法的使⽤教程。 3. 不⽀持深度学习 TensorFlowOnSpark 使Spark能够利⽤TensorFlow拥有深度学习和GPU加速计算的能⼒,⽬前被⽤于雅虎私有云的Hadoop集群中 ⽀持的语⾔:python ⽀持的⽂件系统:HDFS ⽀持的计算引擎:Spark [外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-LLlTJW0P-1615273602194) (C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210124224553335.png)] 优点: 1. 可⽤于⽣产环境 2. ⽀持所有TensorFlow功能 3. 轻松移植现有TensorFlow程序到Spark集群上 4. 轻松整合现有的数据处理流程和机器学习算法 5. 更新频率⾼,且⽀持最新版本的TensorFlow和Spark 6. 代码量少便于⼆次
01_数仓项目介绍.avi4 b4 Q* Q8 Z0 Y) C6 O! w 02_数仓采集_用户行为采集课程介绍.avi8 \7 f3 O. c- {: v# W& V$ Y& b 03_数仓采集_数仓的概念.avi8 Z# X* q/ c; }3 A* [ T 04_数仓采集_项目需求.avi6 B8 n s0 h! M4 X# j! |0 ` 05_数仓采集_项目技术选型.avi8 [% N% W, U# y5 s 06_数仓采集_系统数据流程设计.avi8 N: L Y6 D6 y 07_数仓采集_框架版本选型.avi, k8 c& `! j& B 08_数仓采集_框架版本具体型号.avi1 x& Q/ D. O' l 09_数仓采集_服务器选型.avi3 _: b. H. i! a; O8 V3 A7 [1 s0 t; B 100_业务数仓_DWS层之用户行为宽表.avi* o! `2 N, _5 u& a$ W 101_业务数仓_需求九:GMV成交总额.avi; x4 H& X( _' I8 L7 r* n3 I/ y 102_业务数仓_需求十:ADS层之新增用户占日活跃用户比率.avi 103_业务数仓_需求十一:ADS层之用户行为漏斗分析.avi 104_业务数仓_用户购买商品明细表(宽表).avi 105_业务数仓_需求十二:ADS层品牌复购率.avi 106_业务数仓_需求十三:求每个等级的用户对应的复购率前十的商品排行(学生分享).avi6 e) h" C# G2 X+ z6 B 107_业务数仓_数据可视化.avi! @5 r5 g- n0 f, J3 l 108_业务数仓_Azkaban安装.avi( r9 z2 L3 \% G' k9 [: t9 K 109_业务数仓_GMV指标获取的全调度流程.avi& O, S. M2 Q# o 10_数仓采集_集群资源规划设计.avi 110_业务数仓_拉链表理论.avi 111_业务数仓_拉链表制作.avi+ k: N4 e; P4 X; ?( i' O0 {0 u. M9 Y 112_业务数仓_业务数仓项目总结.avi/ {1 S. ^* Y" b# M) | 113_业务数仓_即席数仓课程介绍.avi 114_即席数仓_Presto简介.avi+ r. E# z! Z4 t% o+ r8 }7 Q 115_即席数仓_Presto安装及使用.avi 116_即席数仓_Presto优化.avi% @4 x# m3 } G# h 117_即席数仓_Druid概念、特点、场景.avi 118_即席数仓_Druid对比其他框架.avi7 C4 m1 z" }# n% h( F 119_即席数仓_Druid框架原理.avi 11_数仓采集_测试集群服务器规划.avi* X" H5 S4 M1 C0 j" w 120_即席数仓_Druid数据结构.avi, V& D, ]# l" a0 R1 ?) n; L f 121_即席数仓_Druid安装.avi 122_面试题_总体架构.avi! c' O1 I8 T6 n Q 123_面试题_技术框架.avi 124_面试题_用户行为、业务数据、即席查询.avi4 N2 j# j6 P% O" a 125_面试题_开发经验.avi3 b$ C' k; H" B2 p# c( \ 126_CDH数仓_课程介绍.avi9 _. V/ m% J5 ^* s/ g+ f; g( s 127_CDH数仓_CM简介及架构.avi8 ]' ]* B! X' j. Z9 [ 128_CDH数仓_CM安装环境准备.avi, Q8 k8 x/ j3 v 129_CDH数仓_CM、Hadoop、Zookeeper安装.avi7 z) @! o) G0 @4 s; J 12_数仓采集_埋点数据基本格式.avi 130_CDH数仓_采集Flume的安装.avi# V L4 F& x1 t* }( Z8 F' o9 g' ` 131_CDH数仓_Kafka安装.avi" N8 o- i b/ W) o3 j8 j/ a/ g 132_CDH数仓_测试Flume和Kafka安装.avi 133_CDH数仓_消费Flume配置完成.avi6 ?$ m3 H4 m; C# ^$ j 134_CDH数仓_Hive、Oozie、Hue安装.avi# ]& Y, M2 |) A( o# Y( b& w 135_CDH数仓_用户行为数仓ODS层导数据.avi 136_CDH数仓_用户行为数仓完结.avi. F4 z* v& a; q" }% V* \ 137_CDH数仓_业务数据生成.avi7 W7 \$ ~$ n% w2 N, {( A; l! }8 K: S 138_CDH数仓_业务数仓完结.avi! N7 f. d0 U2 N( }' w) P- b" S 139_CDH数仓_Oozie执行前准备.avi 13_数仓采集_事件日志数据(上).avi2 S' ` H& ^& S3 a1 X 140_CDH数仓_Oozie任务编写及运行.avi 141_CDH数仓_即席查询数仓搭建Impala.avi 142_CDH数仓_Spark安装及总结.avi 14_数仓采集_事件日志数据(下).avi 15_数仓采集_日志生成代码编写.avi4 |* G) Z3 J4 ]/ b9 z$ @ 16_数仓采集_Logback日志打印控制.avi 17_数仓采集_服务器准备.avi 18_数仓采集_Hadoop安装.avi 19_数仓采集_项目经验之HDFS多目录配置.avi 20_数仓采集_项目经验之支持LZO压缩配置.avi j3 Q& D8 m* G9 R Q$ G 21_数仓采集_项目经验之基准测试.avi 22_数仓采集_项目经验之HDFS参数调优.avi; F" t) F) H7 W' {& L% n3 H ~7 s 23_数仓采集_Zookeeper安装.avi6 c1 v9 x4 \% K5 D. \0 M 24_数仓采集_项目经验之ZK集群启动停止脚本.avi( i1 P# ^( y1 Q- a 25_数仓采集_生成测试日志.avi 26_数仓采集_集群日志生成启动脚本.avi 27_数仓采集_集群时间同步修改脚本.avi, n2 a/ j1 @) t* d w 28_数仓采集_集群所有进程查看脚本.avi 29_数仓采集_每日回顾.avi; R" Y P2 X, E/ [+ B' j# ~& K. e 30_数仓采集_日志采集Flume安装.avi* V0 |0 U7 o- @* R; w) M 31_数仓采集_Flume组件及配置.avi 32_数仓采集_日志采集Flume配置分析.avi U6 j% Q4 F$ T6 U5 ^ 33_数仓采集_ETL拦截器.avi 34_数仓采集_分类型拦截器.avi! b5 ^. a8 ^; }$ x8 z) l2 U3 }" p 35_数仓采集_日志采集Flume启动停止脚本.avi2 ~/ r- J: h$ U, q/ e# e7 k% M 36_数仓采集_Kafka集群安装.avi3 L6 `7 F& o/ U6 F" U5 U 37_数仓采集_Kafka集群启动停止脚本.avi 38_数仓采集_Kafka Manager安装及脚本.avi& h9 z' v' g0 ^. }0 j 39_数仓采集_项目经验之Kafka压力测试.avi7 ~8 m+ w$ q/ G$ ?- _- K 40_数仓采集_项目经验之Kafka机器数量计算.avi 41_数仓采集_消费Kafka数据Flume.avi 42_数仓采集_项目经验之Flume内存优化.avi; q3 Q6 E! I, d7 n& k# {# B6 K 43_数仓采集_项目经验之Flume组件.avi- S+ J+ s/ {5 S0 d 44_数仓采集_采集通道启动停止脚本.avi! Q; X6 }4 C" g. f 45_数仓采集_调试经验.avi! P; q2 w N1 c i5 Z' c; i" i' O- x 46_数仓采集_面试题(Linux、Shell、Hadoop).avi2 R" A6 R7 D' p9 h( i. \ I" F9 w 47_数仓采集_面试题(Flume、Kafka).avi& A1 w0 W) S1 ~# i& n, } ~6 o( b& o 48_用户行为数仓_每日回顾.avi% U( @. v7 D* C* B W J 49_用户行为数仓_用户行为数仓课程介绍.avi 50_用户行为数仓_为什么要分层.avi! J- C* F* K' R* l 51_用户行为数仓_数仓分层.avi4 W _. ]: j5 U; l$ Q9 l. Q [/ u 52_用户行为数仓_数据集市与数据仓库概念.avi5 U5 c# e( Y8 B% c 53_用户行为数仓_数仓命名规范.avi 54_用户行为数仓_Hive&MySQL;安装.avi 55_用户行为数仓_Hive运行引擎Tez.avi! L# \% m0 s- F; A" q 56_用户行为数仓_项目经验之元数据备份.avi 57_用户行为数仓_ODS层启动日志和事件日志表创建.avi 58_用户行为数仓_ODS层加载数据脚本.avi' J8 ^- I/ b5 O3 Y) @9 a- h 59_用户行为数仓_DWD层启动日志建表及导入数据.avi9 h3 [. T0 F1 ~6 s! i/ J 60_ 用户行为数仓_DWD层启动表加载数据脚本.avi$ \1 Z0 Z/ m; d: F+ B5 u$ c 61_用户行为数仓_DWD层事件基础明细表创建.avi; Y& i+ U7 S6 P" X) T3 n! V 62_用户行为数仓_自定义UDF函数(解析公共字段).avi7 Q/ i) X8 O6 S0 M( V' m- ]- M 63_用户行为数仓_自定义UDTF函数(解析事件日志基础明细表).avi 64_用户行为数仓_DWD层数据解析脚本.avi 65_用户行为数仓_DWD层事件表加载数据脚本.avi 66_用户行为数仓_今日回顾.avi* e9 W+ P$ {5 ?! x9 [- e5 ]# a 67_用户行为数仓_业务术语.avi 68_用户行为数仓_日期的系统函数.avi 69_用户行为数仓_每日活跃设备明细.avi 70_用户行为数仓_每周活跃设备明细.avi 71_用户行为数仓_每月活跃设备明细.avi 72_用户行为数仓_DWS层加载数据脚本.avi- i* h$ d' Q7 M1 G0 ?% f 73_用户行为数仓_需求一:ADS层日活、周活、月活用户数.avi- I- Q* u3 n; v. n, T 74_用户行为数仓_每日新增设备明细表.avi/ B# |; {' c4 y6 y9 \2 r( i 75_用户行为数仓_需求二:ADS层每日新增设备表.avi 76_用户行为数仓_用户留存分析.avi 77_用户行为数仓_1、2、3、n日留存用户明细.avi v. ^5 Q1 \ `9 V4 Q 78_用户行为数仓_需求三:ADS层留存用户和留存比率.avi 79_用户行为数仓_新数据准备.avi 80_用户行为数仓_需求四:沉默用户.avi 81_用户行为数仓_需求五:本周回流用户数.avi 82_用户行为数仓_需求六:流失用户.avi2 x0 _( B( `, z4 j$ |5 S2 Z4 T- e% R) ] 83_用户行为数仓_需求七:最近连续3周活跃用户数.avi 84_用户行为数仓_需求八:最近七天内连续三天活跃用户数.avi- C- l" J O8 v3 x- J$ r 85_用户行为数仓_用户行为数仓业务总结.avi- V4 n, x9 B* A( P6 n/ e! E! U 86_用户行为数仓_Hive企业面试题总结.avi3 l9 J8 F2 t0 p& S! O! ^ 87_业务数仓_业务数仓课程介绍.avi 88_业务数仓_电商业务与数据结构简介.avi 89_业务数仓_表的分类.avi# X. Q* ~# f7 F P' @; i+ z 90_业务数仓_同步策略.avi; k0 r$ A: b9 E) @1 W 91_业务数仓_范式理论.avi5 ~2 z+ A' F+ N- J" S% r 92_业务数仓_雪花模型、星型模型和星座模型.avi 93_业务数仓_配置Hadoop支持Snappy压缩.avi 94_业务数仓_业务数据生成.avi 95_业务数仓_Sqoop安装及参数.avi% s/ l0 E. R( Y9 s, h3 k 96_业务数仓_Sqoop导入数据.avi4 {8 ~! a8 o4 `" y: p5 {1 ^ 97_业务数仓_ODS层建表及数据导入.avi 98_业务数仓_DWD层建表及导入数据.avi 99_业务数仓_需求讲解.avi7 X6 q, I3 Y+ F: N8 h 源码笔记资料.rar0 W
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark历史 4 4 BDAS生态系统 4 5 Spark与Hadoop的差异 5 6 Spark的适用场景 6 7 Spark成功案例 6 第二章 Spark开发环境搭建 8 1 Spark运行模式 8 2 Spark环境搭建 8 2.1Scala的安装 8 2.2Spark的单节点配置 9 2.3Spark-Standalone集群配置 9 2.4Spark-on-Yarn模式配置 12 2.5Spark-on-Mesos模式配置 13 2.6Hive-on-Spark配置 13 第三章 Spark计算模型 15 1 RDD编程 15 1.1弹性分布式数据集RDD 15 1.2构建RDD对象 15 2RDD操作 15 2.1将函数传递给Spark 16 2.2了解闭包 16 2.3Pair RDD模型 17 2.4Spark常见转换操作 18 2.5Spark常见行动操作 20 2.6RDD持久化操作 21 2.7注意事项 23 2.7并行度调优 24 2.8分区方式 25 3Examle:PageRank 27 第四章 Spark编程进阶 29 1共享变量 29 1.1累加器 30 1.2广播变量 31 2基于分区进行操作 32 3与外部程序间的管道 33 4数值RDD的操作 34 5 Spark Shuffle机制 34 第五章 Spark调优与调试 39 1开发调优: 40 1.1调优概述 40 1.2原则一:避免创建重复的RDD 40 1.3原则二:尽可能复用同一个RDD 41 1.4原则三:对多次使用的RDD进行持久化 42 1.5原则四:尽量避免使用shuffle类算子 43 1.6原则五:使用map-side预聚合的shuffle操作 44 1.7原则六:使用高性能的算子 45 1.8原则七:广播大变量 46 1.9原则八:使用Kryo优化序列化性能 47 1.10原则九:优化数据结构 48 2资源调优 48 2.1调优概述 48 2.2 Spark作业基本运行原理 49 2.3资源参数调优 50 第六章 Spark架构和工作机制 52 1 Spark架构 52 1.1 Spark架构组件简介 52 1.2 Spark架构图 54 2 Spark工作机制 54 2.1 Spark作业基本概念 54 2.2 Spark程序与作业概念映射 55 2.3 Spark作业运行流程 55 3 Spark工作原理 55 3.1 作业调度简介 55 3.2 Application调度 56 3.3 Job调度 56 3.4 Tasks延时调度 56 第七章 Spark运行原理 57 1 Spark运行基本流程 57 2 Spark在不同集群中的运行架构 58 2.1 Spark on Standalone运行过程 59 2.2 Spark on YARN运行过程 60
⼤数据场景化解决⽅案 ⼤数据场景化解决⽅案 1.⼤数据的概念 维基百科的定义: ⼤数据是指利⽤常⽤软件⼯具捕获、管理和处理数据所耗时间超过可容忍时间的数据集。 2.⼤数据主流技术 数据采集: 使⽤Flume,可进⾏流式⽇志数据的收集。 使⽤Sqoop可以交互关系型数据库,进⾏导⼊导出数据。 使⽤爬⾍技术,可在⽹上爬取海量⽹页数据。 数据存储与管理: ⼤数据利⽤分布式⽂件系统HDFS、HBase、Hive,实现对结构化、半结构化和⾮结构化数据的存储和管理。 数据处理与分析: 利⽤分布式并⾏编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析。 3.场景化解决⽅案 在⾯对不同的场景时,会使⽤不同的⼤数据组件去解决处理,主要有如下⼤数据场景化解决⽅案。 离线批处理 实时检索 实时流处理 融合数仓 3.1 离线批处理 离线批处理,是指对海量历史数据进处理和分析,⽣成结果数据,供下⼀步数据应⽤使⽤的过程。离线批处理对数据处理的时延要求不 ⾼,但是处理的数据量较⼤,占⽤的计算存储资源较多,通常通过MR作业、Spark作业或者HQL作业实现。 离线批处理的特点: 处理时间要求不⾼ 处理数据量巨⼤ 处理数据格式多样 占⽤计算存储资源多 离线处理常⽤的组件: HDFS:分布式⽂件系统,为各种批处理引擎提供数据存储,可以存储各种⽂件格式数据。 YARN:资源调度引擎,为各种批处理引擎提供资源调度能⼒。 MapReduce:⼤数据批处理引擎,⽤于处理海量数据,但是处理速度较慢。 Hive:⼤数据SQL批处理引擎,⽤于处理SQL类批处理作业,但是处理速度较慢。 Spark:基于内存的数据处理引擎,适合海量数据,处理速度⾼效。 Spark SQL:Spark处理结构化数据的⼀个模块。 HDFS介绍 HDFS(Hadoop Distributed File System)基于Google发布的GFS论⽂设计开发。 其除具备其它分布式⽂件系统相同特性外,HDFS还有⾃⼰ 特有的特性: ⾼容错性:认为硬件总是不可靠的。 ⾼吞吐量:为⼤量数据访问的应⽤提供⾼吞吐量⽀持。 ⼤⽂件存储:⽀持存储TB-PB级别的数据。 HDFS适合:⼤⽂件存储与访问 流式数据访问 HDFS不适合:⼤量⼩⽂件存储 随机写⼊ 低延迟读取 HDFS回收站机制: 在HDFS⾥,删除⽂件时,不会真正的删除,其实是放⼊回收站,回收站⾥的⽂件可以⽤来快速恢复误删⽂件。 可以设置⼀个时间阀值(单位:分钟),当回收站⾥⽂件的存放时间超过这个阀值或是回收站被清空时,⽂件才会被彻底删除,并且 释放占⽤的数据块。 Hadoop回收站trash,默认是关闭的,若开启需要修改配置⽂件core-site.xml。 Hive概述 Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。 Hive特性: 灵活⽅便的ETL (Extract/Transform/Load)。 ⽀持MapReduce、Tez、Spark多种计算引擎。 可直接访问HDFS⽂件以及HBase。 易⽤易编程。 Hive函数: 查看系统函数的⽤法:show functions; 显⽰函数的⽤法:desc function upper; 详细显⽰函数的⽤法:desc function extended upper; 当Hive提供的内置函数⽆法满⾜业务处理需要时,此时就可以考虑使⽤⽤户⾃定义函数,编写处理代码并在查询中使⽤。 UDF(User-Defined-Function) ⽤于接收单个数据⾏,并产⽣⼀个数据⾏作为输出。 UDAF(User-Defined Aggregation Function) ⽤于接收多个数据⾏,并产⽣⼀个数据⾏作为输出。 UDTF(User-Defined Table-Generating Functions) ⽤于接收单个数据⾏,并产⽣多个数据⾏作为输出。 Hive调优 数据倾斜 数据倾斜指计算数据的时候,数据的分散度不够,导致⼤量的数据集中到了⼀台或者⼏台机器上计算,这些数据的计算速度远远低于平均 计算速度,导致整个计算过程过慢。 ⽇常使⽤过程中,容易造成数据倾斜的原因可以归纳为如下⼏点: group by distinct count(distinct xx) join 调优参数: 在map中会做部分聚集操作,效率更⾼但需要更多的内存。 set hive.map.aggr=true; 此时⽣成的查询计划会有两个MRJob,可实现数据倾斜时负载均衡。 set hive.groupby.skewindata=true; 当连接⼀个较⼩和较⼤表的时候,把较⼩的表直接放到内存中去,然后再对较⼤的表进⾏map操作。 set hive.auto.convert.join=true
### 回答1: Hive on Spark是大数据处理中的最佳实践之一。它将Hive和Spark两个开源项目结合起来,使得Hive可以在Spark上运行,从而提高了数据处理的效率和速度。Hive on Spark可以处理大规模的数据,支持SQL查询和数据分析,同时还可以与其他大数据工具集成,如Hadoop、HBase等。在实际应用中,Hive on Spark可以用于数据仓库、数据分析、机器学习等领域,是一种非常实用的大数据处理方案。 ### 回答2: 随着大数据应用的不断增多,越来越多的企业开始关注大数据技术的实现与应用。Hive是基于Hadoop的开源数据仓库系统,它提供了一种类似于SQL的语言,使得非技术用户能够方便地查询大量数据。而Spark则是现在最流行的分布式计算框架,因其内存计算功能,比Hadoop更加高效和快速。 在实践中,Hive on Spark将两个框架结合在一起,提供了更高效和实用的解决方案。在Hive on Spark中,数据可以通过Spark来加速计算和查询,从而实现更高效的大数据处理。Hive on Spark集成了Spark的强大内存计算引擎,可以支持更大规模的数据处理和更快速的查询处理,同时还可以提供更好的性能、更低的延迟和更低的处理成本。 Hive on Spark采用了Spark作为计算框架,Spark可以很快地对Hive上的数据进行处理,因此可以处理数百亿条数据。此外,由于Spark是基于内存的计算框架,因此可以大大提高计算速度,并消除了磁盘IO瓶颈。因此,Hive on Spark可以支持更快的查询响应时间和更高的用户并发性能。 除了这些,Hive on Spark还提供了更简单的应用管理和维护,对提高大数据处理效率和时间的优化非常有利。同时,它还提供了机器学习和深度学习模型的处理能力,从而可以实现更广泛的数据分析应用。尤其对于非技术人员,通过Hive on Spark,用户可以快速地实现自己的数据分析需求,从而实现有效管理和使用数据。 总之,Hive on Spark是目前最有效和实用的大数据处理和管理框架之一。它使得数据分析变得更加简单和高效,并可以快速满足业务需求,使企业在大数据技术和应用方向上取得更大成就。 ### 回答3: Hive on Spark是一种基于Apache Spark的分布式计算系统,它将Apache Hive和Spark技术相结合,提供了更加高效的数据处理和分析能力。在大数据行业中,Hive on Spark已经成为了一种最佳实践,因为它能够帮助企业实现更快的数据处理速度和更高的数据处理能力。 首先,Hive on Spark可以让企业更加轻松地使用Spark进行数据处理和分析。Apache Spark是一种流行的分布式计算框架,拥有强大的数据处理能力和高效的架构。而Hive on Spark将Hive SQL和Spark技术相结合,让企业用户能够以更加简单的方式使用Spark进行数据分析和处理。 其次,Hive on Spark能够极大地提高数据处理的速度和能力。Hive on Spark通过将Hive SQL转换为Spark的RDD操作,能够在分布式环境下对大规模数据进行高效的处理和分析。相比于传统的Hadoop集群,Hive on Spark可以提供更高的数据处理速度和更高的数据处理能力,能够帮助企业更加顺畅地进行数据分析和决策。 最后,Hive on Spark还具有可扩展性和灵活性。企业用户可以根据自身的需求对Spark集群进行扩容或者缩容,以满足更加多样化的数据处理需求。同时,Hive on Spark还支持多种数据格式,包括Hive表、CSV、JSON等,能够帮助企业更加灵活地处理不同类型的数据。 总之,Hive on Spark是大数据行业最佳实践之一,它能够帮助企业客户更加方便地使用Spark进行数据处理和分析,提高数据处理的速度和能力,同时还具有可扩展性和灵活性等特点,能够帮助企业更加高效地进行数据分析和决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值