前置条件: CentOS6.7 JDK1.7+ Maven 3.3.9 Spark2.1.0 1.到spark官网上下载spark2.1.0的源码 spark-download.png...2.执行mkdir source新建目录,在此目录下通过wget下载源代码 wget https://archive.apache.org/dist/spark/spark-2.1.0/spark...解压的源码根目录下执行最终的mvn命令: /build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=hadoop-2.6.0-cdh5.7.0 -Phive -Phive-thriftserver...解压的源代码的根路径下可以看到编译成功的spark包,名称形如: spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz (spark-spark版本号-bin-hadoop版本号-CDH...社区版本号) 以上内容参考:http://spark.apache.org/docs/2.1.0/building-spark.html
终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧。不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的。...另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其实都可以通过这种方式来寻找源码入口。 先来介绍一下Spark-shell是什么?...Spark-shell是提供给用户即时交互的一个命令窗口,你可以在里面编写spark代码,然后根据你的命令立即进行运算。...=unix" "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "...onExit 其实这个脚本只能看出来是调用了spark-submit,后续会再分析一下spark-submit的作用(它里面会调用spark-class,这才是执行方法的最终执行者,前面都是传参而已)。
继上次的Spark-shell脚本源码分析,还剩下后面半段。由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述。...上篇回顾:Spark源码分析之Spark Shell(上) function main() { if $cygwin; then # Workaround for issue involving...=unix" "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "...最常用的信号有四个,SIGHUP,SIGINT,SIGQUIT,SIGTSTP,使用的时候可以简写: trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP 然后我们回头看看源码...回头看源码 有了对stty的了解后,回头我们看看spark-shell脚本,就清晰明了了。 saved_stty=$(stty -g 2>/dev/null) 首先保存了当前的终端配置。
这种也是很有针对性去看的,比如spark的shuffle调优,网上文章一大堆,但是真的去按照他们文章推荐去调优了发现大部分不奏效。...实际上,spark更新换代快,文章很容易老旧,这种情况下,就需要官网和源码,只有了解了真相才能尽可能做到最优。...又有人问,浪院长,这个源码阅读有什么先后顺序吗? 答,从上面表述来看,可以认为没有什么先后顺序。 但是,假如你就想着完整的读一下比如spark的源码,那么这时候做法就有章可循了。...就是,按照自己在使用中对spark的运行原理的理解,去阅读源码核实自己的理解。 只有这样,带着疑问去读,你才有可能坚持下去而且学到很多,每一次揭秘都是成就感满满。...文章标题,说了是spark源码导读第一步,那么熟悉源码的你可以在没任何参考的情况下画出spark 的rpc的结构图吗? ?
0x00 前言 本篇是Spark源码解析的第二篇,主要通过源码分析Spark Streaming设计中最重要的一个概念——DStream。...本篇主要来分析Spark Streaming中的Dstream,重要性不必多讲,明白了Spark这个几个数据结构,容易对Spark有一个整体的把握。...算是对Spark Streaming源码的一个概览。...提一点就是,Streaming 的任务最后都会转化为Spark任务,由Spark引擎来执行。 ?...源码分析:reduceByKey方法 有了看RDD源码的经验,我们很容易找到reduceByKey是在PairDStreamFunctions类中的。下面看一下它的源码。
spark-submit提交任务的全过程 下图大致描述了整个过程 ?...spark-submit if [ -z "${SPARK_HOME}" ]; then export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)" fi...org.apache.spark.deploy.SparkSubmit exec "${SPARK_HOME}"/bin/spark-class org.apache.spark.deploy.SparkSubmit..."$@" 会先经历spark-class org.apache.spark.deploy.SparkSubmit处理,里面包括一些基本环境配置,然后运行 再看看 org.apache.spark.deploy.SparkSubmit...* 这些都是spark-submit 里面的一些配置,例如启动模式、环境变量。
最近有人问浪尖,想读一个比较大的spark项目源码,问浪尖要,浪尖只能告诉你业务相关的是基本上不会有人开源,平台相关的源码就比较多了,浪尖比较推荐的是Spark JobServer相关的源码。...改源码量比较小,而且是关于Spark API的非常适合大家去阅读,以便于帮助大家更加深刻的理解spark API的使用及运行原理相关的内容。...而且作为一个比较好的spark 服务,适合那些想用spark 作为服务的公司,免于自己开发维护一套系统。 至于推荐的原因,可以有spark jobserver的特征窥见一斑: 1....这样可以提高对象在作业间的共享和重用 关于入口浪尖建议大家可以从Spark jobserver的bin目录下手,比如server_start.sh脚本,该脚本本身就是一个spark 任务提交脚本比较好的范例...阅读源码,坚持学习,坚持进步是比较枯燥的事情,这是因为有益的事情往往是比较枯燥的,消耗的事情往往是很轻松的。就看你如何选择了 更多spark,flink等大数据技巧欢迎关注浪尖知识星球。
EliminateOuterJoin DPP 动态分区裁剪 以及 PushDownPredicates 中和 Join 相关的 predicate pushDown 二、Join 物理计划生成和选取 2.1、基本概念 在 Spark...SQL 中,参与 Join 操作的两张表分别被称为流式表(StreamTable)和构件表(BuildTable),不同表的角色在 Spark SQL 中会通过一定的策略进行设定。...在 Spark 中,BuildSide 作为一个抽象类,包含 BuildLeft 和 BuildRight 两个子类,一般在构造 Join 的执行算子时,都会传入一个 BuildSide 的构造参数。...基于统计数据) 尝试选用 shuffle hash join:如果 join 类型支持,且 join 的一侧 size 足够小能够构建 local hash map,且该侧 size 显著小于另一侧,且 spark.sql.join.preferSortMergeJoin
spark-shell启动的过程源码分析 spark-shell function main() { # 对当前系统进行判断,通过spark-submits.sh 启动 org.apache.spark.repl.Main...-Djline.terminal=unix" "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name..."Spark shell" "$@" stty icanon echo > /dev/null 2>&1 else export SPARK_SUBMIT_OPTS "${...SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "$@" fi } org.apache.spark.repl.Main...", intp.classServerUri) .setIfMissing("spark.app.name", "Spark shell") if (execUri !
0x00 前言 本篇是Spark源码解析的第一篇,主要通过源码分析Spark设计中最重要的一个概念——RDD。...文章结构 先回顾一下RDD的一些特征以及几个基本概念 RDD源码分析,整体的源码设计 举一个例子,通过这个例子来一步步地追踪源码。...0x02 源码分析 RDD的5个特征会对应到源码中的4个方法和一个属性。 RDD.scala是一个总的抽象,不同的子类会对下面的方法进行定制化的实现。...在正式看源码之前,上一个图。 这个图是整个流程中RDD的转换过程,这里先不讲解,后面看源码的时候如果有疑惑再回过头来看,就明白了。 ? 1....这里,我们是不是就可以理解,Hadoop中的一个分片,就对应到Spark中的一个Partition。
import org.apache.spark.rdd.RDD import org.apache.spark....newHashPartitioner(3))) println(rdd4.dependencies) sc.stop() } } 1.两个打印语句: List(org.apache.spark.OneToOneDependency...@63acf8f6) List(org.apache.spark.OneToOneDependency@d9a498) 对应的依赖: rdd3对应的是宽依赖,rdd4对应的是窄依赖 原因: 1)参考...partitions.length)) } else { None } val defaultNumPartitions = if (rdd.context.conf.contains("spark.default.parallelism
这一章要讲Spark Streaming,讲之前首先回顾下它的用法,具体用法请参照《Spark Streaming编程指南》。...Spark写得实在是太巧妙了,居然可以把Receiver包装在RDD里面,当做是数据来处理!...提到这里,有两个参数需要大家注意的: spark.streaming.blockInterval 默认值是200 spark.streaming.blockQueueSize 默认值是10 这是前面提到的间隔时间和队列的长度
本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正。为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容。...Spark Core RDD RDD(Resilient Distributed Dataset),即弹性数据集是 Spark 中的基础结构。...take是行动操作,返回的是一个数组而不是 RDD 了,如下所示 scala> var rdd1 = sc.makeRDD(Seq(10, 4, 2, 12, 3)) rdd1: org.apache.spark.rdd.RDD...Array(10) scala> rdd1.take(2) res1: Array[Int] = Array(10, 4) 转换操作是 Lazy 的,直到遇到一个 Eager 的 Action 操作,Spark...这些 Action 操作将一个 Spark Application 分为了多个 Job。
只是简单调用spark-class脚本: exec "${SPARK_HOME}"/bin/spark-class org.apache.spark.deploy.SparkSubmit "$@" spark-class...和spark-class,则相当于是分两步执行: java -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main org.apache.spark.deploy.SparkSubmit...,若是则-Xmx变为spark.driver.memory;添加native library spark.driver.extraLibraryPath到classpath 3) 添加SPARK_SUBMIT_OPTS...4) 添加从spark-submit脚本输入参数中解析出来的参数和mainclass org.apache.spark.deploy.SparkSubmit。...spark把DriverPod的yaml内容,从spark应用的角度拆分成几个部分,每一个部分用一个FeatureStep来实现。
这一章打算讲一下Spark on yarn的实现,1.0.0里面已经是一个stable的版本了,可是1.0.1也出来了,离1.0.0发布才一个月的时间,更新太快了,节奏跟不上啊,这里仍旧是讲1.0.0的代码...在第一章《spark-submit提交作业过程》的时候,我们讲过Spark on yarn的在cluster模式下它的main class是org.apache.spark.deploy.yarn.Client...processes running on the same box System.setProperty("spark.ui.port", "0") // when running...the AM, the Spark master is always "yarn-cluster" System.setProperty("spark.master", "yarn-cluster...@%s:%s/user/%s".format( sparkConf.get("spark.driver.host"), sparkConf.get("spark.driver.port
作者:calvinrzluo,腾讯 IEG 后台开发工程师 本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正。...为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容。...当然,内存还是要能承载一个 KV 的,我们将在稍后的源码分析中深入研究这个问题。 终于在 Spark1.1 版本之后引入了 Sorted Based Shuffle。...在 Spark 源码中建议如果希望进行 Map-side combining 的话,就指定ordering,否则就可以设置ordering为null private[spark] class ExternalSorter...:核心思想与源码分析 http://www.calvinneo.com/2019/08/06/spark-sql/ https://zhuanlan.zhihu.com/p/67068559 http:
前面总结的Spark-shell的分析可以参考: Spark源码分析之Spark Shell(上) Spark源码分析之Spark Shell(下) Spark-submit if [ -z "${SPARK_HOME...in Python 3.3+ export PYTHONHASHSEED=0 exec "${SPARK_HOME}"/bin/spark-class org.apache.spark.deploy.SparkSubmit..."$@" 跟Spark-shell一样,先检查是否设置了${SPARK_HOME},然后启动spark-class,并传递了org.apache.spark.deploy.SparkSubmit作为第一个参数...,然后把前面Spark-shell的参数都传给spark-class Spark-class if [ -z "${SPARK_HOME}" ]; then export SPARK_HOME="$..."${SPARK_HOME}"/bin/load-spark-env.sh 在spark-env中设置了assembly相关的信息。
本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正。为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容。...第一部分内容见: Spark学习:Spark源码和调优简介 Spark Core (一) Task 阶段 下面是重头戏submitMissingTasks,这个方法负责生成 TaskSet,并且将它提交给
二,例子和概念 1,需要导入的依赖为 org.apache.spark spark-sql-kafka-0...三,源码相关介绍 本次源码不会牵涉到具体的数据源 1,重要的类 A),DataSource 负责构造可插入数据源的数据源。...C),StreamExecution 使用单独一个线程管理Streaming Spark Sql query的执行。...2,重要的源码 采用上面的样例源码。...也会对kafka 0.10.0的Consumer和KafkaProducer进行源码解密,因为你会发现,关于kafka 0.10.0与spark的结合已经变了天了。
概述 Spark SQL作为大数据开发中非常重要的工具,如果能对其内部原理有进一步的了解,那么能更好的使用它。 计划花半年时间,把Spark SQL源码看一遍,算完整的总结一下。...Resolved Logical Plan Analyzed Logical Plan Optimized Logical Plan Physical Plan Executed Plan 版本信息 Spark...SQL版本:3.3 Scala版本:2.12 注意:本系列文章参考《Spark SQL内核剖析》 ----