spark
文章平均质量分 56
哥伦布112
Apache IoTDB contributor
https://github.com/WilliamSong11/iotdb
展开
-
Spark SQL之External DataSource外部数据源(二)源码分析
上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的。 /**Spark SQL源码分析系列文章*/(Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例http://blog.csdn.net/oopsoom/article/details/42061077)一、Sources包核心 Spark SQL在Spark1.2中提供了...原创 2020-07-31 00:30:01 · 369 阅读 · 0 评论 -
Spark SQL 源码分析之 In-Memory Columnar Storage 之 in-memory query
前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的。 那么基于以上存储结构,我们查询cache在jvm内的数据又是如何查询的,本文将揭示查询In-Memory Data的方式。一、引子本例使用hive console里查询cache后的src表。select value from src当我们将src表cache到了内存后,再次查询src,可以通过analyzed执行计划来观察内部调用。即parse后,会形成InMemor..原创 2020-07-31 00:29:17 · 257 阅读 · 0 评论 -
Spark SQL 源码分析之 In-Memory Columnar Storage 之 cache table
Spark SQL 可以将数据缓存到内存中,我们可以见到的通过调用cache table tableName即可将一张表缓存到内存中,来极大的提高查询效率。 这就涉及到内存中的数据的存储形式,我们知道基于关系型的数据可以存储为基于行存储结构 或 者基于列存储结构,或者基于行和列的混合存储,即Row Based Storage、Column Based Storage、 PAX Storage。 Spark SQL 的内存数据是如何组织的? Spark SQL 将数据加载到内存是...原创 2020-07-30 15:53:24 · 696 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之UDF
在SQL的世界里,除了官方提供的常用的处理函数之外,一般都会提供可扩展的对外自定义函数接口,这已经成为一种事实的标准。 在前面Spark SQL源码分析之核心流程一文中,已经介绍了Spark SQL Catalyst Analyzer的作用,其中包含了ResolveFunctions这个解析函数的功能。但是随着Spark1.1版本的发布,Spark SQL的代码有很多新完善和新功能了,和我先前基于1.0的源码分析多少有些不同,比如支持UDF:spark1.0及以前的实现:...原创 2020-07-30 15:52:44 · 320 阅读 · 0 评论 -
Spark SQL 源码分析之Physical Plan 到 RDD的具体实现
接上一篇文章Spark SQL Catalyst源码分析之Physical Plan,本文将介绍Physical Plan的toRDD的具体实现细节: 我们都知道一段sql,真正的执行是当你调用它的collect()方法才会执行Spark Job,最后计算得到RDD。 lazy val toRdd: RDD[Row] = executedPlan.execute() Spark Plan基本包含4种操作类型,即BasicOperator基本类型,还有就是Join、Aggregate和S...原创 2020-07-30 15:52:06 · 510 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之Physical Plan
前面几篇文章主要介绍的是spark sql包里的的spark sql执行流程,以及Catalyst包内的SqlParser,Analyzer和Optimizer,最后要介绍一下Catalyst里最后的一个Plan了,即Physical Plan。物理计划是Spark SQL执行Spark job的前置,也是最后一道计划。 如图:一、SparkPlanner话接上回,Optimizer接受输入的Analyzed Logical Plan后,会有SparkPlanner来对Opti...原创 2020-07-30 15:51:26 · 442 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之Optimizer
/**Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程、SqlParser,和Analyzer以及核心类库TreeNode,本文将详细讲解Spark SQL的Optimizer的优化思想以及Optimizer在Catalyst里的表现方式,并加上自己的实践,对Optimizer有一个直观的认识。 Optimizer的主要职责是将Analyzer给Resolved的Logical Plan根据不同的优化策略Batch,来对语法树进行优...原创 2020-07-30 15:50:40 · 326 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之TreeNode Library
/**Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程、SqlParser,和Analyzer,本来打算直接写Optimizer的,但是发现忘记介绍TreeNode这个Catalyst的核心概念,介绍这个可以更好的理解Optimizer是如何对Analyzed Logical Plan进行优化的生成Optimized Logical Plan,本文就将TreeNode基本架构进行解释。 一、TreeNode类型 ...原创 2020-07-30 15:49:37 · 374 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之Analyzer
/**Spark SQL源码分析系列文章*/ 前面几篇文章讲解了Spark SQL的核心执行流程和Spark SQL的Catalyst框架的Sql Parser是怎样接受用户输入sql,经过解析生成Unresolved Logical Plan的。我们记得Spark SQL的执行流程中另一个核心的组件式Analyzer,本文将会介绍Analyzer在Spark SQL里起到了什么作用。 Analyzer位于Catalyst的analysis package下,主要职责是将Sql Pa...原创 2020-07-30 15:48:43 · 391 阅读 · 0 评论 -
Spark SQL Catalyst源码分析之SqlParser
/**Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责。 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍。一、SQL Parser入口 Sq...原创 2020-07-30 15:48:05 · 393 阅读 · 0 评论 -
Spark SQL源码分析之核心流程
/**Spark SQL源码分析系列文章*/ 自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几人到了几十人,而且发展速度异常迅猛,究其原因,个人认为有以下2点: 1、整合:将SQL类型的查询语言整合到 Spark 的核心RDD概念里。这样可以应用于多种任务,流处理,批处理,包括机器学习里都可以引入Sql。 2、效率:因为Shark受到hive的编程模型限制,无法再继续优化来...原创 2020-07-30 15:47:08 · 160 阅读 · 0 评论 -
Spark详解(十四):Spark SQL的Join实现
1. 简介Join是SQL语句中的常用操作,良好的表结构能够将数据分散在不同的表中,使其符合某种范式,减少表冗余、更新容错等。而建立表和表之间关系的最佳方式就是Join操作。Join连接是大数据处理的重要手段,它基于表之间的共同字段将来自两个或多个表的行结合起来。如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的。2. Join的基本要素如下图所示,Join大致包括三个要素:Join方原创 2020-07-30 01:53:39 · 2017 阅读 · 0 评论 -
spark 读取 hdfs 数据分区规则
下文以读取 parquet 文件 / parquet hive table 为例:hive metastore 和 parquet 转化的方式通过 spark.sql.hive.convertMetastoreParquet 控制,默认为 true。如果设置为 true ,会使用 org.apache.spark.sql.execution.FileSourceScanExec ,否则会使用 org.apache.spark.sql.hive.execution.HiveTableScanExec。原创 2020-07-27 19:16:03 · 1095 阅读 · 2 评论 -
spark 处理avro
<dependency><groupId>io.confluent</groupId><artifactId>kafka-avro-serializer</artifactId><version>3.0.0</version></dependency>原创 2020-07-20 17:43:45 · 239 阅读 · 0 评论 -
spark代码执行过程(Driver , Execute)
我们自己编写了spark代码后;放到集群中一执行,就会出现问题,没有序列化、指定的配置文件不存在、classnotfound等等。这其实很多时候就是因为我们对自己编写的spark代码执行流程的不熟悉导致的,源码阅读可以解决,但源码不是每个人都能看懂或能看进去的,下面我们就来讲一下,我们自己写的spark代码究竟是这么执行的。从执行的过程可分为三个部分来分析main方法,RDD处理方法,DStream处理方法,从执行的JVM虚拟机可以分为两个部分driver端,worker端一、main方法mai原创 2020-07-16 02:05:30 · 919 阅读 · 0 评论 -
Flink与Spark Streaming在与kafka结合的区别!
本文主要是想聊聊flink与kafka结合。当然,单纯的介绍flink与kafka的结合呢,比较单调,也没有可对比性,所以的准备顺便帮大家简单回顾一下Spark Streaming与kafka的结合。看懂本文的前提是首先要熟悉kafka,然后了解spark Streaming的运行原理及与kafka结合的两种形式,然后了解flink实时流的原理及与kafka结合的方式。kafkakafka作为一个消息队列,在企业中主要用于缓存数据,当然,也有人用kafka做存储系统,比如存最近七天的数据。kaf原创 2020-07-16 01:28:55 · 1174 阅读 · 0 评论 -
Scala之 闭包
定义 函数在变量不处于其有效作用域时,还能够对变量进行访问,即为闭包;也就是说,变量超出了其作用域,还可以使用,就是闭包现象。 可能针对的使用场景之一? 比方说,年底了,公司针对每个部门的奖金是不同。比方说,销售部门奖金为10000,研发部门是15000,测试部门12000等,就可以使用闭包来实现例子,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14..原创 2020-07-12 00:30:26 · 488 阅读 · 0 评论 -
spark自定义监听器
Spark application 支持自定义listener,用户可以实时获取任务状态给自己的监控系统,可以获取以下几个状态:trait SparkListener { /** * 当一个state执行成功或者失败的时候调用,包含了已完成stage的信息 * Called when a stage completes successfully or fails, with information on the completed stage. */ def onStageC...原创 2020-05-24 19:35:31 · 890 阅读 · 0 评论 -
spark为每一个task分配多少内存
nohup spark-submit --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 4 --num-executors 8 --conf "spark.default.parallelism=72" --conf "spark.streaming.kafka....原创 2020-04-11 22:46:13 · 1409 阅读 · 0 评论 -
spark streaming动态修改广播变量
在 foreach rdd中执行,重新广播。可以基于job 批次数量 或者是 时间 public class BroadcastStringPeriodicUpdater { private static final int PERIOD = 60 * 1000; private static volatile BroadcastStringPeriodicUpdater instan...原创 2020-04-15 22:41:55 · 1499 阅读 · 0 评论 -
spark streaming每次从kafka拉取多少数据
spark streaming每个 job的数据量 与以下几个参数有关。1. 批次间隔时间,例如5秒拉取一次2. 自己配置的 每个partition 一次最少拉取的条数假设5秒一个批次 ,kafka 5个partition,配置每个partition最少拉取1000条那么最终一个Job中的数据条数 25000条(1000*5*5)(正常情况下)。如果kafka有数据堆积,比如...原创 2020-04-11 22:54:11 · 4043 阅读 · 2 评论 -
Spark中parallelize函数和makeRDD函数的区别
我们知道,在Spark中创建RDD的创建方式大概可以分为三种:(1)、从集合中创建RDD;(2)、从外部存储创建RDD;(3)、从其他RDD创建。 而从集合中创建RDD,Spark主要提供了两中函数:parallelize和makeRDD。我们可以先看看这两个函数的声明:[plain] view plain copy print?d转载 2017-04-01 10:29:34 · 2779 阅读 · 0 评论 -
Spark算子:RDD基本转换操作(7)–zipWithIndex、zipWithUniqueId
关键字:Spark算子、Spark RDD基本转换、zipWithIndex、zipWithUniqueIdzipWithIndexdef zipWithIndex(): RDD[(T, Long)]该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。scala> var rdd2 = sc.makeRDD(Seq("A","B","R","D",转载 2017-04-01 10:24:58 · 1482 阅读 · 0 评论 -
Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
关键字:Spark算子、Spark RDD基本转换、map、flatMap、distinctmap将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区。hadoop fs -cat /tmp/lxw1234/1.txthello worldhello sparkhello hive //转载 2017-04-01 09:45:04 · 327 阅读 · 0 评论 -
spark stage 中的CallSite
先看源码注释中的内容CallSite represents a place in user code. It can have a short and a long form. /* CallSite表示用户代码中的一个位置。它可以有短的和长的形式。 */实际去debug一个案例 查看,callsite中存储了哪些内容。下边两张图为自己的代码。下边一张图为stage的内容。正如注释写的一样 ,callsite 分为log和short。名字为logfrom ...原创 2020-06-16 17:23:10 · 450 阅读 · 0 评论 -
spark源码:怎么确定算子是否会shuffle
网上已经有很多博客总结过会产生shuffle的算子,DAGScheduler根据 宽窄依赖/shuffle 来划分stage。那么怎么判定算子会shuffle呢。org.apache.spark.rdd OrderedRDDFunctions通过这个类可以看出。这些个算子会发生shuffle。 共性特征为 new shuffled rdd。...原创 2020-06-11 18:17:23 · 923 阅读 · 0 评论 -
spark shuffle及shuffle类的算子
Spark Shuffle操作的两个特点第一个特点,在Spark早期版本中,那个bucket缓存是非常非常重要的,因为需要将一个ShuffleMapTask所有的数据都写入内存缓存之后,才会刷新到磁盘。但是这就有一个问题,如果map side数据过多,那么很容易造成内存溢出。所以spark在新版本中,优化了,默认那个内存缓存是100kb,然后呢,写入一点数据达到了刷新到磁盘的阈值之后,就会将数据一点一点地刷新到磁盘。这种操作的优点,是不容易发生内存溢出。缺点在于,如果内存缓存过小的话,那么可能发生过多原创 2020-06-11 18:00:08 · 1494 阅读 · 0 评论 -
spark cach() persist() checkpoint()的区别
cache()与persist():会被重复使用的(但是)不能太大的RDD需要cache。cache 只使用 memory,写磁盘的话那就叫 checkpoint 了。 哪些 RDD 需要 checkpoint?运算时间很长或运算量太大才能得到的 RDD,computing chain 过长或依赖其他 RDD 很多的 RDD。 实际上,将 ShuffleMapTask 的输出结果存放到本地磁盘也算是 checkpoint,只不过这个 checkpoint 的主要目的是去 partition 输出数据。c原创 2020-06-11 17:25:58 · 151 阅读 · 0 评论 -
spark shuffle和宽窄依赖的关系
前言stage作为是Spark应用程序的调度任务划分模块,对它的理解有助你提高编写Spark代码的编写,说到底想要玩好Spark,就要玩好RDD。宽窄依赖宽依赖:1.父类RDD的一个分区上的数据对应承接给同一个子类RDD的多个分区——即RDD是1对1,但分区是1对多。2.父类RDD的一个分区上的数据对应承接给多个子类RDD的一个或多个分区——即RDD是1对多,但分区是1对1,也可以是1对多。窄依赖:1.父类RDD的一个分区上的数据对应承接给唯一...原创 2020-06-11 17:06:59 · 733 阅读 · 0 评论 -
spark map flatMap flatMapToPair mapPartitions 的区别和用途
import akka.japi.Function2;import org.apache.spark.HashPartitioner;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import o转载 2017-03-23 13:02:27 · 1573 阅读 · 0 评论 -
深入理解groupByKey、reduceByKey
在Spark中,我们知道一切的操作都是基于RDD的。在使用中,RDD有一种非常特殊也是非常实用的format——pair RDD,即RDD的每一行是(key, value)的格式。这种格式很像Python的字典类型,便于针对key进行一些处理。针对pair RDD这样的特殊形式,spark中定义了许多方便的操作,今天主要介绍一下reduceByKey和groupByKey,转载 2017-03-23 13:50:19 · 415 阅读 · 0 评论 -
Spark优化-troubleshooting-解决yarn-cluster模式的JVM栈内存溢出问题
troubleshooting 解决yarn-cluster模式的JVM栈内存溢出问题大公司里面你的机器节点一般都是虚拟机啊!所以yarn-client会有网络激增的问题!Yarn-client模式可以跑,但是Yarn-cluster模式不能跑,就是报那么一个JVM永久代溢出的那么一个问题!1,spark-submit脚本提交spark application到原创 2017-03-09 10:01:55 · 961 阅读 · 0 评论 -
算子优化 MapPartitions
算子优化 MapPartitionsspark中,最基本的原则,就是每个task处理一个RDD的partition。MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task仅仅会执行一次functio原创 2017-03-08 20:39:51 · 1894 阅读 · 0 评论 -
Spark需要改进的点整理
1.主要还是内存问题基于JVM的大数据程序都很难避开资源管理或者内存管理这个问题(a) JVM的内存overhead太大,1G的数据通常需要消耗5G的内存 -> Project Tungsten 正试图解决这个问题;(b) 不同的spark app之间缺乏有效的共享内存机制 -> Project Tachyon 在试图引入分布式的内存管理,这样不同的spark app可以共享缓原创 2017-03-10 12:42:19 · 1627 阅读 · 0 评论 -
Spark优化-优化数据结构
优化数据结构Java中,有三种类型比较耗费内存:对象,每个Java对象都有对象头、引用等额外的信息,因此比较占用内存空间。字符串,每个字符串内部都有一个字符数组以及长度等额外信息。集合类型,比如HashMap、LinkedList等,因为集合类型内部通常会使用一些内部类来封装集合元素,比如Map.Entry。因此Spark官方建议,在Spark编码实现中原创 2017-03-09 11:19:25 · 441 阅读 · 0 评论 -
性能调优-广播大变量
性能优化:广播大变量!从这往后讲的都是性能调优的小的技术点,可能总共30分钟作业!小的点你用一个减少1分钟!用户访问session分析模块中的,按时间比例随机抽取这里随机抽取出来的dateHourExtractMap做成了final,然后每个task根据随机抽取map进行抽取了,是不是用到了我们的dateHourExtractMap,默认原创 2017-03-09 00:10:00 · 394 阅读 · 0 评论 -
Spark性能调优-调节executor堆外内存
调节executor堆外内存spark底层shuffle的传输方式是使用netty传输,netty在进行网络传输的过程会申请堆外内存,所以使用了堆外内存!什么时候需要调节Executor的堆外内存大小?当出现一下异常时:shuffle file cannot find,executor lost、task lost,out of memory出现这种问题原创 2017-03-08 21:34:53 · 1730 阅读 · 0 评论 -
性能优化-使用高性能的库fastutil
性能优化:使用高性能的库fastutilfastutil介绍:fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue;fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来原创 2017-03-08 21:26:13 · 7140 阅读 · 0 评论 -
性能调优-shuffle调优
shuffle调优什么情况下会发生shuffle,然后shuffle的原理是什么?在spark中,主要是以下几个算子:groupByKey、reduceByKey、countByKey、join,等等。什么是shuffle?groupByKey,要把分布在集群各个节点上的数据中的同一个key,对应的values,都给集中到一块儿,集中到集群中同一原创 2017-03-08 21:20:55 · 1682 阅读 · 0 评论 -
性能调优-给spark作业分配更多的资源
性能调优:给spark作业分配更多的资源!1,分配更多资源!性能优化王道就是给更多资源!机器更多了,CPU更多了,内存更多了分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来原创 2017-03-08 20:57:10 · 475 阅读 · 0 评论