当前位置: 首页 > 科技观察

京东万级Hadoop集群-分布式资源管理与作业调度

时间:2023-03-17 11:20:51 科技观察

京东为什么有万级Hadoop?随着京东业务的增长,原有的Hadoop集群已经无法满足快速增长的存储和计算需求。拆分集群虽然可以分担一部分压力,但是也会带来一些其他的问题。比如某个业务在拆分集群后不可避免地需要另一个集群上的数据,就会带来跨集群读取数据的问题,严重影响作业执行效率。另一方面,每个集群总是有空闲和忙碌的时间。当一个集群空闲时,这些资源就被浪费了,没有任何价值。为了提高生产效率和节约成本,需要将之前分散的集群资源统一管理,形成一个超大的集群对外提供服务,同时允许各种并行框架使用其存储和计算资源进行业务处理。Hadoop概述作为一个大数据处理平台,Hadoop已经有十多年的发展历史。其设计思想是利用廉价的台式机组成一个大型集群进行分布式计算和数据存储,利用冗余备份保证数据的安全性和高可用性,通过并行计算完成超大数据集的快速处理。通过增加节点提高Hadoop集群的计算和存储能力。通常,当数据以分布式方式并行处理时,移动计算代码的成本会低于移动数据,因此Hadoop的MapReduce框架会将计算代码分发到各个数据节点执行,并利用网络与数据交互减少数据局部性以提高性能。在过去的Hadoop2.0版本之前,Hadoop在设计上由两部分组成,第一部分是分布式存储HDFS,另一部分是MapReduce计算框架。从Hadoop2.0版本开始,计算框架优化升级为我们现在使用的YARN(YetAnotherResourceNegotiator)。YARN提供分布式资源管理和作业调度功能,并提供统一的编程模型。通过这种编程模型,可以将很多计算框架迁移到YARN上。在愿景方面,Hadoop致力于解决复杂的数据处理和计算,处理结构化和非结构化数据存储,提供海量数据的分布式并行处理。回过头来看,我们用MPI和OpenMP实现了一个分布式处理程序。当时我们需要自己控制程序的远程启停,同时还要自己写容错代码。现在Hadoop通过优化和抽象将这些繁琐通用的功能封装到框架中,让开发者只需要专注于自己的业务逻辑代码,而不需要编写一些错误重试和通信相关的代码,大大提高了开发效率。同时,不太会写代码的数据工程师也可以轻松的利用Hadoop集群实现自己的分布式处理分析程序。Hadoop2.0YARN架构下,主要有以下组件:1.ResourceManager:主节点服务,负责维护节点信息,负责资源管理和作业调度,可以部署两台服务器,使用Zookeeper实现高可用2.NodeManager:计算Node服务,负责提供计算和管理当前节点上的Container进程。可以部署1~N个单元3.ApplicationMaster:用户提交的每个应用都会包含一个ApplicationMaster,负责与RM通信申请或释放资源,与NM通信启动和停止Task。监控任务的运行状态4.Container:Container是YARN中的资源抽象,封装了CPU、内存、磁盘等多纬度的资源5.Client:负责提交作业,提供一些命令行工具。京东Hadoop分布式资源管理与作业调度简介京东很早以前就开始使用Hadoop,踩了很多坑。曾经摸着石头过河,现在也有了一些小成就。无论是业务问题还是Hadoop框架本身的问题,我们都遇到过。通过解决这些问题,我们对Hadoop做了很多功能的升级和修改,有的已经反馈给社区,有的已经沉淀到我们自己的分支版本中。今天,我们的Hadoop大数据平台提供了丰富的功能和全面的工具来保护京东的大数据业务。目前在京东的大数据环境中,为了满足不同业务对运行环境的要求,我们采用DockerOnYARN模型来隔离运行环境,让大家可以定制自己的运行环境,安装自己的算法库。使用LinuxCGroup的模式支持计算资源的严格隔离,保证每个作业的计算资源不受其他作业的影响。另外扩展了资源和调度模型,增加了GPU等硬件的调度支持。业务端统一日志查询工具,帮助快速定位错误。以前大数据平台上有各种小集群,比如:Presto、Alluxio等,每个小集群都有自己的一批机器,每台机器上可能只部署一个服务。高,甚至浪费,痛定思痛后,我们决定使用YARN来统一资源管理和调度。经过几年的发展,我们已经将大部分并行框架移植到YARN上运行(如:Presto、Alluxio),利用YARN的优势和调度特性,充分利用这些机器资源,大大提高了集群资源的利用率。同时,我们还开发了TensorflowOnYARN、CaffeOnYARN等一系列深度学习框架和工具,帮助算法工程师直接使用Hadoop集群进行算法处理。大大加快算法和业务迭代速度。让大数据平台获得深度学习处理的能力。后来为了更好的支持异地多活和跨地域的扩展能力,我们再次对万级Hadoop集群的分布式资源管理和调度系统进行改造升级,解决了之前单集群扩展的瓶颈和无法扩展的问题。有效支持跨机房的调度和容灾问题。系统已经部署上线,并通过了今年618推广的考验,可以说是坚如磐石。系统逐步上线后,我们将京东跨区域的大数据机房互联互通。同时我们的HDFS也实现了同样的跨机房功能。此时,京东大数据处理平台系统真正具备了跨区域部署和扩展能力。系统具有很强的灵活性,可以通过修改调度路由策略和存储数据映射表轻松实现跨机房的作业迁移和数据迁移。同一机房的不同集群之间,作业可以跨子集群运行,充分利用各个集群的资源。功能可随时根据子集群的负载动态开启和关闭,无需用户参与,对用户完全透明。为了让新的大数据平台系统更加友好,更易于管理和使用,团队启动了接口项目。我们采用WEB技术为管理员实现大数据平台管理系统。使用该管理系统后,您可以灵活方便地登录和退出子集群,实时管理和修改调度策略,不再像以前那样需要登录相应的物理服务器。执行相关命令。通过标准化和系统化,我们将运维命令封装在代码中。每条命令在执行前后都有相关的验证和权限认证,减少人工操作时的误操作。如果发生错误,系统会自动回滚。平台提供用户级权限管理,可以灵活管理集群内计算资源的权限,从而控制每个用户可以使用的计算资源数量,并对资源池的使用进行鉴权。在真实的生产环境中,平台会按照一定的使用规则对资源进行划分,并将相关权限分配给相应的人或部门,以防止部分用户恶意提交作业到其他人的资源池中。同时,平台还细化了操作权限,防止部分用户恶意操作他人作业(如:停止执行)。过去,大数据平台上会有多个集群。每个集群对应自己的客户端,每个客户端对应自己的配置文件。运维麻烦,不利于管理。调度架构修改升级后,逻辑上可以理解为增加了一层调度抽象(Router),将原来的二级调度变成了三级调度。即子集群的策略选择。当前的作业提交流程是:1.客户端首先向Router2发送作业提交请求。Router根据配置的调度信息将作业请求转发给对应的子集群。3.子集群收到作业请求后,调度作业在这里运行这样每个客户端都使用同一套配置文件,保证了客户端的轻量级,不再像以前那样需要区分集群信息.所有的调度策略和逻辑都封装在Router组件中。(我们把所有的调度策略和控制信息都存储在DBMS中)增加了作业跨子集群动态借用资源的功能,可以随时控制一个队列中的相关作业是否需要跨子集群执行。方便单个子集群在资源紧张时动态借用另一个空闲集群的资源。增加了逻辑队列名的概念。对于用户来说,只需要关心自己的逻辑队列名称,而无需关心作业实际运行在哪个物理队列中。通过该功能,平台侧可以控制逻辑队列真正运行在任何时候。哪个子集群的哪个物理队列。达到快速迁移或容灾的目的。为了避免Router意外丢失或挂掉,在Router组件方面,我们自主研发了高可用和负载均衡功能。整个集群会部署多个Router节点,每个机房都会有一个或多个Router。客户端请求会根据负载和距离从多个分散的Router服务器中选择最合适的。同时我们支持路由器随时挂断(如果路由器的连接状态不可用,客户端会自动切换到另一个Actvie的路由器)。下面是这个架构的逻辑框图,包含了整个架构中的所有组件。其中,新增的两个组件分别是Router和State&PolicyStore。前者直接连接Client,屏蔽后端RM子集群的相关信息,提供提交和查询作业信息的功能,可同时部署多台设备对外提供服务。后者负责保存当前所有子集群的状态信息、ActiveRM的地址信息和调度策略信息。(每隔一段时间,子集群会以心跳的形式上报自己当前的服务状态,并存储在StateStore中。)目前我们支持多种调度策略,满足各种场景下的调度需求。具体提交流程如下:1.Client将作业提交给Router2.Router获取逻辑队列调度策略信息3.将作业提交请求传递给对应的ResourceManager,并将Application相关信息保存到StateStore4.ResourceManager收到请求后启动AppMaster,AppMaster启动AppMaster后向AMRMProxy发起资源请求。5.AMRMProxy收到该请求后,从State&StorePolicy中读取策略信息,判断作业是否需要跨子集群运行。6.向对应的子集群发送资源请求,AppMaster负责启动请求的Container超大规模Hadoop集群优化策略&优化思路。本机调度程序有很多问题。最重要的一个是性能问题。为此,我们开发了基于队列镜像的多通道分配策略,极大地提升了ResourceManager调度器的性能,让我们的单个YARN子集群具备了超过10000台的资源管理和调度能力。.另一方面丰富了调度器分配资源的算法逻辑,增加了多维度的排序和过滤规则,多种规则可以组合使用,例如:基于内存,基于负载,基于使用,ResourceManager还有其他与性能相关的代码优化,比如简化资源计算过程、拆分锁等。优化了MapReduce方面的服务性能和框架功能。主要和Shuffle服务有关。优化&分析&测试工具BenchmarkHiBenchhttps://github.com/intel-hadoop/HiBenchHadoop自带BenchmarkJVM分析工具http://gceasy.io/http://fastthread.ioLinux性能分析PerfNMONGoogleToolsfuture展望并期待京东大数据平台的实践提供一个可供参考的技术框架和实现方法。未来,京东大数据平台将继续朝着电商级分布式架构和技术方案的演进方向前进。我们也即将推出一些新功能。1、如何利用集团内部资源节约成本。以往每年的大促,都需要根据往年的流量来购机。大促结束后,这些机器的利用率很低,浪费了很多成本。为了解决这个问题,目前大数据平台已经接入了集团的专有云——阿基米德。平台可以通过自动伸缩灵活使用云资源。在未来的推广中,该功能将用于承担部分计算任务。2、大数据平台产品化京东积累了丰富的大数据处理经验,同时沉淀了一些优秀的中间件和服务产品。未来我们会逐步将这些产品云化,对外提供服务。