Spark
文章平均质量分 82
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
Spark 2.3.1 执行报错: NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig
版本Hadoop : 3.1.3Spark : 2.11-2.3.1执行命令:spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 \ /opt/spar...原创 2020-05-13 14:17:51 · 4981 阅读 · 0 评论 -
Spark On Yarn 安装 [ hadoop2.7.4 . spark2.4.4.]
1. 版本介绍spark 2.4.4hadoop2.7.4[由于我的集群配置的是 HA,所有以下在写 HDFS 相关的路径的时候,我直接写到是 HA 的地址. HDFS 非 HA 单节点请自行调成成 ip:9000 的形式]2.上传&解压scp spark-2.4.4-bin-hadoop2.7.tgz root@h23:/opt/ta...原创 2019-11-24 14:42:29 · 1361 阅读 · 0 评论 -
Spark 算子 : groupByKey 和 collectAsMap 配合使用运行时间与结果测评
在看代码的时候,发现同事在用 将数据转换为 map 之前,加了一个 groupByKey , 觉得这样并不靠谱,所以写了一段代码进行验证. 结果如下: (无论哪种方式, 数据是一样的 !!! 使用groupByKey 会慢 很多 ) 情况1: 随机生成 指定条数的数据, 无重复 key , 查看运行时间与结果 (时间单位 毫秒) 1W 5W 10W...原创 2019-02-15 15:46:14 · 7383 阅读 · 0 评论 -
Spark 算子 : distinct 和 collectAsMap 配合使用运行时间与结果测评
在看代码的时候,发现同事在用 将数据转换为 map 之前,加了一个 distinct , 觉得这样并不靠谱,所以写了一段代码进行验证. 结果如下: (无论哪种方式, 数据是一样的 !!! 使用distinct 会慢 很多 ) 情况1: 随机生成 指定条数的数据, 无重复 key , 查看运行时间与结果 (时间单位 毫秒) 1W 5W 10W...原创 2019-02-15 15:21:36 · 7882 阅读 · 0 评论 -
Spark2.3.2源码解析:(多线程)不中断线程 (UninterruptibleThread )
本文讲述,spark中的不中断线程的内容。直接看代码:UninterruptibleThread主要作用是重写 Thread类的interrupt方法,在执行thread.interrupt()方法的时候增加了一个判断uninterruptible(或者说是一个锁,在线程执行完成之后,通过finally进行释放),如果这个值为ture,打断不起作用。默认值false。 un...原创 2019-01-16 13:09:31 · 7406 阅读 · 0 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (二) TaskScheduler : 本地化计算
架构图: Standalone模式提交运行流程图: 首先写一个WordCount代码(这个代码,为了观察多个stage操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看spark执行程序时,将代码划分stage生成的DAG流程图 可知: WordCount 在stage划分的时候,划分为三个stage ...原创 2018-12-25 16:00:02 · 5827 阅读 · 0 评论 -
Spark RDD的默认分区数
spark.default.parallelism:(默认的并发数) 如果配置文件spark-default.conf中没有显示的配置,则按照如下规则取值: 本地模式(不会启动executor,由SparkSubmit进程生成指定数量的线程数来并发): spark-shell spark.default.pa...转载 2019-01-04 09:58:05 · 7711 阅读 · 0 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (三) TaskScheduler : Executor 任务提交
架构图: 代码提交时序图Standalone模式提交运行流程图: 首先写一个WordCount代码(这个代码,为了观察多个stage操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看spark执行程序时,将代码划分stage生成的DAG流程图 可知: WordCount 在stage划分的时...原创 2018-12-29 17:03:59 · 7377 阅读 · 0 评论 -
Spark配置参数详解
Spark提供三个位置用来配置系统:Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置 环境变量:可以通过每个节点的 conf/spark-env.sh脚本设置。例如IP地址、端口等信息 日志配置:可以通过log4j.properties配置Spark属性Spark属性控制大部分的应用程序设置,并且为每个应用程序分别配置它。这些属性可以直接...翻译 2018-12-18 16:41:38 · 10079 阅读 · 0 评论 -
两个数据进行过滤,广播map 数据与 join 操作 性能对比
主要测试两种情况1.将 rdd 转换为 map 广播, 与另外集合rdd 进行匹配2.将 rdd 与 rdd 进行连表 , 过滤数据. 时间单位(毫秒) 10万 100万 500万 1000万 广播map 过滤 4 8 22 47 rdd join 过滤 50 92 175 279 ...原创 2019-02-15 17:59:46 · 8749 阅读 · 0 评论 -
Spark2.3.2源码解析: 4.3.Yarn cluster 模式 Executor 注册/启动源码 分析
本文章与前两篇文章有衔接性, 想知道为什么从此处代码开始的话,请查阅前两篇文章:Spark2.3.2源码解析: 4.1.Yarn cluster 模式 SparkSubmit源码分析(一)https://blog.csdn.net/zhanglong_4444/article/details/84875818Spark2.3.2源码解析: 4.2.Yarn clust...原创 2019-02-22 17:45:36 · 3169 阅读 · 0 评论 -
Spark2.3.2源码解析: 11. collectAsMap 源码解析& 性能测试
本文主要是为了认识collectAsMap 的源码, 以及在使用的时候性能。对其性能方面做一个直观的理解 /** * Return the key-value pairs in this RDD to the master as a Map. * * Warning: this doesn't return a multimap (so if you have multi...原创 2019-02-13 10:10:39 · 7496 阅读 · 0 评论 -
Redis 单节点千万级别数据读取 , 插入 Mysql 性能测试.
环境说明: Redis 未做任何优化, 单节点 (服务器上, 内存64G). Mysql 未做任何优化, 单节点 (服务器上, 内存64G). 数据量 : 10058624条 (大约一千零6万条数据,本地机器运行读取插入操作.) 数据大小 : 1093.5...原创 2019-02-26 14:35:38 · 3285 阅读 · 0 评论 -
Spark2.3.0 通过Phoenix4.7 查询 Hbase 数据.
0. 环境软件 版本 JDK 1.8 SCALA 2.11.8 Spark 2.3.0 Phoenix 4.7.0 Hbase 1.1.2 1. 目标数据CREATE TABLE TABLE1 (ID BIGINT NOT NULL PRIMARY KEY, COL1 VARCHAR);UPSERT INT...原创 2019-03-14 19:47:22 · 1719 阅读 · 3 评论 -
Spark2.3.2源码解析: 算子解析 [ 一 . 概览 ]
本章先大体对Spark的算子进行分类, 然后根据分类做具体分析 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业Action 操作,完成作业中间过程处理。 Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需...原创 2019-03-11 11:52:31 · 1187 阅读 · 0 评论 -
Spark2.3.2源码解析: 算子解析 [ 二 . Value数据类型的Transformation算子 ]
本文讲述的是[ Value数据类型的Transformation算子 ] 分类的算子.一、输入分区与输出分区一对一型 1、map算子将原来 RDD 的每个数据项通过map 中的用户自定义函数 f映射转变为一个新的元素。源码中 map 算子相当于初始化一个 RDD, 新 RDD 叫做 MappedRDD(this, sc.clean(f))。...原创 2019-03-12 10:28:01 · 954 阅读 · 0 评论 -
Spark2.3.2源码解析: 算子解析 [ 三 . Key-Value数据类型的Transfromation算子 ]
本文讲述的是[ Key-Value数据类型的Transfromation算子 ] 分类的算子.一、输入分区与输出分区一对一 15、mapValues算子mapValues :针对(Key, Value)型数据中的 Value 进行 Map 操作,而不对 Key 进行处理。 图 15 中的方框代表 RDD 分区。a=>a+2 代表对 (V1,...原创 2019-03-12 18:03:29 · 825 阅读 · 0 评论 -
Spark2.3.2源码解析: 算子解析 [ 四 . Action算子 ]
本文讲述的是[ Action算子 ] 分类的算子. 本质上在 Action 算子中通过 SparkContext 进行了提交作业的 runJob 操作,触发了RDD DAG 的执行。一、无输出 22、foreach算子 foreach 对 RDD 中的每个元素都应用 f 函数操作,不返回 RDD 和 Array, 而是返回Uint。图22表示 foreach...原创 2019-03-12 18:27:11 · 1126 阅读 · 0 评论 -
Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件
Spark 在 shuffle 过程中,如果内存空间不足会向磁盘溢写文件, 一个索引文件,一个数据文件.那么这两个文件长什么样? 里面放什么数据呢?文件命名:ShuffleBlockId : "shuffle_" + shuffleId + "_" + mapId + "_" + reduceId数据文件名:ShuffleDataBlockId : ...原创 2019-03-11 18:11:50 · 1338 阅读 · 0 评论 -
Spark 本地化计算参数调整分析
Spark在Driver上,对Application的每一个stage的task,进行分配之前,都会计算出每个task要计算的是哪个分片数据,RDD的某个partition;Spark的task分配算法,优先,会希望每个task正好分配到它要计算的数据所在的节点,这样的话,就不用在网络间传输数据; 但是呢,通常来说,有时,事与愿违,可能task没有机会分配到它的数据所在的节点,为...原创 2018-12-28 22:10:24 · 6346 阅读 · 0 评论 -
Spark2.3.2源码解析: 4.2.Yarn cluster 模式 SparkSubmit源码分析(二)ApplicationMaster
准备工作:启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test/spark-test.jar /tmp/zl/data/data.txt 执行jar包 spark-test.jar 代码 核心: val c...原创 2018-12-18 14:36:12 · 9702 阅读 · 0 评论 -
Spark2.3.2源码解析: 7.3. SparkContext源码分析(二) :调度系统 DAGScheduler
简介: 本质上在Actions算子中通过SparkContext执行提交作业的runJob操作,触发了RDD DAG的执行。 所以本文从runJob方法进行解析 从而引出DAGScheduler、TaskScheduler 。。。。 代码部分: 提交流程图:调度流程: 源码解析: 直...原创 2018-12-20 17:35:34 · 6176 阅读 · 3 评论 -
Spark2.3.2源码解析: 4.1.Yarn cluster 模式 SparkSubmit源码分析(一)
因为所有的任务提交代表都是从SparkSubmit开始,所以先从开始看源码,但是这个估计会有点复杂,先通读一下。 准备工作:启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test/spark-test.jar /tmp/zl/data/data.txt...原创 2018-12-07 23:56:45 · 9748 阅读 · 2 评论 -
Spark2.3.2源码解析: 8. RDD 源码解析 (一) RDD 类分析
全称: 弹性分布式数据集1)有一个分片列表,就是能被切分,和Hadoop一样,能够切分的数据才能并行计算。 一组分片(partition),即数据集的基本组成单位,对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。每个分配的存储是由Bloc...原创 2018-12-19 18:40:45 · 5806 阅读 · 0 评论 -
Spark2.3.2源码解析: 3.启动worker节点启动流程源码分析
本文启动worker节点启动流程分析 启动命令:${SPARK_HOME}/sbin/start-slave.sh spark://sysadmindeMacBook-Pro.local:7077 查看start-slave.sh 执行脚本:/workspace/spark-2.3.2/sbin/spark-daemon.sh start org.apache....原创 2018-12-06 15:20:50 · 6125 阅读 · 0 评论 -
Spark2.3.2源码解析: 7.2. SparkContext源码分析(二) :TaskSchedulerImpl
代码部分: 启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test.jar /mysqlClean.sql 执行jar包 spark-test.jar 代码 核心: // 创建SparkCo...原创 2018-12-12 17:47:33 · 6228 阅读 · 0 评论 -
Spark基础知识详解
Apache Spark是一种快速通用的集群计算系统。 它提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎。 它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX和Spark Streaming。Spark优点:减少磁盘I/O:随着实时大数据应用越来越多...翻译 2018-12-12 17:45:38 · 13918 阅读 · 3 评论 -
Spark2.3.2源码解析: 2.启动master节点流程源码分析
本文主要说明在启动master节点的时候,代码的流程走向。 授予文件执行权限chmod755 两个目录里的文件:/workspace/spark-2.3.2/bin --所有文件/workspace/spark-2.3.2/sbin 启动脚本:start-master.sh 脚本最终执行的是:"${SPARK_HOME}/sbin"/spark-da...原创 2018-12-05 23:34:00 · 6624 阅读 · 2 评论 -
Spark2.3.2源码分析:1.代码阅读环境准备
准备工作(仅针对于mac环境) ‘版本 软件 版本 操作系统 MAC Jdk 1.8 Maven 3.3.9+ Scala 2.10.6 Spark ...原创 2018-12-05 16:49:41 · 6500 阅读 · 7 评论 -
Spark2.3.2源码解析: 5. SparkConf源码分析
在执行代码的时候,首先要声明:SparkConf,本文以SparkConf进行分析,逐步展开。 val conf = new SparkConf() 类中的方法(org.apache.spark.SparkConf)Modifier and Type Method and Description SparkConf clone()...原创 2018-12-11 16:43:57 · 6384 阅读 · 0 评论 -
Spark2.3.2源码解析: 6. RDD 依赖关系:宽依赖与窄依赖
Spark中RDD的高效与DAG(有向无环图)有很大的关系,在DAG调度中需要对计算的过程划分Stage,划分的依据就是RDD之间的依赖关系。RDD之间的依赖关系分为两种,宽依赖(wide dependency/shuffle dependency)和窄依赖(narrow dependency) 1.窄依赖窄依赖就是指父RDD的每个分区只被一个子RDD分区使用,子RDD分区通常...原创 2018-12-12 11:27:01 · 6126 阅读 · 0 评论 -
在YARN上运行Spark API
启动命令格式:$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]实例:$ ./bin/spark-submit --class org.apache.spark.exam...翻译 2018-12-18 11:39:55 · 7808 阅读 · 0 评论 -
Spark复杂情况下的stage划分 reduceByKey leftOuterJoin union
为了研究复杂情况下的stage划分,故意写了一段复杂一点的代码进行测试。 代码:import org.apache.spark.{SparkConf, SparkContext}object WordDemo { //spark-submit --name 'WordDemo' --class WordDemo --master yarn --num-executors ...原创 2018-12-28 10:48:23 · 5580 阅读 · 0 评论 -
Spark2.1 内存管理详解
本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解 RDD、Shuffle、JVM 等相关概念。在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各...翻译 2018-12-11 14:16:23 · 6723 阅读 · 1 评论 -
Spark2.3.2源码解析:9.调度系统 DAGScheduler 之 Stage 划分源码详解
Stage划分的时候,大家应该都知道是从最后一个stage向根据宽窄依赖,递归进行stage划分。但是代码里面涉及的逻辑复杂。毕竟涉及到相互递归调用。让人似懂非懂。 反正我是炸毛了 o(╥﹏╥)o本文专门用一篇文章详细论述DAGScheduler 的 stage 划分流程为了更容易理解,本文采用 debug模式+实例+源码的方式进行讲解首先写一个WordCount代码(这个代码,为...原创 2018-12-22 12:49:16 · 8742 阅读 · 2 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (一) DAGScheduler 之 stage 提交
一个Spark Application分为stage级别和task级别的调度, task来源于stage,所有本文先从stage提交开始讲解task任务提交。 架构图:Standalone模式提交运行流程图:首先写一个WordCount代码(这个代码,为了观察多个suffle操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看...原创 2018-12-22 12:11:52 · 5926 阅读 · 1 评论 -
Spark2.3.2源码解析: 8. RDD 源码解析 (二) textFile 返回的RDD实例是什么
本文主要目标是分析RDD的实例对象,到底放了什么。从代码val textFile = sc.textFile(args(0)) 开始:直接看textFile 源码:你会发现调用的是hadoop的api,通过 hadoopFile 读取数据,返回一个hadoopRDD对象 hadoopRDD 返回的结果,其实就是1 val...原创 2018-12-21 16:13:40 · 5953 阅读 · 0 评论 -
Spark2.3.2源码解析: 7.1. SparkContext源码分析(一) : SparkEnv
SparkContext 是通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDDs 、 累加器( Accumulators )和广播变量( Broadcast Variables ) 。 SparkContext 也是整个 Spark 应用程序( Application ) 中 至关重要的一个对象,可以说是整个 Application 运行调度的核心 (不是指资源调...原创 2018-12-12 15:19:42 · 5938 阅读 · 0 评论