데이터 베이스 MySQL 튜토리얼 Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45

Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45

Jun 07, 2016 pm 04:30 PM
bug hadoop 최적화 분석하다 개선하다 새로운 특성 특성 시리즈

作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/mapreduce-nextgen/hadoop-jira-yarn-45/ 本博客的文章集合:http://dongxicheng.org/recommend/ 重大消息:我的Hadoop新


重大消息:我的Hadoop新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》已经开始在各大网站销售了,购书链接地址: 当当购书网址,京东购书网址,卓越购书网址。新书官方宣传主页: http://hadoop123.com/。

Hadoop jira链接:https://issues.apache.org/jira/browse/YARN-45
所属范围(新特性、改进、优化或Bug):改进
修复版本:2.1.0-beta及以上版本
所属分支(Common、HDFS、YARN或MapReduce):YARN
涉及模块:resourcemanager
英文标题:“Scheduler feedback to AM to release containers”

背景介绍

在2.1.0-beta之前,ResourceManager本身没有提供直接的资源抢占RPC接口,也就是说,从语义上讲,YARN是不支持资源抢占的。然而,Hadoop最著名的调度器(参考我的这篇文章:Hadoop调度器总结)之一Fair Scheduler(参考我的这篇文章:Hadoop 0.21.0中公平调度器实现)最大特色之一是支持资源抢占,它当然不想抛弃这个功能变得跟Capacity Scheduler(参考我的这篇文章:Hadoop容量调度器介绍)一样平庸,由于它就拐弯抹角的实现了资源抢占,它是怎么实现的呢,方法很简单也很粗鲁:当需要为某个“更重要”的应用程序分配资源而资源不够用时,需要抢占别的应用程序占用的资源来“拆东墙补西墙”,采用的策略非常野蛮,在事先不告诉应用程序主管(指ApplicationMaster)的情况下,强制杀死它的弟兄(任务),很显然,各个应用程序主管会非常的不满,这也有损YARN资源管理的形象,随着Hadoop生态系统的完善,当然不希望这种不和谐的场面出现,于是更友好地资源抢占策略提上了日程。

在正式介绍YARN资源抢占策略之前,我先介绍一下为什么需要有资源抢占策略,这种策略用在哪些场景下?我们都知道,YARN作为一个资源管理系统,最重要的工作是管理集群中的所有资源,并按照应用程序各种资源要求将满足要求的资源分配给他们,比如有些应用程序优先级高,更重要,有资源要先给它;有些应用程序需要跑一个服务(Service),想要质量高一点的资源;有些应用程序跑的任务是一个“团伙”,需要资源全部到位后才会一起运行等,YARN作为一个“服务商”,要尽量满足各种形形色色的客户要求,而为了提供更优质的服务,让客户整体满意度更高,抢占机制是必须的。总结起来,抢占机制通常用于以下几种场景:

(1)重分布各应用程序的资源量和公平资源量。比如,当集群资源动荡时,调度器需要时不时的调整各个队列资源分布情况,以保证尽可能公平公正地分配资源。

(2)杀死特定的container。这种场景也很多,比如杀死一个正在运行的任务将其迁移到另外一个更优质的节点(比如locality更高,CPU性能更好等)上运行,杀死一个运行在存在IO瓶颈节点上的任务(比如Shuffle热点节点),并将其迁移到一个IO环境良好的节点上运行(注意,YARN 只对CPU和内存资源进行了隔离,其他资源比如网络和磁盘IO没有隔离,仍可能产生瓶颈哦,这个短时间内搞不定,需要看cgroup的进展)。

(3)管理员对集群中个别节点进行维护。为了对一批机器进行维护,通常先要“友好的”杀死这些节点上的任务,以让他们进行一些“善后”处理工作,比如对一些service任务,可以做一些checkpoint以便下次恢复运行现场。

讲到这里,我需要再提醒一下各位读者,YARN的定位是一个通用的资源管理系统,类似于一个云操作系统,可以管理一个集群或者数据中心中的各种资源,它不仅仅用来跑MapReduce这样的应用,可也以跑MPI、Storm、Spark这样的计算框架,当然,更可以跑Service,比如一个mysql实例、一个Web Server等,只不过是,由于YARN处于发展初级阶段,很多地方尚不完善。

解决方案

为了更友好的支持资源抢占,YARN提出了新方案,具体如下:当需要抢占某个应用程序的资源时, ResourceManager先将待抢占的资源发送给应用程序的ApplicationMaster,让它自行了断对应的任务,比如做一些checkpoint以帮助下次运行时恢复现场等(然后再杀死对应的任务),如果在一定时间内,ApplicationMaster“无视”老大(即ResourceManager)的命令,则ResourceManager再进一步强制干掉这些任务。需要注意的是,集群的资源量变化是动态的,不同时刻,总的资源量,正在使用的资源量等信息是变化的,ResourceManager要求ApplicationMaster强制释放的资源可能在下一刻已经自行得到了释放,这种情况下,是没必要强制杀死任务的。

对于前面提到的场景,我们可以概括为,在(1)(3)两种场景中,ResourceManager向ApplicationMaster发送一个总的资源量即可,具体杀死哪些任务凑齐这些资源,完全由ApplicationMaster自己决定,比如它可以选择一些刚刚启动的任务(这样代价最小);第(2)中场景中,ResourceManager必须显式指明要杀死的Container列表,ApplicationMaster收到该列表后,严格执行命令依次杀死这些Container中运行的任务。

读者可能已经注意到,这个Hadoop jira链接很长,几个主要人物进行了反复的技术讨论,线上讨论,线下讨论……,方案也是在不同变化,一会变成“ResourceManager只发送总的资源量,以便将更多的权利下放给ApplicationMaster”,一会变成“ResourceManager发送需释放的Container列表,以彰显ResourceManager绝对的控制权力”,最终,当YARN项目的老大Arun C Murthy假期归来之后,一拍版定为最初的方案,也就是兼顾三种场景的方案,具体如下:

在心跳信息,即ResourceManager应答给ApplicationMaster的信息AllocateResponse中(即RPC函数AMRMProtocol#allocate()的返回值,注意从2.1.0-beta开始,AMRMProtocol协议被改名为ApplicationMasterProtocol)增加PreemptionMessage消息,对应ProtocolBuffers的定义如下:

message PreemptionMessageProto {

optional StrictPreemptionContractProto strictContract = 1;

optional PreemptionContractProto contract = 2;

}

message StrictPreemptionContractProto {

repeated PreemptionContainerProto container = 1;

}

message PreemptionContractProto {

repeated PreemptionResourceRequestProto resource = 1;

repeated PreemptionContainerProto container = 2;

}

message PreemptionContainerProto {

optional ContainerIdProto id = 1;

}

message PreemptionResourceRequestProto {

optional ResourceRequestProto resource = 1;

}

在PreemptionMessageProto定义中,StrictPreemptionContractProto是必须释放的container列表(不可忽略,若忽略,ResourceManager强制干掉这些container),PreemptionContractProto则给出资源总量和建议释放的container列表, ApplicationMaster可自己选择释放哪些container以凑集总资源量,这样给ApplicationMaster留下了发挥空间,可做的更加智能些。当然,ApplicationMaster收到这些信息后,可自行决定是否杀死对应的container,它可以选择忽略,由ResourceManager强制杀死它们,需要注意的是,集群资源状态时动态变化的,ApplicationMaster使用的资源在不断的释放中,ResourceManager此刻要求释放的container,下一刻可能就不要求了。

在这个jira链接中,ResouceManager和ApplicationMaster之间的协议进行了修改,这就要求各个调度器均要充分利用这个修改增加更加先进的抢占机制,同时已有的ApplicationMaster也要修改对应代码以便能够理解这种消息的语义,接下来各个模块的负责人都有活干了,这也进一步说明了,通信架构最好不要动,一旦动了,就会产生无数的工作量。由于该jira的修改产生的相关链接如下:

(1)CapacityScheduler: support for preemption (using a capacity monitor):

https://issues.apache.org/jira/browse/YARN-569

(2)RM changes to support preemption for FairScheduler and CapacityScheduler:

https://issues.apache.org/jira/browse/YARN-567

(3)FairScheduler: support for work-preserving preemption:

https://issues.apache.org/jira/browse/YARN-568

(4)User guide for preemption:

https://issues.apache.org/jira/browse/YARN-650

(5)Basic AM changes to support preemption requests (per YARN-45):

https://issues.apache.org/jira/browse/MAPREDUCE-5189

当然,在YARN发展初期,这种改动是正常的,毕竟YARN这种系统本身就是从无数应用中抽象出来的,他总伴随应用种类的增加而不断的发展与前进。

我们学到了什么

涉及到系统底层通信语义的修改,一定要反复磋商,对于YARN而言,一定要清楚各个组件的定位和职责,不可赋予一个组件它不应该具备的职责,这样下去,所有组件的职责会变得过于交叉错乱,失去了架构的简洁性。

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-jira-yarn-45/

作者:Dong,作者介绍:http://dongxicheng.org/about/

本博客的文章集合:http://dongxicheng.org/recommend/


Copyright © 2013
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Apple iOS18 버그 요약 Apple iOS18 버그 요약 Jun 14, 2024 pm 01:48 PM

Apple의 WWDC 컨퍼런스 2024가 성공적으로 마무리되면서 macos15가 발표되었을 뿐만 아니라 Apple의 새로운 iOS18 시스템 업데이트가 가장 큰 관심을 끌었습니다. Apple iOS18을 업그레이드하려면 최신 버전의 Apple iOS18에 어떤 종류의 버그가 있습니까? 실제 사용 평가를 마친 후 Apple iOS 18 버그를 요약하면 다음과 같습니다. 현재 많은 아이폰 사용자들이 iOS18로의 업그레이드를 서두르고 있지만, 각종 시스템 버그들이 사람들을 불편하게 만들고 있다. 일부 블로거는 "버그가 너무 많기 때문에" iOS18로 업그레이드할 때 주의해야 한다고 말했습니다. 블로거는 귀하의 iPhone이

Xiaomi 15 시리즈 전체 코드명 공개: Dada, Haotian, Xuanyuan Xiaomi 15 시리즈 전체 코드명 공개: Dada, Haotian, Xuanyuan Aug 22, 2024 pm 06:47 PM

샤오미 Mi 15 시리즈는 10월 정식 출시될 예정이며, 전체 시리즈 코드명이 외신 MiCode 코드베이스에 노출됐다. 그중 주력 제품인 샤오미 미 15 울트라의 코드명은 '쉬안위안(Xuanyuan)'('쉬안위안(Xuanyuan)'이라는 뜻)이다. 이 이름은 중국 신화 속 황제(Yellow Emperor)에서 유래한 것으로 귀족을 상징한다. Xiaomi 15의 코드명은 "Dada"이고, Xiaomi 15Pro의 이름은 "Haotian"("Haotian"을 의미)입니다. Xiaomi Mi 15S Pro의 내부 코드명은 "dijun"으로, "산과 바다의 고전"의 창조신인 Jun 황제를 암시합니다. Xiaomi 15Ultra 시리즈 커버

화웨이 메이트 60 시리즈 구매 최적기, 새로운 AI 제거 + 이미지 업그레이드, 가을 프로모션 즐기기 화웨이 메이트 60 시리즈 구매 최적기, 새로운 AI 제거 + 이미지 업그레이드, 가을 프로모션 즐기기 Aug 29, 2024 pm 03:33 PM

지난해 화웨이 메이트60 시리즈가 출시된 이후 개인적으로는 메이트60프로를 메인폰으로 사용해오고 있다. 거의 1년 동안 Huawei Mate60Pro는 여러 번의 OTA 업그레이드를 거쳤으며 전반적인 경험이 크게 개선되어 사람들에게 끊임없이 새로운 느낌을 줍니다. 예를 들어, 최근 Huawei Mate60 시리즈는 이미징 기능이 다시 한 번 크게 업그레이드되었습니다. 첫 번째는 행인과 잔해를 지능적으로 제거하고 빈 영역을 자동으로 채울 수 있는 새로운 AI 제거 기능입니다. 두 번째로 메인 카메라의 색상 정확도와 망원 선명도가 크게 업그레이드되었습니다. 개학 시즌을 고려하여 Huawei Mate60 시리즈도 가을 프로모션을 시작했습니다. 휴대폰 구매 시 최대 800위안 할인 혜택을 누릴 수 있으며, 시작 가격은 최저 4,999위안입니다. 일반적으로 사용되며 종종 가치가 높은 새로운 제품

C++ 프로그램 최적화: 시간 복잡도 감소 기술 C++ 프로그램 최적화: 시간 복잡도 감소 기술 Jun 01, 2024 am 11:19 AM

시간 복잡도는 입력 크기를 기준으로 알고리즘의 실행 시간을 측정합니다. C++ 프로그램의 시간 복잡성을 줄이는 팁에는 데이터 저장 및 관리를 최적화하기 위한 적절한 컨테이너(예: 벡터, 목록) 선택이 포함됩니다. Quick Sort와 같은 효율적인 알고리즘을 활용하여 계산 시간을 단축합니다. 여러 작업을 제거하여 이중 계산을 줄입니다. 불필요한 계산을 피하려면 조건부 분기를 사용하세요. 이진 검색과 같은 더 빠른 알고리즘을 사용하여 선형 검색을 최적화합니다.

Golang에 클래스와 유사한 객체지향 기능이 있나요? Golang에 클래스와 유사한 객체지향 기능이 있나요? Mar 19, 2024 pm 02:51 PM

Golang(Go 언어)에는 전통적인 의미의 클래스 개념이 없지만, 클래스와 유사한 객체지향 기능을 구현할 수 있는 구조체라는 데이터 형식을 제공합니다. 이 기사에서는 구조를 사용하여 객체 지향 기능을 구현하는 방법을 설명하고 특정 코드 예제를 제공합니다. 구조의 정의와 사용법 먼저 구조의 정의와 사용법을 살펴보자. Golang에서는 type 키워드를 통해 구조를 정의한 다음 필요한 곳에 사용할 수 있습니다. 구조에는 속성이 포함될 수 있습니다.

WIN7 시스템의 시작 항목을 최적화하는 방법 WIN7 시스템의 시작 항목을 최적화하는 방법 Mar 26, 2024 pm 06:20 PM

1. 바탕화면에서 키조합(Win키 + R)을 눌러 실행창을 연 후, [regedit]를 입력하고 Enter를 눌러 확인하세요. 2. 레지스트리 편집기를 연 후 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer]를 클릭하여 확장한 다음 디렉터리에 Serialize 항목이 있는지 확인합니다. 없으면 탐색기를 마우스 오른쪽 버튼으로 클릭하고 새 항목을 생성한 다음 이름을 Serialize로 지정합니다. 3. 그런 다음 직렬화를 클릭한 다음 오른쪽 창의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 새 DWORD(32) 비트 값을 만들고 이름을 Star로 지정합니다.

Vivox100s 매개변수 구성 공개: 프로세서 성능을 최적화하는 방법은 무엇입니까? Vivox100s 매개변수 구성 공개: 프로세서 성능을 최적화하는 방법은 무엇입니까? Mar 24, 2024 am 10:27 AM

Vivox100s 매개변수 구성 공개: 프로세서 성능을 최적화하는 방법은 무엇입니까? 오늘날 급속한 기술 발전 시대에 스마트폰은 우리 일상생활에서 없어서는 안 될 부분이 되었습니다. 스마트폰의 중요한 부분인 프로세서의 성능 최적화는 휴대폰의 사용자 경험과 직접적인 관련이 있습니다. 주목받는 스마트폰인 Vivox100s의 매개변수 구성은 많은 관심을 끌었으며, 특히 프로세서 성능의 최적화는 사용자들의 많은 관심을 끌었습니다. 휴대폰의 "두뇌"인 프로세서는 휴대폰의 실행 속도에 직접적인 영향을 미칩니다.

Tencent의 주요 프로그래밍 언어가 Go인지 분석 Tencent의 주요 프로그래밍 언어가 Go인지 분석 Mar 27, 2024 pm 04:21 PM

제목: Tencent의 주요 프로그래밍 언어는 Go: 심층 분석 중국 최고의 기술 회사로서 Tencent는 프로그래밍 언어 선택에 있어 항상 많은 관심을 받아 왔습니다. 최근 몇 년 동안 일부 사람들은 Tencent가 주로 Go를 주요 프로그래밍 언어로 채택했다고 믿고 있습니다. 이 기사에서는 Tencent의 주요 프로그래밍 언어가 Go인지에 대한 심층 분석을 수행하고 이러한 관점을 뒷받침하는 구체적인 코드 예제를 제공합니다. 1. Tencent에 Go 언어 적용 Go는 Google에서 개발한 오픈 소스 프로그래밍 언어로 효율성, 동시성 및 단순성으로 인해 많은 개발자에게 사랑을 받고 있습니다.

See all articles