spark on yarn的技术挑战

目前spark是一个非常流行的内存计算(或者迭代式计算,DAG计算)框架,在MapReduce因效率低下而被广为诟病的今天,spark的出现不禁让大家眼前一亮。

从架构和应用角度上看,spark是一个仅包含计算逻辑的开发库(尽管它提供个独立运行的master/slave服务,但考虑到稳定后以及与其他类型作业的继承性,通常不会被采用),而不包含任何资源管理和调度相关的实现,这使得spark可以灵活运行在目前比较主流的资源管理系统上,典型的代表是mesos和yarn,我们称之为“spark on mesos”和“spark on yarn”。将spark运行在资源管理系统上将带来非常多的收益,包括:与其他计算框架共享集群资源;资源按需分配,进而提高集群资源利用率等。这篇文章主要介绍spark on yarn的技术挑战。

Spark on yarn在spark 1.0版本中已经变得比较成熟,但如果运行在线上环境中,仍面临很多挑战。

挑战1: 应用程序日志如何获取?

Spark on yarn提供了应用程序运行的web界面,可以通过这个界面查看spark作业的stage,task等详细信息,但无法获取应用程序的运行日志。这些日志通常保存在YARN的NodeManager节点上,一旦运行完成后可能会被聚集后保存到HDFS上。对于运行完成的作业,可以通过命令“bin/yarn logs -applicationId application_2323_xxxx”将日志打印出来,但是当日志量非常大时,显然不会很好地方法。因此,对于想把spark运行在yarn上的公司,第一个需要做的工作可能是为用户提供一个好的日志查看工具,可以查看正在运行的,或者运行完成(成功和失败)的spark作业的,在yarn-client和yarn-cluster模式下地日志。

挑战2:如何为spark作业设置资源需求?

YARN允许spark作业为driver和executor设置需要的cpu和内存资源量,但是到底设置多少最为合适,这显然不好确定。因此,最好能够提供一个资源获取工具,可以查看spark作业实际占用的内存和cpu资源量,以便修正用户的资源参数。

挑战3:yarn资源调度器对spark这类作业的水土不服

对于yarn而言,spark仍然是一种比较特殊的作业,这使得spark难以与其他类型的应用程序(比如mapreduce)友好地运行在一个集群中,主要体现在以下几个方面:

(1)YARN中的资源调度器采用的是基于资源预留的调度机制,这种机制会使得大资源需求的作业获取资源非常慢,而spark正是这类大资源需求的作业。正如我的文章“Apache Spark探秘:多进程模型还是多线程模型?”所述,Spark采用的是多线程方案,这使得一个executor可能会占用很大资源,这对于yarn而言,可能是资源利用率的灾难。

(2)YARN的这种资源预留机制在运行spark streaming作业时,可能产生饿死现象。如果你在yarn集群中运行了spark streaming作业,可能会产生资源无限预留但是永远得不到满足的情况,导致spark streaming作业用于得不到运行。这个在spark streaming与其他短类型的作业,比如spark和mapreduce作业共享集群时很容易发生。

为了解决资源调度问题,yarn已经在优化和改进中了,一个改进是每类作业增加一个作业标识(https://issues.apache.org/jira/browse/YARN-563),比如是长作业还是短作业,这样调度器更加智能的对不同类型作业进行调度;另外一个是改进现有的yarn的资源预留算法,其中一项工作见https://issues.apache.org/jira/browse/YARN-1769。

限于篇幅原因,这篇文章只介绍这三个问题,除此之外,还有很多其他问题,留在以后详细介绍。

总之,spark on yarn运行在生产环境中,仍有很多工作需要做,这个过程还是一个需求驱动的开发过程,即在使用过程中遇到问题,解决问题。

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2014-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

初识kafka

Kafka经常用于实时流数据架构,用于提供实时分析。本篇将会简单介绍kafka以及它为什么能够广泛应用。

23030
来自专栏人人都是极客

聊聊Linux IO(下)

广义上Cache的同步方式有两种,即Write Through(写穿)和Write back(写回). 从名字上就能看出这两种方式都是从写操作的不同处理方式引出...

43010
来自专栏linux驱动个人学习

SELinux 是什么?

一、SELinux的历史 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency...

40150
来自专栏个人分享

HBASE解析

Hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模式,并从Hadoop的...

14010
来自专栏Hadoop实操

如何部署active-active的Hadoop集群

20830
来自专栏cloudskyme

hbase实战——(1.1 nosql介绍)

什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库。 随着互联网web2.0网站的...

39480
来自专栏京东技术

解决Hadoop的短板,实时大数据分析引擎ClickHouse解析

安海雄,京东系统架构师,从事架构设计与开发工作,熟悉各种开源软件架构。在Web开发、架构优化上有较丰富实战经历。

58830
来自专栏xingoo, 一个梦想做发明家的程序员

[大数据之Yarn]——资源调度浅学

在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了。比如,一个公司拥有一个几十个节点的hadoo...

19650
来自专栏hadoop学习笔记

大快DKH大数据基础数据平台的监控参数说明

2018年国内大数据公司50强榜单排名已经公布了出来,大快以黑马之姿闯入50强,并摘得多项桂冠。Hanlp自然语言处理技术也荣膺了“2018中国数据星技术”奖。...

13420
来自专栏Python爬虫与数据挖掘

CDH安装系统环境准备——系统版本和安装包下载地址指南

由于Hadoop深受客户欢迎,许多公司都推出了各自版本的Hadoop,也有一些公司则围绕Hadoop开发产品。在Hadoop生态系统中,规模最大、知名度最高的公...

13620

扫码关注云+社区

领取腾讯云代金券