然后安装anaconda。
如果spark和anaconda都已经安装好了,直接添加环境变量。第一个变量是PYSPARK_DRIVER_PYTHON:jupyter。另外一个变量是PYSPARK_DRIVER_PYTHON_OPTS:notebook。这样从命令行启动的话(双击启动不行)就可以打开一个web服务在notebook中的py脚本就可以运行在spark上了
SparkContext是程序执行的入口,一个SparkContext代表一个应用,深入理解spark运行时机制,首先要了解SparkContext初始化过程。SparkContext初始化
SparkContext的定义
构造参数为SparkConf,其存储spark相关的配置信息,查看SparkConf定义
SparkConf内部用ConcurrentHashMap存储各种配置信息,初始化时会加载所有以spark.开头的环境变量。
SparkContext初始化
查看初始化对应代码
clone SparkConf变量,接着判断spark.master和spark.app.name是否存在,如果是YARN cluster模式则必须设置spark.yarn.app.id,然后是driver的host,port信息,最后是jars和files,接着查看
_eventLogDir是否记录运行时信息,由spark.eventLog.enabled和spark.eventLog.dir控制,以及是否压缩该信息_eventLogCodec,spark.externalBlockStore.folderName设置运行时本地存储的目录名,为“spark-” + randomUUID.toString(),如果为yarn-client模式,设置SPARK_YARN_MODE=true,使用JobProgressListener跟踪运行时信息,用于UI展示,最后创建SparkEnv对象,创建SparkEnv的过程涉及到非常多spark-core中的核心类。
查看createSparkEnv
继续查看SparkEnv.createDriverEnv
获取host和port信息,调用create方法。
继续查看create方法
创建安全相关的SecurityManager,通过spark.authenticate配置
创建基于akka的分布式消息系统,中间的创建过程略多,这里不再描述,最后看看SparkEnv初始化了哪些对象
上图中列出的对象几乎涵盖了spark-core的核心类,后续会对其分别分析,至此,SparkEnv创建完毕。
接着上面SparkEnv.set(_env)(限于篇幅,关于UI方面的代码可能会被略掉),_metadataCleaner使用TimerTask定期清理persistentRdd,读取hadoop配置,将jar和file的路径添加到rpcEnv的fileServer,读取Executor相关变量,重要的参数为ExecutorMemory
接着,_heartbeatReceiver是默认基于netty实现的心跳机制,创建schedulerBackend用于提交任务,创建taskScheduler和dagScheduler,获取applicationId,启动度量系统,获取eventLogger
executorAllocationManager关于Executor动态资源分配,通过spark.dynamicAllocation.enabled设置,创建contextcleaner用于清理过期的RDD, shuffle和broadcast ,启动ListenerBus,并post环境信息和应用信息,最后添加确保context停止的hook,至此整个sparkcontext的初始化流程结束
---------------------
作者:Mr_JieLQ
来源:CSDN
原文:https://blog.csdn.net/u011564172/article/details/54927873
版权声明:本文为博主原创文章,转载请附上博文链接!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)