
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.youkuaiyun.com/oopsoom/article/details/42061077)一、Sources包核心 Spark SQL在Spark1.2中提供了...原创 2020-07-31 00:30:01 · 434 阅读 · 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 · 297 阅读 · 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 · 769 阅读 · 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 · 374 阅读 · 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 · 602 阅读 · 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 · 493 阅读 · 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 · 384 阅读 · 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 · 457 阅读 · 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 · 446 阅读 · 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 · 441 阅读 · 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 · 184 阅读 · 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 · 2111 阅读 · 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 · 1168 阅读 · 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 · 267 阅读 · 0 评论 -
spark代码执行过程(Driver , Execute)
我们自己编写了spark代码后;放到集群中一执行,就会出现问题,没有序列化、指定的配置文件不存在、classnotfound等等。这其实很多时候就是因为我们对自己编写的spark代码执行流程的不熟悉导致的,源码阅读可以解决,但源码不是每个人都能看懂或能看进去的,下面我们就来讲一下,我们自己写的spark代码究竟是这么执行的。从执行的过程可分为三个部分来分析main方法,RDD处理方法,DStream处理方法,从执行的JVM虚拟机可以分为两个部分driver端,worker端一、main方法mai原创 2020-07-16 02:05:30 · 963 阅读 · 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 · 1223 阅读 · 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 · 525 阅读 · 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 · 512 阅读 · 0 评论 -
spark源码:怎么确定算子是否会shuffle
网上已经有很多博客总结过会产生shuffle的算子,DAGScheduler根据 宽窄依赖/shuffle 来划分stage。那么怎么判定算子会shuffle呢。org.apache.spark.rdd OrderedRDDFunctions通过这个类可以看出。这些个算子会发生shuffle。 共性特征为 new shuffled rdd。...原创 2020-06-11 18:17:23 · 1006 阅读 · 0 评论 -
spark shuffle及shuffle类的算子
Spark Shuffle操作的两个特点第一个特点,在Spark早期版本中,那个bucket缓存是非常非常重要的,因为需要将一个ShuffleMapTask所有的数据都写入内存缓存之后,才会刷新到磁盘。但是这就有一个问题,如果map side数据过多,那么很容易造成内存溢出。所以spark在新版本中,优化了,默认那个内存缓存是100kb,然后呢,写入一点数据达到了刷新到磁盘的阈值之后,就会将数据一点一点地刷新到磁盘。这种操作的优点,是不容易发生内存溢出。缺点在于,如果内存缓存过小的话,那么可能发生过多原创 2020-06-11 18:00:08 · 1540 阅读 · 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 · 191 阅读 · 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 · 804 阅读 · 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 · 982 阅读 · 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 · 1542 阅读 · 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 · 4125 阅读 · 2 评论 -
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 · 1474 阅读 · 0 评论 -
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 · 2841 阅读 · 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 · 1504 阅读 · 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 · 350 阅读 · 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 · 427 阅读 · 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 · 1608 阅读 · 0 评论 -
Spark需要改进的点整理
1.主要还是内存问题基于JVM的大数据程序都很难避开资源管理或者内存管理这个问题(a) JVM的内存overhead太大,1G的数据通常需要消耗5G的内存 -> Project Tungsten 正试图解决这个问题;(b) 不同的spark app之间缺乏有效的共享内存机制 -> Project Tachyon 在试图引入分布式的内存管理,这样不同的spark app可以共享缓原创 2017-03-10 12:42:19 · 1679 阅读 · 0 评论 -
Spark优化-优化数据结构
优化数据结构Java中,有三种类型比较耗费内存:对象,每个Java对象都有对象头、引用等额外的信息,因此比较占用内存空间。字符串,每个字符串内部都有一个字符数组以及长度等额外信息。集合类型,比如HashMap、LinkedList等,因为集合类型内部通常会使用一些内部类来封装集合元素,比如Map.Entry。因此Spark官方建议,在Spark编码实现中原创 2017-03-09 11:19:25 · 467 阅读 · 0 评论 -
Spark优化-优化原则
1、避免创建重复的RDD val rdd1 = sc.textFile("hdfs://ip:port/log.txt") val rdd2 = sc.textFile("hdfs://ip:port/log.txt") (1)对于业务逻辑比较复杂的情况,那么就会产生rdd串比较长,会忘记之前是否创建过相同的RDD。 (2)对于初学者可能会犯这样的错误2、尽量复用同原创 2017-03-09 11:16:46 · 410 阅读 · 0 评论 -
Spark优化-数据倾斜解决方案 提高shuffle操作reduce并行度
数据倾斜解决方案 提高shuffle操作reduce并行度 方案实现思路:在对RDD执行shuffle算子时,给shuffle算子传入一个参数,比如reduceByKey(1000),该参数就设置了这个shuffle算子执行时shuffle read task的数量。对于Spark SQL中的shuffle类语句,比如group by、join等,需要设置一个参数,即sp原创 2017-03-09 11:12:25 · 2069 阅读 · 0 评论 -
Spark优化-数据倾斜解决方案 聚合源数据以及过滤导致倾斜的key
数据倾斜解决方案 聚合源数据以及过滤导致倾斜的key第一个方案:聚合源数据第二个方案:过滤导致倾斜的key第一个方案:聚合源数据1,每个KEY在HIVE ETL中变成一条数据,彻底解决spark都不用做groupByKey2,如果有好几个粒度,尽量粗粒度的聚合一下,减轻症状,spark聚合的时候减轻症状咱们现在,做一些聚合的操原创 2017-03-09 11:01:00 · 816 阅读 · 0 评论 -
Spark调优-数据倾斜-四个解决方案
A,数据倾斜解决方案 使用随机key实现双重聚合使用随机key实现双重聚合1、原理这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello, 1) (hello, 1) (hello, 1) (hello, 1),就会变成(1_hello, 1) (1_he原创 2017-03-09 10:41:29 · 1374 阅读 · 0 评论 -
Spark调优-数据倾斜解决方案 原理及现象分析
数据倾斜解决方案 原理及现象分析项目,第一个模块,用户访问session分析模块1、大数据开发流程(需求分析。。。性能调优)2、用户行为分析的业务(聚合统计、随机抽取、topn、排序)3、技术点:大数据项目模块的技术架构、spark core各种算子、自定义Accumulator、随机抽取算法、分组取topn、二次排序4、大数据项目中的性能调优和troubl原创 2017-03-09 10:16:04 · 680 阅读 · 0 评论 -
Spark优化-troubleshooting 解决算子函数返回NULL导致问题
troubleshooting 解决算子函数返回NULL导致问题在算子函数中,返回nullreturn actionRDD.mapToPair(new PairFunction() {private static final long serialVersionUID = 1L;@Overridepublic Tuple2 call(Row row)原创 2017-03-09 10:08:30 · 459 阅读 · 0 评论 -
Spark优化-troubleshooting-解决各种序列化导致的错误
troubleshooting 解决各种序列化导致的错误你会看到什么样的序列化导致的报错?用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。序原创 2017-03-09 10:04:54 · 511 阅读 · 0 评论