三九宝宝网宝宝教育学龄段教育

深入理解spark核心思想与源码分析怎么样

02月25日 编辑 39baobao.com

[英语六级考试阅读理解分析与对策]六级考试大纲对阅读理解题的要求为:既能理解个别句子的意义,也能理解上下文的逻辑关系;既能理解字面的意思,也能理解隐含的意思;既能理解事实和细节,也能理解所读材料的主旨和大意...+阅读

SparkSQL主要的推动者是Databricks。提到SparkSQL不得不提的就是Shark。Shark可以理解为Spark社区这边搞的一个”HiveonSpark”,把Hive的物理执行计划使用Spark计算引擎去执行。这里面会有一些问题,Hive社区那边没有把物理执行计划到执行引擎这个步骤抽象出公共API,所以Spark社区这边要自己维护一个Hive的分支,而且Hive的设计和发展不太会考虑到如何优化Spark的Job。但是前面提到的HiveonSpark却是和Hive一起发布的,是由Hive社区控制的。所以后来Spark社区就停止了Shark的开发转向SparkSQL(“坑了”一部分当时信任Shark的人)。SparkSQL是把SQL解析成RDD的transformation和action,而且通过catalyst可以自由、灵活的选择最优执行方案。对数据库有深入研究的人就会知道,SQL执行计划的优化是一个非常重要的环节,SparkSQL在这方面的优势非常明显,提供了一个非常灵活、可扩展的架构。

但是SparkSQL是基于内存的,元数据放在内存里面,不适合作为数据仓库的一部分来使用。所以有了SparkSQL的HiveContext,就是兼容Hive的SparkSQL。它支持HiveQL,HiveMetastore,HiveSerDesandHiveUDFs以及JDBCdriver。这样看起来很完美,但是实际上也有一些缺点:SparkSQL依赖于Hive的一个snapshot,所以它总是比Hive的发布晚一个版本,很多Hive新的feature和bugfix它就无法包括。而且目前看Spark社区在Spark的thriftserver方面的投入不是很大,所以感觉它不是特别想朝着这个方向发展。还有一个重要的缺点就是SparkSQL目前还不能通过分析SQL来预测这个查询需要多少资源从而申请对应的资源,所以在共享集群上无法高效地分配资源和调度任务。

spark怎么启动worker

基于spark1.3.1的源码进行分析Spark master启动源码分析

1、在start-master.sh调用master的main方法,main方法调用def main(argStrings: Array[String]) { SignalLogger.register(log) val conf = new SparkConf val args = new MasterArguments(argStrings, conf) val (actorSystem, _, _, _) = startSystemAndActor(args.host, args.port, args.webUiPort, conf)//启动系统和actor actorSystem.awaitTermination() }

2、调用startSystemAndActor启动系统和创建actordef startSystemAndActor( host: String, port: Int, webUiPort: Int, conf: SparkConf): (ActorSystem, Int, Int, Option[Int]) = { val securityMgr = new SecurityManager(conf) val (actorSystem, boundPort) = AkkaUtils.createActorSystem(systemName, host, port, conf = conf, securityManager = securityMgr) val actor = actorSystem.actorOf( Props(classOf[Master], host, boundPort, webUiPort, securityMgr, conf), actorName) val timeout = AkkaUtils.askTimeout(conf) val portsRequest = actor.ask(BoundPortsRequest)(timeout) val portsResponse = Await.result(portsRequest, timeout).asInstanceOf[BoundPortsResponse] (actorSystem, boundPort, portsResponse.webUIPort, portsResponse.restPort)

3、调用AkkaUtils.createActorSystem来创建ActorSystemdef createActorSystem( name: String, host: String, port: Int, conf: SparkConf, securityManager: SecurityManager): (ActorSystem, Int) = { val startService: Int =>(ActorSystem, Int) = { actualPort =>doCreateActorSystem(name, host, actualPort, conf, securityManager) } Utils.startServiceOnPort(port, startService, conf, name) }

4、调用Utils.startServiceOnPort启动一个端口上的服务,创建成功后调用doCreateActorSystem创建ActorSystem

5、ActorSystem创建成功后创建Actor

6、调用Master的主构造函数,执行preStart()

1、start-slaves.sh调用Worker类的main方法 def main(argStrings: Array[String]) { SignalLogger.register(log) val conf = new SparkConf val args = new WorkerArguments(argStrings, conf) val (actorSystem, _) = startSystemAndActor(args.host, args.port, args.webUiPort, args.cores, args.memory, args.masters, args.workDir) actorSystem.awaitTermination() }

2、调用startSystemAndActor启动系统和创建actordef startSystemAndActor( host: String, port: Int, webUiPort: Int, cores: Int, memory: Int, masterUrls: Array[String], workDir: String, workerNumber: Option[Int] = None, conf: SparkConf = new SparkConf): (ActorSystem, Int) = {// The LocalSparkCluster runs multiple local sparkWorkerX actor systems val systemName = "sparkWorker" + workerNumber.map(_.toString).getOrElse("") val actorName = "Worker" val securityMgr = new SecurityManager(conf) val (actorSystem, boundPort) = AkkaUtils.createActorSystem(systemName, host, port, conf = conf, securityManager = securityMgr) val masterAkkaUrls = masterUrls.map(Master.toAkkaUrl(_, AkkaUtils.protocol(actorSystem))) actorSystem.actorOf(Props(classOf[Worker], host, boundPort, webUiPort, cores, memory, masterAkkaUrls, systemName, actorName, workDir, conf, securityMgr), name = actorName) (actorSystem, boundPort) }

3、调用AkkaUtils的createActorSystem创建ActorSystem def createActorSystem( name: String, host: String, port: Int, conf: SparkConf, securityManager: SecurityManager): (ActorSystem, Int) = { val startService: Int =>(ActorSystem, Int) = { actualPort =>doCreateActorSystem(name, host, actualPort, conf, securityManager) } Utils.startServiceOnPort(port, startService, conf, name) }

4、创建完ActorSystem后调用Worker的主构造函数,执行preStart方法override def preStart() { assert(!registered) logInfo("Starting Spark worker %s:%d with %d cores, %s RAM".format( host, port, cores, Utils.megabytesToString(memory))) logInfo(s"Running Spark version ${org.apache.spark.SPARK_VERSION}") logInfo("Spark home: " + sparkHome) createWorkDir() context.system.eventStream.subscribe(self, classOf[RemotingLifecycleEvent]) shuffleService.startIfEnabled() webUi = new WorkerWebUI(this, workDir, webUiPort) webUi.bind() registerWithMaster()metricsSystem.registerSource(workerSource) metricsSystem.start() // Attach the worker metrics servlet handler to the web ui after the metrics system is started. metricsSystem.getServletHandlers.foreach(webUi.attachHandler) }

5、调用registerWithMaster方法向Master注册启动的worker def registerWithMaster() { // DisassociatedEvent may be triggered multiple times, so don't attempt registration // if there are outstanding registration attempts scheduled. registrationRetryTimer match { case None =>registered = false tryRegisterAllMasters() connectionAttemptCount = 0 registrationRetryTimer = Some { context.system.scheduler.schedule(INITIAL_REGI...

用Spark做数据分析是怎样一种体验

数据科学家为了回答一个问题或进行深入研究,会使用相关的技术分析数据。通常,他们的工作包含特殊的分析,所以他们使用交互式shell,以使得他们能在最短的时间内看到查询结果和代码片段。Spark的速度和简单的API接口很好地符合这个目标,它的内建库意味着很多算法可以随时使用。

Spark通过若干组件支持不同的数据科学任务。Spark shell使得用Python或Scala进行交互式数据分析变得简单。Spark SQL也有一个独立的SQL shell,可以用SQL进行数据分析,也可以在Spark程序中或Spark shell中使用Spark SQL。MLlib库支持机器学习和数据分析。而且,支持调用外部的MATLAB或R语言编写的程序。Spark使得数据科学家可以用R或Pandas等工具处理包含大量数据的问题。

有时,经过初始的数据处理阶段后,数据科学家的工作将被产品化,扩展,加固(容错性),进而成为一个生产数据处理应用,作为商业应用的一个组件。例如,一个数据科学家的研究成果可能会产生一个产品推荐系统,集成到一个web应用上,用来向用户生成产品建议。通常由另外的人员(如工程师)对数据科学家的工作进行产品化。

这个的话,先要了解下当下比较火的大数据,ITjob官网上有大数据和Spark的文章和帖子,如果觉得回答的不够详细,可以自己再去了解下。也可以去专业的贴吧和博客寻找下答案。

想研读下spark的源码怎么搭阅读和调试的环境

网上搜一下就有,下面转的董西成的博客

(1)准备工作

1) 安装JDK 6或者JDK 7

2) 安装scala 2.10.x (注意版本)

3) 将下载的Intellij IDEA解压后,安装scala插件,流程如下:

依次选择“Configure”–> “Plugins”–> “Browse repositories”,输入scala,然后安装即可

(2)搭建Spark源码阅读环境(需要联网)

第一种方法是直接依次选择“import project”–>; 选择spark所在目录 –> “SBT”,之后intellij会自动识别SBT文件,并下载依赖的外部jar包,整个流程用时非常长,取决于机器的网络环境(不建议在windows下操作,可能遇到各种问题),一般需花费几十分钟到几个小时。注意,下载过程会用到git,因此应该事先安装了git。

第二种方法是首先在linux操作系统上生成intellij项目文件,然后在intellij IDEA中直接通过“Open Project”打开项目即可。在linux上生成intellij项目文件的方法(需要安装git,不需要安装scala,sbt会自动下载)是:在spark源代码根目录下,输入sbt/sbt gen-idea

注:如果你在windows下阅读源代码,建议先在linux下生成项目文件,然后导入到windows中的intellij IDEA中。

(3)搭建Spark开发环境

在intellij IDEA中创建scala project,并依次选择“File”–> “project structure” –> “Libraries”,选择“+”,将spark-hadoop 对应的包导入,比如导入spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar(只需导入该jar包,其他不需要),如果IDE没有识别scala 库,则需要以同样方式将scala库导入。之后开发scala程序即可:

编写完scala程序后,可以直接在intellij中,以local模式运行,方法如下:

点击“Run”–> “Run Configurations”,在弹出的框中对应栏中填写“local”,表示将该参数传递给main函数,如下图所示,之后点击“Run”–> “Run”运行程序即可。

如果想把程序打成jar包,通过命令行的形式运行在spark 集群中,可以按照以下步骤操作:

依次选择“File”–> “Project Structure” –> “Artifact”,选择“+”–> “Jar” –> “From Modules with dependencies”,选择main函数,并在弹出框中选择输出jar位置,并选择“OK”。

最后依次选择“Build”–> “Build Artifact”编译生成jar包。

以下为关联文档:

怎样理解spark中的partition和block的关系hdfs中的block是分布式存储的最小单元,类似于盛放文件的盒子,一个文件可能要占多个盒子,但一个盒子里的内容只可能来自同一份文件。假设block设置为128M,你的文件是250M,那么这份...

如何理解实证分析与规范分析方法实证分析简言之就是分析经济问题“是什么”的研究方法.。侧重研究经济体系如何运行,分析经济活动的过程、后果及向什么方向发展,而不考虑运行的结果是否可取。实证分析法在一...

卢梭教育思想得核心是什么卢梭崇尚自然,主张 “回归自然”,他提 出了自然教育理论。 自然教育思想是卢梭教育理论的根本思想,其影响深远。 一、 卢梭的自然教育理论概论 《爱弥儿》全书共五卷,卢梭根据儿...

如何理解语文核心素养阅读理解核心素养:语文核心素养是一种以语文能力为核心的综合素养,包括语文知识、语言积累、语文能力、语文学习方法和习惯,以及思维能力、人文素养等。如何培养:培养学生的语文基本能力...

页面调度算法的实现和分析源码dev c++ #include#include#includetypedef struct mem { int num; int v; }meme; static int process[1024],L,M; void LRU(); void FIFO(); void get(); int menu(); int m...

老子的核心思想是什么老子的核心思想是什么老子的核心思想是什么?的问题之答案耿阁(鸣天士君)著19-04-04 北辰星uh... + 关注献花(0) 收藏老子的核心思想是什么?老子的核心思想是什么?的问题之答案耿阁(...

托福阅读的TPO真题怎么比较深入分析啊"想要提高阅读,但是阅读不好,存在的问题无非是:读不懂、读得慢、记不住。提高阅读,从解决这三方面的问题入手即可:1. 词汇量是制约很多同学理解文章意思的重要因素,因此需要扩充自...

在证券投资学中怎样理解技术分析与基本分析的不同一、 证券投资学的研究对象 证券投资学的研究对象是证券投资的运行及证券市场的规律。具体的讲,就是证券投资者如何正确选择证券投资工具;如何规范地参与证券市场的运作;如何科...

如何读深入理解linux内核和情景分析怎么读《深入理解linux内核》和《情景分析》有同感的人回帖。------解决方案-------------------------------------------------------- 没有基础看着两本书是相当吃力的!--...

推荐阅读
图文推荐