大家好,我是勾叔。今天和大家聊聊Spark全方位性能调优 -- 硬件配置与资源管理平台。
构建 Spark 集群的硬件只需普通的商用 PC Server 即可,由于 Spark 作业对内存需求巨大,建议配置高性能 CPU、大内存的服务器,以下是建议配置:
该 CPU 是双路 6 核心,且具有超线程技术,所以一个 CPU 相当于有 2 * 6 * 2 = 24 核心。对于交换机的选择,通常,如果在生产环境使用,那么无论集群规模大小,都应该直接考虑万兆交换机,对于上千的集群,还需要多台交换机进行堆叠才能满足需求。
Spark 基于资源管理平台运行,该平台对于 Spark 来说就像一个资源池一样,资源池的大小取决于每个物理节点有多少资源供资源管理平台调度。一般来说,每台节点应预留 20% 的资源保证操作系统与其他服务稳定运行,对于前面提到的机器配置,加入资源池的内存为 200G,CPU 为 20 核。假设使用 YARN 作为资源管理平台,相关配置如下:
yarn.nodemanager.resource.memory-mb = 200G
yarn.nodemanager.resource.cpu-vcores = 20
YARN 集群中有 10 个 NodeManager 节点,那么总共的资源池大小为 2000G、200 核。在 Spark 作业运行时,用户可以通过集群监控页面来查看集群 CPU 使用率,如果发现 CPU 使用率一直维持在偏低的水平,可以尝试将 yarn.nodemanager.resource.cpu-vcores 改大。内存与 CPU 资源设置应该维持一个固定的比例,如 1:5,这样在提交作业时,也按照这个比例来申请资源,可以提高集群整体资源利用率。
YARN 集群中会运行各种各样的作业,这样资源利用率会比较高,但是也经常造成 Spark 作业在需要时申请不到资源,这时可以采取 YARN 的新特性:基于标签的调度,在某些节点上打上相应的标签,来实现部分资源的隔离。
大家如果想进行更深入的了解和学习,请关注勾叔谈大数据参与更多互动。