搜索
首页数据库mysql教程集群服务器优化(Hadoop)
集群服务器优化(Hadoop)Jun 07, 2016 pm 04:34 PM
hadoop优化分析服务器管理员角度集群

分析从管理员角度对Hadoop进行调优,管理员负责为用户作业提供一个高效的运行环境。管理员需要从全局出发,通过调整一些关键参数值提高系统的吞吐率和性能。总体上看,管理员需从硬件选择、操作系统参数调优、JVM参数调优和Hadoop参数调优等四个方面人手,为

分析从管理员角度对Hadoop进行调优,管理员负责为用户作业提供一个高效的运行环境。管理员需要从全局出发,通过调整一些关键参数值提高系统的吞吐率和性能。总体上看,管理员需从硬件选择、操作系统参数调优、JVM参数调优和Hadoop参数调优等四个方面人手,为Hadoop用户提供一个高效的作业运行环境。1.硬件选择Hadoop自身架构的基本特点决定了其硬件配置的选型。Hadoop采用了master/slave架构,其中,master(JobTracker或者NameNode)维护了全局元数据信息,重要性远远大干 slave(TaskTracker或者DataNode)。在较低Hadoop版本中,master均存在单点故障问题,因此,master的配置应远远好于各个slave(TaskTracker或者DataNode),具体可参考Eric Sammer的《Hadoop Operations》 -书。

2.操作系统参数调优

由于Hadoop自身的一些特点,它只适合用于将Linux作为操作系统的生产环境。在实际应用场景中,管理员适当对Linux内核参数进行调优,可在一定程度上提高作业的运行效率,比较有用的调整选项如下。

(1)增大同时打开的文件描述符和网络连接上限

在Hadoop集群中,由于涉及的作业和任务数目非常多,对于某个节点,由于操作系统内核在文件描述符和网络连接数目等方面的限制,大量的文件读写操作和网络连接可能导致作业运行失败,因此,管理员在启动Hadoop集群时,应使用ulimit命令将允许同时打开的文件描述符数目上限增大至一个合适的值,同时调整内核参数net.core.somaxconn至一个足够大的值。
此外,Hadoop RPC采用了epoll作为高并发库,如果你使用的Linux内核版本在2.6.28以上,你需要适当调整epoll的文件描述符上限。

(2)关闭swap分区

在Linux中,如果一个进程的内存空间不足,那么,它会将内存中的部分数据暂时写到磁盘上,当需要时,再将磁盘上的数据动态置换到内存中,通常而言,这种行为会大大降低进程的执行效率。在MapReduce分布式计算环境中,用户完全可以通过控制每个作业处理的数据量和每个任务运行过程中用到的各种缓冲区大小,避免使用swap分区。具体方法是调整/etc/sysctl.conf文件中的vm.swappiness参数。

设置:vm.swappiness=0
使用sysctl vm.swappiness命令查看设置,或者查看/proc/sys/vm/swappiness。

(3)设置合理的预读取缓冲区大小

磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈。预读可以有效地减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一。管理员可使用Linux命令blockdev设置预读取缓冲区的大小,以提高Hadoop中大文件顺序读的性能。当然,也可以只为Hadoop系统本身增加预读缓冲区大小。

(4)文件系统选择与配置

Hadoop的I/O性能很大程度上依赖于Linux本地文件系统的读写性能。Linux中有多种文件系统可供选择,比如ext3和ext4,不同的文件系统性能有一定的差别。如果公司内部有自主研发的更高效的文件系统,也鼓励使用。

在Linux文件系统中,当未启用noatime属性时,每个文件读操作会触发一个额外的文件写操作以记录文件最近访问时间。该日志操作可通过将其添加到mount属性中避免。

设置方式:

工挂载使用命令如下:mount -o noatime -o nodiratime ?/dev/sda1 /data1

也可以修改fstab

/dev/sda1 /data1 ext3 ?defaults,noatime,nodiratime 0 0

再执行mount -o remount /data1

查看是否生效的话可以使用stat命令

查看文件的Access time是否随着文件读取而更改

(5) 110调度器选择

主流的Linux发行版自带了很多可供选择的I/O调度器。在数据密集型应用中,不同的I/O调度器性能表现差别较大,管理员可根据自己的应用特点启用最合适的I/O调度器,具体可参考AMD的白皮书《Hadoop Performance Tuning Guide》。

除了以上几个常见的Linux内核调优方法外,还有一些其他的方法,管理员可根据需要进行适当调整。

3.JVM参数调优

由于Hadoop中的每个服务和任务均会运行在一个单独的JVM中,因此,JVM的一些重要参数也会影响Hadoop性能。管理员可通过调整JVM FLAGS和JVM垃圾回收机制提高Hadoop性能,具体可参考AMD的白皮书《Hadoop Performance Tuning Guide》。

4. Hadoop参数调优

1)合理规划资源

(1)设置合理的槽位数目

在Hadoop中,计算资源是用槽位(slot)表示的。slot分为两种:Map slot和Reduce slot。每种slot代表了一定量的资源,且同种slot(比如Map slot)是同质的,也就是说,同种slot代表的资源量是相同的。管理员需根据实际需要为TaskTracker配置一定数目的 Map slot和Reduce slot数目,从而限制每个TaskTracker上并发执行的Map Task和Reduce Task数目。

槽位数目是在各个TaskTracker上的mapred-site.xml中配置的,具体如表9-1所示。

表9-1
设置槽位数目

Hadoop版本号

配置参数

默认值

0.20.X(包括1.X),CDH 3

mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maxin,um

2

(两个参数值相同)

0.21.X, 0.22.X

mapreduce.tasktracker.map.tasks.maximum
mapreduce.tasktracker.reduce.tasks.maximum

2

(两个基斯信相同)

(2)编写健康监测脚本

Hadoop允许管理员为每个TaskTracker配置一个节点健康状况监测脚本@。TaskTracker中包含一个专门的线程周期性执行该脚本,并将脚本执行结果通过心跳机制汇报给 JobTracker。一旦JobTracker发现某个TaskTracker的当前状况为“不健康”(比如内存或者 CPU使用率过高),则会将其加入黑名单,从此不再为它分配新的任务(当前正在执行的任务仍会正常执行完毕),直到该脚本执行结果显示为“健康”。健康监测脚本的编写和配置的具体方法。需要注意的是,该机制只有Hadoop 0.20.2以上版本中有。2)调整心跳配置(1)调整心跳间隔

TaskTracker与JobTracker之间的心跳间隔大小应该适度。如果太小,JobTracker需要处理高并发的心跳信息,势必造成不小的压力;如果太大,则空闲的资源不能及时通知 JobTracker(进而JJ之分西己新ly.J Tagk),造成资源空闲,进而降叮氐系统{军吐率。对于中JJ、规模(300个节点以下)的Hadoop集群,缩短TaskTracker与JobTracker之间的心跳间隔可明显提高系统吞吐率。

在Hadoop l.0以及更低版本中,当节点集群规模小于300个节点时,心跳间隔将一直是3秒(不能修改)。这意味着,如果你的集群有10个节点,那么JobTracker平均每秒只需处理3.3
(10/3=3.3)个心跳请求;而如果你的集群有100个节点,那么JobTracker平均每秒也只需处理33个心跳请求。对于一台普通的服务器,这样的负载过低,完全没有充分利用服务器资源。综上所述,对于中小规模的Hadoop集群,3秒的心跳间隔过大,管理员可根据需要适当减小心跳间隔@,具体配置如表9—2所示。

表9-2设置心跳间隔

Hadoop版本号

配置参数

默认值

0.20.X,
0.21.X,
0.22.X

不可配置

集群规模小于300时,心跳间隔为3秒,之后每增加100个节点,则心跳间隔增加1秒

1.X,CDH 3

mapreduce.jobtracker.heartbeat.interval.min
mapred.heartbeats.in.second
mapreduce.jobtracker.heartbeats.scaling.factor

集群规模小于300时,心跳间隔为300毫秒(具体解释参考6.3.2小节)

(2)启用带外心跳

通常而言,心跳是由各个TaskTracker以固定时间间隔为周期发送给JobTracker的,心跳中包含节点资源使用情况、各任务运行状态等信息。心跳机制是典型的pull-based模型。 TaskTracker周期性通过心跳向JobTracker汇报信息,同时获取新分配的任务。这种模型使得任务分配过程存在较大延时:当TaskTracker出现空闲资源时,它只能通过下一次心跳(对于不同规模的集群,心跳间隔不同,比如1 000个币点的集群,心跳间隔为10秒钟)告诉JobTracker,而不能立刻通知它。为了减少任务分配延迟,Hadoop引入了带外心跳(out- of-band heartbeat)e。带外心跳不同于常规心跳,它是任务运行结束或者任务运行失败时触发的,能够在出现空闲资源时第一时间通知JobTracker,以便它能够迅速为空闲资源分配新的任务。带外心跳的配置方法如表9-3所示。

表9-3配置带外心跳

Hadoop版本号

配置参数

含义

默认值

0.20.2

未引入该机制

0.20.X (除 0.20.2), 0.21.X,
0.22.X, CDH 3

mapreduce.tasktracker.
outofband.heartbeat

是否启用带外心跳

false

3)磁盘块配置

Map Task中间结果要写到本地磁盘上,对于I/O密集型的任务来说,这部分数据会对本地磁盘造成很大压力,管理员可通过配置多块磁盘缓解写压力。当存在多块可用磁盘时, Hadoop将采用轮询的方式将不同Map Task的中间结果写到这些磁盘上,从而平摊负载,具体配置如表9-4所示。

表9-4配置多个磁盘块

Hadoop版本号

配置参数

默认值

0.20.X(包括1.X),CDH 3

mapred.local.dir

/tmp/hadoop-${user.name}/mapred/local

0.21.X, 0.22.X

mapreduce.cluster.local.dir

/tmp/hadoop-${user.name}/mapred/local

4)设置合理的RPC Handler和HTTP线程数目

(1)配置RPC Handler数目

JobTracker需要并发处理来自各个TaskTracker的RPC请求,管理员可根据集群规模和服务器并发处理能够调整RPC Handler数目,以使JobTracker服务能力最佳,配置方法如表9-5所示。

表9-5配置RPC Handler数目

Hadoop版本号

配置参数

默认值

0.20.X(包括1X),CDH 3

mapred.job.tracker.handler.count

10

0.21.X, 0.22.X

mapreduce.jobtracker.handler.count

10

(2)配置HTTP线程数目

在Shuffle阶段,Reduce Task通过HTTP请求从各个TaskTracker上读取Map Task中间结果,而每个TaskTracker通过Jetty Server处理这些HTTP请求。管理员可适当调整Jetty Server的工作线程数以提高Jetty Server的并发处理能力,具体如表9-6所示。

表9-6配置HTTP线程数目

Hadoop版本号

配置参数

默认值

0.20.x(包括1.X),CDH 3

tasktracker.http.threads

40

0.21.X, 0.22.X

mapreduce.tasktracker.http.threads

40

5)慎用黑名单机制

当一个作业运行结束时,它会统计在各个TaskTracker上失败的任务数目。如果一个 TaskTracker失败的任务数目超过一定值,则作业会将它加到自己的黑名单中。如果一个 TaskTracker被一定数目的作业加入黑名单,则JobTracker会将该TaskTracker加入系统黑名单,此后JobTracker不再为其分配新的任务,直到一定时间段内没有出现失败的任务。

当Hadoop集群规模较小时,如果一定数量的节点被频繁加入系统黑名单中,则会大大降低集群吞吐率和计算能力,因此建议关闭该功能,具体配置方法可参考6.5.2小节。

6)启用批量任务调度

在Hadoop中,调度器是最核心的组件之一,它负责将系统中空闲的资源分配给各个任务。当前Hadoop提供了多种调度器,包括默认的FIFO调度器、Fair Scheduler、Capacity Scheduler等,调度器的调度效率直接决定了系统的吞吐率高低。通常而言,为了将空闲资源尽可能分配给任务,Hadoop调度器均支持批量任务调度e,即一次将所有空闲任务分配下去,而不是一次只分配一个,具体配置如表9.7所示(FIFO调度器本身就是批量调度器)。

表9-7配置批量任务调度

调度器名称

Hadoop版本

配置参数

参数含义

默认值

0.20.2,
0.21.X,
0.22.X

不支持批量调度,一次分配一个任务

Capacity
Scheduler

0.20.X(包括 i.x),
CDH 3

mapred.capacity-scheduler.maximum-tasks-per-
heartbeat

每次心跳最多分配的任务数目

32 767

0.20.205之前

不支持批量调度,一次分配一个任务

Fair
Scheduler

0.20.205之后, 0.21.X,
0.22.X

mapred.fairscheduler.assignrnultiple
mapred.fairscheduler.assignmultiple.
maps
mapred.fairscheduler.assignmultiple.
reduces

是否启用批量调度功能,如果是,则一次最多分配的Map Task和Reduce Task数目

启用批量调度功能,且一次分配Map
Task和Reduce Task的最高数目不受限

7)选择合适的压缩算法

Hadoop通常用于处理I/O密集型应用。对于这样的应用,Map Task会输出大量中间数据,这些数据的读写对用户是透明的,如果能够支持中间数据压缩存储,则会明显提升系统的I/O性能。当选择压缩算法时,需要考虑压缩比和压缩效率两个因素。有的压缩算法有很好的压缩比,但压缩/解压缩效率很低;反之,有一些算法的压缩/解压缩效率很高,但压缩比很低。因此,一个优秀的压缩算法需平衡压缩比和压缩效率两个因素。当前有多种可选的压缩格式,比如gzip、zip、bzip2、LZO e、Snappy@等,其中,LZO和Snappy在压缩比和压缩效率两方面的表现都比较优秀。其中,Snappy是Google开源的数据压缩库,它的编码/解码器已经内置到Hadoop l.0以后的版本中@;LZO则不同,它是基于GPL许可的,不能通过Apache来分发许可,因此,它的Hadoop编码/解码器必须单独下载。下面以Snappy为例介绍如何让Hadoop压缩Map Task中间输出数据结果(在mapred-
site.xml中配置):mapred. compresg .map. outputtruemapred. map. output. compression. codec
org. apache .hadoop .iQ. compress. SnappyCodec

其中,“mapred.compress.map.output”表示是否要压缩Map Task中间输出结果,“mapred.map.output.compression.codec”表示采用的编码/解码器。

表9-8显示了Hadoop各版本是否内置了Snappy压缩算法。

表9-8配置Snappy压缩算法

Hadoop版本号

是否内置Snappy

0.20.X(不包括1.X),0.21.X.0.22.X

1.X, CDH 3

8)启用预读取机制

前面提到,预读取机制可以有效提高磁盘的I/O读性能。由于Hadoop是典型的顺序读系统,采用预读取机制可明显提高HDFS读性能和MapReduce作业执行效率。管理员可为 MapReduce的数据拷贝和IFile文件读取启用预读取功能,具体如表9—9所示。

表9-9配置预读取功能

Hadoop版本号

配置参数


默认值

Apache各版本和CDH 3 u3以下版本

暂未引入该机制

mapred.tasktracker.shuffle. fadvise

是否启用Shuffle预读取机制

true

CDH 3 u3以及更高

mapred.tasktracker.shuffle.readahead.bytes

Shuffle预读取缓冲区大小

4 MB

版本

mapreduce.ifile.readahead

是否启用IFile预读取机制

true

mapreduce.ifile.readahead.bytes

IFile预读取缓冲区大小

4 MB

来自:

分析从管理员角度对Hadoop进行调优

http://bbs.rednet.cn/thread-28536362-1-1.html

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在容器中怎么使用nginx搭建上传下载的文件服务器在容器中怎么使用nginx搭建上传下载的文件服务器May 15, 2023 pm 11:49 PM

一、安装nginx容器为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器:sudopodmanpulldocker.io/dimka2014/nginx-upload-with-progress-modules:latestsudopodman-d--namenginx-p83:80docker.io/dimka2014/nginx-upload-with-progress-modules该容器同时带有nginx-upload-module模块和ng

服务器怎么使用Nginx部署Springboot项目服务器怎么使用Nginx部署Springboot项目May 14, 2023 pm 01:55 PM

1,将java项目打成jar包这里我用到的是maven工具这里有两个项目,打包完成后一个为demo.jar,另一个为jst.jar2.准备工具1.服务器2.域名(注:经过备案)3.xshell用于连接服务器4.winscp(注:视图工具,用于传输jar)3.将jar包传入服务器直接拖动即可3.使用xshell运行jar包注:(服务器的java环境以及maven环境,各位请自行配置,这里不做描述。)cd到jar包路径下执行:nohupjava-jardemo.jar>temp.txt&

vue3项目打包发布到服务器后访问页面显示空白怎么解决vue3项目打包发布到服务器后访问页面显示空白怎么解决May 17, 2023 am 08:19 AM

vue3项目打包发布到服务器后访问页面显示空白1、处理vue.config.js文件中的publicPath处理如下:const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({publicPath:process.env.NODE_ENV==='production'?'./':'/&

python中怎么使用TCP实现对话客户端和服务器python中怎么使用TCP实现对话客户端和服务器May 17, 2023 pm 03:40 PM

TCP客户端一个使用TCP协议实现可连续对话的客户端示例代码:importsocket#客户端配置HOST='localhost'PORT=12345#创建TCP套接字并连接服务器client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#获取用户输入message=input("请输入要发送的消息:&

Linux怎么在两个服务器直接传文件Linux怎么在两个服务器直接传文件May 14, 2023 am 09:46 AM

scp是securecopy的简写,是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp是加密的,rcp是不加密的,scp是rcp的加强版。因为scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。场景:假设我现在有两台服务器(这里的公网ip和内网ip相互传都可以,当然用内网ip相互传

节点从Proxmox VE彻底撤离及再次加入集群节点从Proxmox VE彻底撤离及再次加入集群Feb 21, 2024 pm 12:40 PM

节点从ProxmoxVE彻底撤离及再次加入集群场景描述当ProxmoxVE集群中有节点损坏无法快速修复时,需要将故障节点干净的从集群踢出,并把残留信息清理干净。否则,新的节点用故障节点曾使用用的IP的地址将不能正常加入集群;同样,从集群中脱离出来的故障节点修复后,虽然与集群已经毫无关系,但访问此单节点的Web管理后台,将出现原ProxmoxVE集群其它节点的信息,非常恼火。从集群中驱逐节点如果ProxmoxVE是Ceph超融合集群,需要登录集群任意节点(欲删除节点除外)宿主系统Debian,命令

如何使用psutil模块获取服务器的CPU、内存和磁盘使用率?如何使用psutil模块获取服务器的CPU、内存和磁盘使用率?May 07, 2023 pm 10:28 PM

psutil是一个跨平台的Python库,它允许你获取有关系统进程和系统资源使用情况的信息。它支持Windows、Linux、OSX、FreeBSD、OpenBSD和NetBSD等操作系统,并提供了一些非常有用的功能,如:获取系统CPU使用率、内存使用率、磁盘使用率等信息。获取进程列表、进程状态、进程CPU使用率、进程内存使用率、进程IO信息等。杀死进程、发送信号给进程、挂起进程、恢复进程等操作。使用psutil,可以很方便地监控系统的运行状况,诊断问题和优化性能。以下是一个简单的示例,演示如何

PHP高并发环境下数据库的优化方法PHP高并发环境下数据库的优化方法Aug 11, 2023 pm 03:55 PM

PHP高并发环境下数据库的优化方法随着互联网的快速发展,越来越多的网站和应用程序需要面对高并发的挑战。在这种情况下,数据库的性能优化变得尤为重要,尤其是对于使用PHP作为后端开发语言的系统来说。本文将介绍一些在PHP高并发环境下数据库的优化方法,并给出相应的代码示例。使用连接池在高并发环境下,频繁地创建和销毁数据库连接可能会导致性能瓶颈。因此,使用连接池可以

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!