讲spark的文章很多,切入点无非就是三个:框架应用、源码和原理讲解、性能优化
个人觉得上面的三个视角切入点都过于偏重细节,比较适合行业工程师(应用开发、研发、维护);对于初入行的学习者和非工程师角色比较不友好,本文尝试从一个更高视角去介绍spark,尽量让大家明白这个东西是个什么,如何演化过来的;为什么它会长成现在模样,包括那些模块。
(1)出现背景
在大数据时代,为了存储和处理海量数据,需要规模较大的服务器集群或者数据中心,一般说来,这些集群上运行着数量众多类型纷杂的应用程序和服务,比如离线作业,流式作业,迭代式作业,crawler server,web server等,传统的做法是,每种类型的作业或者服务对应一个单独的集群,以避免相互干扰。这样,集群被分割成数量众多的小集群,有的集群运行Hadoop,有的运行Storm,有的运行Spark,有的运行web server,然而,由于不同类型的作业/服务需要的资源量不同,因此,这些小集群的利用率通常很不均衡,有的集群满负荷、资源紧张,而另外一些则长时间闲置、资源利用率极低,为了提高资源整体利用率,一种解决方案是将这些小集群合并成一个大集群,让它们共享这个大集群的资源,并由一个资源统一调度系统进行资源管理和分配,这就诞生了Borg,YARN,Mesos,Torca,Corona。从集群共享角度看,这类系统实际上将公司的所有硬件资源抽象成一个台大型计算机,供所有用户使用。
一旦将所有计算资源抽象成一个“大型计算机”后,就会产生一个问题:公司的各种服务如何进行部署?同样,Borg/YARN/Mesos/Torca/Corona一类系统需要具备服务自动化部署的功能,因此,从服务部署的角度看,这类系统实际上是服务统一管理系统,这类系统提供服务资源申请,服务自动化部署,服务容错等动能。
以上只是简单的介绍了这一类系统的设计动机和产生背景,接下来从两个角度解析这类系统。
角度一:数据中心编程
任何一个公司内部所有的硬件资源均可看做一个数据中心,通过Borg/YARN/Mesos/Torca/Corona一类系统对这些资源进行统一管理后,用户所有的程序和服务将通过一个统一入口进入数据中心,并由这类系统为之分配资源、监控程序和服务运行状态,并在失败时启用必要的容错机制,汇报程序的执行进度等,而至于应用程序或者服务运行在具体哪台机器上,所在机器的ip、端口号是什么,则用户无需管理,全部交由统一管理系统进行管理(用户也许可以查询到)。
具体说来,采用此类系统之后,当用户执行应用程序或者部署服务时,只需通过一个配置文件描述应用程序或服务需要的资源(比如CPU、内存、磁盘、操作系统类型等)、待执行的命令、依赖的外部文件等信息,然后通过一个客户端提交到Borg/YARN/Mesos/Torca/Corona上,剩下的工作则完全交给系统。
角度二:生态系统
从另外一个角度看,Borg/YARN/Mesos/Torca/Corona一类系统可以为公司构建一个内部的生态系统,所有应用程序和服务可以“和平而友好”地运行在该生态系统上。有了这类系统之后,你不必忧愁使用Hadoop的哪个版本,是Hadoop 0.20.2还是 Hadoop 1.0,你也不必为选择何种计算模型而苦恼,因此各种软件版本,各种计算模型可以一起运行在一台“超级计算机”上了。
从开源角度看,YARN的提出,从一定程度上弱化了多计算框架的优劣之争。YARN是在Hadoop MapReduce基础上演化而来的,在MapReduce时代,很多人批评MapReduce不适合迭代计算和流失计算,于是出现了Spark和Storm等计算框架,而这些系统的开发者则在自己的网站上或者论文里与MapReduce对比,鼓吹自己的系统多么先进高效,而出现了YARN之后,则形势变得明朗:MapReduce只是运行在YARN之上的一类应用程序抽象,Spark和Storm本质上也是,他们只是针对不同类型的应用开发的,没有优劣之别,各有所长,合并共处,而且,今后所有计算框架的开发,不出意外的话,也应是在YARN之上。这样,一个以YARN为底层资源管理平台,多种计算框架运行于其上的生态系统诞生了。
(2)目前的挑战
(3)抽象模型
其实集群资源管理和任务调度系统就是一个复杂的多维混合背包问题,背包问题应该是动态规划问题中最经典的问题。我们可以将集群中的每个数据节点比作一个背包,不同背包不同维度的容量是不同的,将任务比作是需要放置的物品,任务所需要的资源就是其花费,而任务运行产生的租赁费用即为效益。我们需要做的就是在满足任务需求的前提下将其放置在适合的背包中,保证集群利用率最高。但是实际的调度过程和该算法还有很多不同的地方,例如:
(4)系统演进
(5)一些分配策略演进
集群资源管理和任务调度设计两个方面:(1)集群管理,主要负载集群中资源的管理和调度,给定一个任务需求,其能够在目前情况下给出较优的调度方案;(2)任务调度,来了很多的任务我们应该选择哪个任务来进行分配;这两个方面是相辅相成的关系,任何一个方面的优化都会带来集群整体性能的提升。因为任务调度主要涉及调度策略部分,在上面一节中有一些论述,并且任务调度本身带有一些随机性,所以对其的研究相对较少,下面主要针对资源管理系统进行简要总结。
总的来说目前的调度系统可以分为:单层调度系统、两层调度系统、共享状态调度系统、分布式调度系统和混合式调度系统。每种调度系统的存在都有其背景,下面主要从产生的背景、实现的原理、存在的缺点、典型的系统等方面进行阐述。需要注意的是,虽然有这么多种调度系统,但是目前工业界使用的大部分还是单层或者两层的调度系统,原因是这些架构设计方案成熟,已经经历了多年的线上实践,可以平稳运行;另外就是这些调度系统拥有比较好的生态和社区,能够兼容现有的生态,节省研究的成本。所以一些小型公司大多还是采用Hadoop相关的系统,只有专门针对云计算市场的公司,例如阿里云、腾讯云、华为云等会专门研发自己的调度系统。
目前主流的开源调度系统比较(结构,资源维度,多调度器,支持可插拔,优先级抢占,重调度,资源超售,资源评估,避免干扰):
spark其实就是对borg系统+DGA计算模式的实现,包括了集群的资源管理和调度、存储系统实现、DGA计算模式实现;所以当我们在看spark源码时候会被它几万行代码和各种的依赖包给搞糊涂。因为它已经是一个完整系统,当你把这个系统是怎么构成的解剖开来,划分成几个部件模块,再去阅读代码会发现依然复杂但是代码组织是分层次有章可循的;也慢慢可以理解为什么spark包括那些模块。
如上图spark应该包括
文章浏览阅读504次。python刷题模板之字典树_python 字典树
文章浏览阅读1k次。本文来自程序员宅基地,转载请标明出处:http://blog.csdn.net/zhangxiaoxiang/archive/2010/10/27/5969301.aspx 前一阵收到一封网友的来信,信中提到了他在提高个人收入和未来发展中的一些困惑,这也是我们许多学员和网友经常找我咨询的一件事情,颇具普遍性,故写此博与大家探讨和分享一下。 原信内容如下:--------
文章浏览阅读355次。一 使用Webservice 1webservice就不用介绍了,各种语言都可以写,服务端和客户端分别来写。个人理解,大致的流程,服务端开发,部署网站上,客户端生成代理类,判断是否可以连接,直接调用。很方便。2写一下客户端的使用吧,用的是C# 将服务转成代理类放在工程项目中直接使用就好,关键就是如何生成代理类,使用Vs中的tool工具打开后就是命令行(1)输入:wsdl.exe/language..._unity driveinfo.getdrives()
文章浏览阅读2k次。allure是什么有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例执行过程和结果。allure是一款开源的,专门用来展示测试结果的工具,目的是希望团队内部每一个人都可以看到非常清楚的测试结果。allure可以与非常多的著名测试框架做集成。 像java语言,可以与junit4,junit5,TestNG测试框架集成。 python语言,可以与pytest,behave,nose测试框架集成。allure会将测试用例的执行数据保存到xml..._pytest 集成 allure
文章浏览阅读96次。一、利用已有的cookies:通过在spiders下的爬虫文件中重写start_requests方法,在回调函数中提取数据class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['baidu.com'] start_urls = ['http://baidu.com/'] # 重写start_requests方法 def start_requests(self): _scrapy session
文章浏览阅读2.4w次,点赞11次,收藏46次。一、方差分析基本原理1、方差分析(analysis of variance):k(k>=3)个样本平均数假设测验方法。 与j无关的变量都看成常数,此时summation代表的是次数 方差分析基本步骤: (1)将资料总变异的自由度和平方和分解为各变异原因的自由度和平方和,并算的其均方 (2)计算均方比,做出F测验,以明了各变异因素的重要程度..._比较假想试验与实际试验结果是否存在实质性差异
文章浏览阅读265次。1.db.propertiesmysql.driver=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://127.0.0.1:3306/mybatismysql.username=rootmysql.password=123456oracle.driver=oracle.jdbc.driver.OracleDriveroracle.url=jd_mybatisutil.closesqlsession(sqlsession);出现异常
文章浏览阅读636次。14.1 分布式事务概述在构建微服务的过程中,不管是使用什么框架、组件来构建,都绕不开一个问题,跨服务的业务操作如何保持数据一致性。14.1.1 什么是分布式事务?首先,设想一个传统的单体应用,无论多少内部调用,最后终归是在同一个数据库上进行操作来完成一向业务操作,如图14-1:随着业务量的发展,业务需求和架构发生了巨大的变化,整体架构由原来的单体应用逐渐拆分成为了微服务,原来的3个服务...
文章浏览阅读230次。注意,以下求法的原理不再赘述。最简单的求法请直接跳转文末总结。文章目录概述一、模型空间——>世界空间(模型变换)二、世界空间——>观察空间(观察变换)(右手坐标系)法一:法二:三、观察空间——>裁剪空间3.1 透视投影3.2 正交投影四、裁剪空间——>屏幕空间五、总结概述蕾姆睡醒发现头上有跟呆毛,这根呆毛在屏幕上的坐标到底是多少?流程为:模型空间(PmodelP_{model}Pmodel)——>世界空间(PworldP_{world}Pworld)——>观_蕾姆呆毛
文章浏览阅读1.8k次。一、WEB端实时通信技术对比在WEB端的实时通信技术中,主要有以下几种方式: 1)轮询技术轮询是最简单的一种实时通信技术,易于实现,非常适用于一些小型的应用。其基本原理是这样的,先在客户端设定一个时间间隔,然后在每个间隔里从服务器拉取一次数据,如此反复,进行实时通信。轮询的缺点是显而易见的,若时间间隔过大,则会影响实时性,若时间间隔过小,又会对服务器产生非常大的负担,并_通讯服务器技术架构图
文章浏览阅读581次。http://bbs.chinaunix.net/thread-557642-1-1.htmlUnix系列shell程序编写(上) *Shell是什么? 任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。 为了不_unix bsh
文章浏览阅读4.2k次。 谈技术文章翻译的信雅达-下 Horin|贺勤 Email: [email protected] Blog: http://blog.csdn.net/horin153/ 以前在看国内 Python 达人 limodou 翻译的“Guido van Rossum 博客中文版”中的文章:Python_技术文件翻译 直译 也需要信雅达翻译吗