文档章节

HADOOP性能优化和运维

ericSM
 ericSM
发布于 2017/04/06 11:40
字数 1619
阅读 397
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

集群中任意一个节点都可以被用来提交认任务,虽然通常我们使用master节点提交任务。HADOOP客户端不参与计算和存储,专门用来上传下载文件和提交任务。

性能优化4大块:

具体优化如下:

1.选择合适的硬件

低配:

CPU             双路四核2.6GHz

内存              64GB DDR3

磁盘控制器    SAS控制器

硬盘               1TB X 4

中配:

CPU            2 X 6 Core 2.9GHz/15MB cache

内存            128GB DDR3-1600 ECC

磁盘控制器   SAS 6GB/S

磁盘             12 X 3 TB LFF SATA II 7200 RPM

交换机           2 X 千兆交换机

高配:

CPU                2 X 6 Core 2.9GHz/15M cache

内存                256GB DDR3-1600 ECC 

磁盘控制器      2 X SAS 6GB/S

磁盘                 24 X 1 TB SFF Nearline/MDL SAS 7200 RPM

交换机              万兆交换机

 

节点解释:

NameNode:内存容量决定HDFS所能存储的文件总数,SecondaryNameNode类似。

ResourceManager:内存和需要处理的作业有关。

内存和虚拟CPU要满足一个线性比例:

虚拟CPU个数 = CPU数 X 单个CPU核数 X 单个CPU超线程数。

如:一个双核六路CPU,具有HT(超线程)技术。

则虚拟核数 2 X 6 X 2 = 24

每个CPU分配4 ~ 8GB,则服务内存 96 ~ 192GB,此外还要考虑操作系统和其他服务和预留内存。

2.操作系统调优

1.避免使用swap分区

    vm.swappiness设为0,值域为0 ~ 100

2.调整内存分配

    vm.overcommit_memory设为2。2表示内核允许分配超过所有物理内存和交换空间的50%。

3.修改net.core.somaxconn参数

     一个linux内核参数,表示socket监听backlog上限。值 >= 32768

4.增大同时打开文件描述符的上限。

5.选择合适的文件系统

     文件系统被格式化以后,要禁用文件的访问时间

6.关闭THP

     运行hadoop时,THP会引起CPU占用率偏高。

3.JVM调优

     调整  JM FLAGS 和 JVMGC ,调整后的效率大约有4%的提升。

4.hadoop参数调优(针对CDH5版本)

1.hdfs-site.xml

<property>

    <name> dfs.block.size</name>

    <value>134217728</value>

</property>

hadoop文件快大小,通常设为128M或256M

 

<property>

    <name> dfs.namenode.handler.count</name>

    <value>40</value>

</property>

namenode和datanode同时通信的线程数,默认10,将其设为40.

 

<property>

    <name> dfs.datanode.max.xcievers</name>

    <value>65536</value>

</property>

datanode上面连接数的最大值。

 

<property>

    <name> dfs.namenode.balance.bandwidthPerse</name>

    <value>20485760</value>

</property>

执行start-balancer.sh的带宽默认 1048576(1MB),将其增大到20MB/s

 

<property>

    <name> dfs.replication</name>

    <value>3</value>

</property>

hdfs文件副本数。多个任务同时读取一个文件时,读取可能会造成瓶颈,可适当增加副本数。如果修改hadoop客户端上传文件的副本数,将以hadoop客户端配置为准。

 

<property>

    <name> dfs.datanode.max.transfer.threads</name>

    <value>4096</value>

</property>

datanode在进行文件传输时最大线程数,通常设置为8192.

 

2.core-size.xml

<property>

    <name> io.file.buffer.size</name>

    <value>131072</value>

</property>

hadoop缓冲区大小,用于hadoop读写hdfs文件还有map的中间结果输出。默认4KB,增加为128KB。

 

3.yarn-site.xml

<property>

    <name> yarn.nodemanager.resource.memory-mb</name>

    <value>8192</value>

</property>

物理节点有多少内存加入资源池,设定该值时注意为操作系统和其他服务预留资源。

 

<property>

    <name> yarn.nodemanager.resource.cpu-vcores</name>

    <value>8</value>

</property>

物理节点有多少虚拟CPU加入资源池。与上一个参数构成容器资源的两个维度。

 

<property>

    <name> yarn.scheduler.increment.allocation-mb</name>

    <value>1024</value>

</property>

内存申请的规整话化单位。默认为1014MB.即如果申请1.5GB,则被申请为2GB。

 

<property>

    <name> yarn.scheduler.increment.allocation-vcores</name>

    <value>1024</value>

</property>

虚拟CPU的规整话化单位。默认为1个

 

<property>

    <name> yarn.scheduler.maximum.allocation-mb</name>

    <value>8192</value>

</property>

单个任务(容器)能够被申请到的最大内存。默认8GB,如果设定和

yarn.nodemanager.resource.cpu-mb一样,则表示单个任务使用的内存资源不受限制。

 

<property>

    <name> yarn.scheduler.minimum.allocation-mb</name>

    <value>8192</value>

</property>

单个任务(容器)能够被申请到的最小内存。默认1GB

 

<property>

    <name> yarn.scheduler.maximum.allocation-vcores</name>

    <value>4</value>

</property>

单个任务(容器)能够被申请到的最大CPU数目。默认8GB,如果设定和

yarn.nodemanager.resource.cpu-vcores一样,则表示单个任务使用的内存资源不受限制。

 

4.mapred-site.xml

<property>

    <name> mapreduce.map.output.compress</name>

    <value>true</value>

</property>

map任务的中间结果是否压缩,true压缩。

 

<property>

    <name> mapreduce.job.jvm.numtasks</name>

    <value>-1</value>

</property>

jvm重用设置,默认为1,表示一个jvm只能启动一个任务,-1表示可以的启动任务不受限制。

 

<property>

    <name> mapreduce.map.speculative</name>

    <value>true</value>

</property>

<property>

    <name> mapreduce.reduce.speculative</name>

    <value>true</value>

</property>

分别开启map和reduce任务的推测机制,推测机制可以有效地防止,因为瓶颈而导致的拖累整个作业,但也注意,推测机制会抢占系统资源。

 

<property>

    <name> mapreduce.cluster.local.dir</name>

    <value>/data0/mapred,/data1/mapred,/data2/mapred,/data3/mapred</value>

</property>

mapreduce中间结果的本地存储路径,将该值设置为一系列多磁盘目录有助于提高I/O效率

 

<property>

    <name> mapreduce.map.memory.mb</name>

    <value>-1</value>

</property>

map任务需要的内存大小。

 

<property>

    <name> mapreduce.map.cpu.vcores</name>

    <value>1</value>

</property>

map任务需要的虚拟CPU数目。要与mapreduce.map.memory.mb成线性比例才不至于浪费。

 

<property>

    <name> mapreduce.reduce.memory.mb</name>

    <value>-1</value>

</property>

reduce任务需要的内存大小,一般要大于mapreduce.map.memory.mb。

 

<property>

    <name> mapreduce.reduce.cpu.vcores</name>

    <value>1</value>

</property>

reduce任务向调度器需要的虚拟CPU数,默认为1,根据容器虚拟CPU数设定,可以适量增大。要与mapreduce.map.memory.mb成线性比例才不至于浪费,一般要大于mapreduce.map.cpu.vcores。

 

<property>

    <name> mapreduce.reduce.shuffle.parallelcopies</name>

    <value>25</value>

</property>

该参数为reduce任务从map任务复制输出的工作线程数,默认5,可适当调高,太高会引起大量数据同时在网络传输,引起I/O压力,科学的设置为4 x Lgn,n为集群容量大小。

 

<property>

    <name> mapreduce.reduce.shuffle.input.buffer.percent</name>

    <value>0.7</value>

</property>

shuffle中复制阶段耗费reduce任务堆比例,默认0.7,由上面的计算得出。

 

<property>

    <name> mapreduce.reduce.shuffle.merge.percent</name>

    <value>0.66</value>

</property>

当内存使用率超过该参数时,会触发一次合并操作,将内存中的数据刷写到磁盘

 

<property>

    <name> mapreduce.job.reduce.slowstart.completedmaps</name>

    <value>0.05</value>

</property>

控制reduce任务的启动时机,默认0.05,即当map任务完成数目的5%时,启动reduce。

 

5.HADOOP参数调优总结

(1)增大作业的并行度,如增大map任务数量

(2)保证任务执行时有足够的资源

(3)满足前两个原则的前提下,尽量为shuffle阶段提供资源

 

 

 

 

 

 

© 著作权归作者所有

ericSM
粉丝 18
博文 142
码字总数 154379
作品 0
南京
项目经理
私信 提问
6月9日上海 华东运维技术大会:演讲主题、演讲嘉宾等信息

会议名称:华东运维技术大会 参会形式:免费报名制(注释:须事先报名,场地有限) 会议定位:企业运维技术的最佳实践 会议主题:运维自动化、Web服务器的优化与架构、云计算、虚拟化技术 会...

金官丁
2012/05/19
2.6K
11
云计算学习大纲是什么?怎么学习云计算?

《2018×××Linux云计算架构师+Python运维开发课程》十大阶段的课程为由浅入深、循序渐进的完整课程体系,包括结合Linux的网络基础实战、Linux系统配置及服务深度解析、Shell脚本自动化运维...

长沙千锋
2018/04/28
0
0
关于O'Reilly Velocity China 2011 Web性能和运营大会的一些资料

1.1.1 摘要 随着Web 1.0到2.0的发展,PC到移动端的扩展和最近炙手可热的Html5的推出,使得互联网担当着越来越重要得角色——Web未死犹生,而且作为开发者的我们必须在有限的硬件资源下,尽可...

长平狐
2012/06/11
260
0
活动报名 | 奖品多多的运维技术公开课

关于 OneAPM 技术公开课上海站 亿级数量?百亿数量!秒级体验?亚秒级体验! 「OneAPM 技术公开课」由 OneAPM 发起,活动内容面向 IT 开发和运维人员。云集技术牛人、知名架构师、实践专家共...

OneAPM蓝海讯通
2015/09/10
529
2
运维工程师的职责和前景(一)

运维中关键技术点解剖:1 大量高并发网站的设计方案 ;2 高可靠、高可伸缩性网络架构设计;3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案;5 海量数据存储架构 一、什么是大...

技术小牛人
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效

今天我们要说的 AV1 可不是我们平时说的 .AVI 文件格式,它是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码格式,可以解决H.265昂贵的专利费用和复杂的...

一肥仔
25分钟前
8
0
软件缺陷静态分析 CodeSonar 5.2 新版发布

对于使用C和C++构建安全关键软件的开发团队而言,CodeSonar一直是首选的静态分析解决方案。在近期发行的版本中,CodeSonar通过使用开放标准来扩展其语言覆盖范围,并增加了对Java、C#、Obj...

旋极科技
26分钟前
5
0
数据迁移

1. insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。 2. replace into与insert into on duplicate key update都可...

qiang123
33分钟前
6
0
Linux装Windows系统后还不会激活?3招教你搞定

     相信大家已经发现荣耀MagicBook科技尝鲜版有多“香”了,不但可以轻松的将Linux系统装回Windows系统,还足足省下了300大洋!但是装回系统就万事大吉了吗?NoNoNo,我们还需要去激活...

梅丽莎好
35分钟前
6
0
Tomcat8源码分析-请求处理过程

上一篇:Tomcat8源码分析-启动流程-start方法 此篇主要讲Tomcat8从接收请求到处理请求的时序图画出来,并用文字描述一下主要流程 时序图 说明 文字描述流程之前先提示如下两点: 1.Acceptor...

特拉仔
37分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部