Apache Hadoop近十年的成长证明,用开源技术处理与访问海量数据并不是什么炒作。然而,Hadoop的一个缺点是不可预测性。Hadoop不能确保企业的关键任务按时完成,也不能完全发挥集群的性能。
YARN(一种新的Hadoop资源管理器)能够实现任务抢占,为队列中的其它任务腾出调度空间。容量调度器与公平调度器可以通过静态配置杀死那些占用集群资源的任务,从而让高优先级任务进行调度。
当队列中堆积了等待资源的任务,这些工具就可以派上用场了。不幸的是,它们无法处理已经发生实时争用问题(contention problems)的任务。YARN不会检测正在运行任务的资源利用率。因此,如果低优先级应用正在独占磁盘I/O或者使得其他硬件资源处于饱和状态,即使是高优先级也需要等待。
随着企业对Hadoop的使用更加深入,开始在多租户集群中执行关键业务,他们需要确保高优先级任务不被低优先级任务阻碍。这是Hadoop提供服务质量(QoS)的先决条件,但目前开源项目尚未解决。
让我们通过图1展示的3个节点简单集群来研究这个问题。这个例子中,队列中有两个任务准备由YARN资源管理器调度。资源管理器决定对HBase流关键业务和低优先级ETL任务在集群上同时运行,并对它们进行调度执行。
图2展示了没有QoS的集群运行情况。YARN确定集群有充足的资源可以同时运行低优先级和关键业务任务。在大多数情况下,需要关键业务任务在(服务级协议 SLA)给定的时间内执行完毕。低优先级任务没有这样的要求,它会先等待高优先级任务并延迟执行。
在这种情况下,低优先级任务开始访问HDFS。接下来,关键业务任务需要访问HDFS相同地址的数据。由于两个任务的读写请求重叠,因此关键业务任务需要等待低优先级任务完成磁盘I/O操作。虽然在这个小例子里,这段等待时间不会导致严重的延迟或者对关键业务的SLA保证造成影响,但是在Hadoop多节点部署时,低优先级负载会很快累积并且争夺对硬件的访问。结果会对高优先级任务执行时间造成不可接受的严重影响。
要解决这个问题有以下几种方法。第一种是为业务关键任务和低优先级应用分别部署到不同的集群。这是一种通常推荐的最佳实践,同时也是确保QoS的完美逻辑解决方案。这种方法的缺点是浪费资源以及对不同集群的额外维护开销。另一种“保证QoS”的方法是维持一个集群,但是手动将低优先级任务限制在非高优先级任务调度的时间段执行。而实际操作中,通常公司会发现这些方法管理起来都过于复杂,不能使用。
一种更加高效的解决方法是监控集群中每个节点的硬件资源,通过实时数据了解哪些任务在控制资源(比如,磁盘I/O),以此解决资源竞争。
Hadoop开源社区将大多数注意力和焦点都专注于让Hadoop使用更简单,部署和操作更容易。尽管如此,还是有技术能够解决实时性能瓶颈。我所在的Pepperdata公司开发了一个解决方案,能够在集群上提供实时秒级监测。可以获得每个集群节点上各个人物运行时占用的硬件资源。利用这些信息,Pepperdata能够在算法上构建一个全局的实时视图,为RAM、CPU、磁盘和跨集群的网络利用率,并且根据需要对资源自动重新分配。与YARN资源管理器相反,后者能够控制任务执行的时间和方式。Pepperdata对硬件使用控制本身也是作为任务运行。
通过在配置文件中指定简单的集群配置,管理员可以指定哪些集群的硬件资源分配给特定分组、用户或任务。Pepperdata可以在实际运行中发现资源争夺并在繁忙的集群上动态预防性能瓶颈。这样就可以让低优先级任务变慢,从而使得高优先级任务可以满足SLA要求,并且最大程度让大量用户和任务能够在单集群上可靠地运行。Pepperdata会根据预设的优先级上下文中查找实时资源分配,以此决定哪些任务允许实时访问硬件资源。
任务执行性能取决于优先级和集群目前的条件,排除对硬件资源致命的争夺以及负载隔离。软件搜集了200个与CPU、RAM、磁盘I/O和网络带宽相关的统计数据。这些数据精确地指出了正在发生哪些问题。这样IT组就可以快速识别并修复问题任务。由于Pepperdata是在一个集中式Hadoop部署中测量真实的硬件使用情况,因此软件可以让IT精确跟踪和界定按部门、用户和任务分摊的共享几圈使用情况。通过保证稳定和可靠的集群性能,Pepperdata能够确保集群的QoS。
Sean Suchter是Pepperdata公司的CEO和联合创始人。他曾经担任微软硅谷技术研究中心的第一任总经理,领导将Facebook和Twitter集成到必应搜索。在加入微软之前,他管理雅虎搜索技术团队,也是Hadoop的第一个产品用户。Sean由于雅虎对Inktomi的收购加入到雅虎团队。他毕业于加利福尼亚理工学院,获得工程和应用科学学士学位。