hive,hadoop,yarn相关总结

栏目: 服务器 · 发布时间: 5年前

Hadoop参数调优

1. 设置合理的槽位数目

在Hadoop中,计算资源是用槽位(slot)表示的。slot分为两种:Map slot和Reduce slot。

2. 调整心跳间隔 

心跳中包含节点资源使用情况、各任务运行状态等信息,如果太小,NameNode需要处理高并发的心跳信息,势必造成不小的压力;如果太大,则空闲的资源不能及时通知NameNode(进而为之分配新的Task),造成资源空闲,进而降低系统吞吐率。

3. 选择合适的压缩算法 

Hadoop通常用于处理I/O密集型应用。对于这样的应用,Map Task会输出大量中间数据,这些数据的读写对用户是透明的,如果能够支持中间数据压缩存储,则会明显提升系统的I/O性能。

4. 启动预读取机制

预读取机制可以有效提高磁盘的I/O读性能。而Hadoop是典型的顺序读系统,采用预读取机制可明显提高HDFS读性能和MapReduce作业执行效率。

5. 设置任务超时时间 

在一些特殊情况下,一个任务可能因为某种原因(如Bug)阻塞了,这会拖慢整个作业的执行进度,甚至可能导致作业无法运行结束。针对此情况,Hadoop增加了任务超时机制。如果一个任务在一定时间间隔内没有汇报进度,则TaskTracker会主动将其杀死,从而在另一个节点上重新启动执行。

6. 提高作业优先级 

HIGH、NORMAL、LOW、MID、DEFAULT

7. Map Task调优 

Map Task的输出结果被暂时存放在一个环形缓冲区,调整环形缓冲区

8. Reduce Task调优 

Reduce Task会启动多个拷贝线程从每个Map Task上读取相应的中间结果。对每个待拷贝的文件,如果文件大小小于一定阈值A,则将其放到内存中,否则以文件的形式存放到磁盘上。如果内存中文件满足一定条件D,则会将这些数据写入磁盘,而当磁盘上文件数目达到io.sort.factor(默认是10)时,进行一次合并。用户可根据自己作业的特点对这些参数进行调优。

9. dfs.namenode.handler.count或mapred.job.tracker.handler.count用于处理RPC的线程数,

默认是10,较大集群,可调大些

10. 文件副本数

11. HDFS中数据block大小

YARN原理:

Yarn作为Hadoop的资源调度框架:

ResourceManager:ResourceManager是master上的进程,负责整个分布式系统的资源管理和调度。他会处理来自client端的请求(包括提交作业/杀死作业);启动/监控Application Master;监控NodeManager的情况。

NodeManager:NodeManager时处在slave节点上的进程,他只负责当前slave节点的资源管理和调度,以及task的运行。他会定期向ResourceManager回报资源/Container的情况(heartbeat);接受来自ResourceManager对于Container的启停命令。

Application Master:每一个提交到集群的作业都会有一个与之对应的Application Master来负责应用程序的管理。他负责进行数据切分;为当前应用程序向ResourceManager去申请资源(也就是Container),并分配给具体的任务;与NodeManager通信,用来启停具体的任务,任务运行在Container中;而任务的监控和容错也是由Application Master来负责的。

container:它包含了Application Master向ResourceManager申请的计算资源,比如说CPU/内存的大小,以及任务运行所需的环境变量和队任务运行情况的描述。   

YARN调优:

1.动态分配资源,减少资源浪费

2.增大作业并行程度

3.给每个任务足够的资源

4.在满足前2个条件下,尽可能的给shuffle预留资源

MapReduce 优化方法

1.合并小文件

在执行 mr 任务前将小文件进行合并,大量的小文件会产生大量的 map 任务,增大 map 任务装载次数,而任务的装载比较耗时,从而导致 mr 运行较慢。

2.减少溢写(spill) 次数

通过调整 io.sort.mb 及 sort.spill.percent 参数值,增大触发spill 的内存上限,减少 spill 次数,从而减少磁盘 IO。

3. 减少合并(merge) 次数

通过调整 io.sort.factor 参数,增大 merge 的文件数目,减少 merge 的次数,从而缩短 mr 处理时间。

4. 在 map 之后, 不影响业务逻辑前提下, 先进行 combine 处理,减少 I/O。

5.合理设置 map 和 reduce 数:两个都不能设置太少,也不能设置太多。太少,会导致 task 等待,延长处理时间;太多, 会导致 map、 reduce 任务间竞争资源,造成处理超时等错误。

6.合理设置 reduce 端的 buffer

默认情况下,数据达到一个阈值的时候, buffer 中的数据就会写入磁盘,然后 reduce 会从磁盘中获得所有的数据。

7. 采用数据压缩的方式,减少网络 IO 的的时间

数据倾斜:

1.数据倾斜症状:

A.任务长时间维持在99%(或100%);

B.查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成(这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多)

C.某个task发生了OOM,那么基本上也是因为数据倾斜了,task分配的数量实在是太大了!!!所以内存放不下,然后你的task每处理一条数据,还要创建大量的对象。内存爆掉了。

D.hadoop上某一个区域的数据量要远远大于其他区域。 

2.数据倾斜原因:

A.key分布不均匀;

B.业务数据特点

3. 导致数据倾斜的操作:GROUP BY, COUNT DISTINCT(),join

4. 数据倾斜的解决方案:

A.调整并行度,分散同一个task的不同Key

在做shuffle操作时,默认使用的HashPartitioner对数据进行分区。并行度设置不合理,会造成大量不同key对应的数据被分配到同一个task上 。(调整并行度;一般是增大并行度,但有时候减少并行度也能达到效果,reduceByKey在第二个参数中指定并行度来)

B.自定义Partitioner

使用自定义的Partitioner,将原本被分配到同一个task的不同key分配到不同的task。

C.将Reduce Join(Common Join)转变成Map Join(设置参数,吧小表的rdd信息放到broadcast中)。

D.为倾斜(skew)的key增加随机的前/后缀

为数据量特别大的key增加随机的前/后缀,使得原来key相同的数据变为key不同的数据,从而使倾斜的数据集分散到不同的task中(如每个key前加一个随机数和下划线分隔符后第一次聚合,第二次聚合时候通过下划线去掉前缀)

E. 在hive的etl时候进行数据聚合,把key相同的数据聚合为一条数据,这样就可能不用shuffle了

F. 使用 Combine 可以大量地减小数据倾斜。在可能的情况下, combine 的目的就是聚合并精简数据。

HIVE原理:

Hive是一个 SQL 解析引擎,将SQL语句转译成MR Job,然后再Hadoop平台上运行;Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录文件,达到了元数据与数据存储分离的目的;Hive本身不存储数据,它完全依赖HDFS和MapReduce

Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些 Key 建立索引(hive不存储数据,因此没有索引)

HQL----》转换成mapreduce------》提交任务给hadoop(读取,计算)

Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段:

1.SQL词法,语法解析,形成抽象语法树AST Tree:

语法规则文件,定义好词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。

2.SQL基本组成单元QueryBlock:

AST Tree仍然非常复杂,不够结构化,不方便直接翻译为MapReduce程序,AST Tree转化为QueryBlock就是将SQL进一部抽象和结构化。

QueryBlock是一条SQL最基本的组成单元,包括三个部分:输入源,计算过程,输出。简单来讲一个QueryBlock就是一个子查询。

3.生成逻辑操作符Operator

Hive最终生成的MapReduce任务,Map阶段和Reduce阶段均由OperatorTree组成。基本的操作符包括TableScanOperator,SelectOperator,FilterOperator,JoinOperator,GroupByOperator,ReduceSinkOperator

4.逻辑层优化器:

大部分逻辑层优化器通过变换OperatorTree,合并操作符,达到减少MapReduce Job,减少shuffle数据量的目的。

5.OperatorTree生成MapReduce Job的过程

遍历

总结为:

1. Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree 

2. 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 

3. 遍历QueryBlock,翻译为执行操作树OperatorTree 

4. 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量 

5. 遍历OperatorTree,翻译为MapReduce任务 

6. 物理层优化器进行MapReduce任务的变换,生成最终的执行计划

HIVE优化:

1.解决数据倾斜问题(慎用count(distinct),count(distinct)容易产生倾斜问题。),找到造成倾斜的key

2.设置合理的map reduce 的task数量 (参数)

3.合并小文件(使用Sequencefile作为表存储格式, 减少reduce的数量, 使用hadoop archive命令把小文件进行归档, 参数)

4.列裁剪,分区裁剪

5.存储格式选择

6.MAP JOIN (小表读入内存,上传至Distributed Cache中,避免了shuffle)

7.模式选择(本地模式 ,并行模式 ,严格模式  参数控制)

8.JVM重用 (减少JVM的启动过程, 参数)

9.推测执行 (参数控制)


以上所述就是小编给大家介绍的《hive,hadoop,yarn相关总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Mechanics of Web Handling

The Mechanics of Web Handling

David R. Roisum

This unique book covers many aspects of web handling for manufacturing, converting, and printing. The book is applicable to any web including paper, film, foil, nonwovens, and textiles. The Mech......一起来看看 《The Mechanics of Web Handling》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具