spark
文章平均质量分 75
涛声依旧(竞涛)
乘风破浪,涛声依旧
展开
-
Livy任务提交源码解析
文章目录简介任务路由代码断任务远程Driver上建立RpcServerLivyServer接收客户端提交代码断任务LivyServer向远程Driver的RpcServer提交任务远程Driver的RpcServer接收任务Driver执行代码断任务Batch任务LivyServer接收batch任务创建BatchSession以提交Spark任务创建SparkYarnApp实例以操作远程Spark任务简介Livy是基于Spark的开源REST服务,它能够通过REST的方式将代码段或是序列化的二进制代码原创 2021-06-01 09:45:55 · 907 阅读 · 0 评论 -
SparkSQL & ClickHouse RoaringBitmap使用实践
文章目录简介ClickHouse简介RoaringBitmap(RBM)原理ClickHouse中使用RBM存在的问题RoaringBitmap(RBM)定制序列化实现ClickHouse中RoaringBitmap的结构解析Spark中RoaringBitmap的实现定制RBM序列化方式以兼容ClickHouseByte(1) - 类型标识生成VarInt(SerializedSizeInBytes) - 序列化后的字节长度ByteArray(RoaringBitmap) - RBM序列化定制序列化的整体原创 2020-12-10 21:47:42 · 8551 阅读 · 21 评论 -
SparkSQL自定义bitmap udf操作函数
文章目录简介源码实现SparkSQL使用示例简介Bitmap是用来实现基数统计的一种常用方法,它可以实现精确的基数统计。为了提高bitmap对稀疏位图的压缩率,提出了RoaringBitmap(RBM)对稀疏位图进行压缩,减少了内存占用并提高了使用效率。在Java中实现RBM的常用库是RoaringBitmap,其已经在Spark、Kylin和Druid等系统中得到了应用。那是不是可以将RoaringBitmap库封装成SparkSQL的udf函数,从而可以对bitmap结构数据进行方便的计算操作,实原创 2020-11-30 09:45:34 · 2534 阅读 · 3 评论 -
spark-alchemy中的HyperLogLog功能使用实践
文章目录简介添加maven包依赖准备测试数据创建Hive表存储中间结果SparkSQL向表中写入数据从表中读数据进行计算简介利用HyperLogLog算法计算UV类指标是一种常用的方案。在spark中的approx_count_distinct函数就是基于HyperLogLog实现的,但其每次都需要从原始明细的数据进行计算,无法从中间结果进行再聚合。预先聚合是一种常用高性能分析的手段,可以极大地减少数据量。由于Spark没有提供相应功能,Swoop 开源了高性能的HLL native函数工具包,作为 s原创 2020-11-25 09:13:32 · 636 阅读 · 0 评论 -
SparkStreaming执行过程分析
文章目录简介启动流计算引擎StreamingContext.start启动流计算JobScheduler.start启动Job调度器接收并存储数据Driver端初始化ReceiverTrackerDriver端封装Receiver为RDD,提交Spark Job运行以启动receiverExecutor端启动Receiver并接收存储数据启动BlockGenerator接收并存储block数据启动Receiver接收数据Receiver将接收到的Block存储到BlockGenerator中生成Batch原创 2020-11-07 19:14:14 · 590 阅读 · 1 评论 -
OLAP查询数据量预估的解决方案
文章目录<1%的“异常”查询影响OLAP引擎的稳定性基于规则判断的方式比较粗糙,只能解决部分问题借鉴数据库Query Optimizer思想建立查询成本指标扫描数据量预估返回结果集预估返回结果集基数预估的修正确定成本阈值基于SparkSQL的实现方案统计每个时间片中数据总行数统计每列数据的直方图信息后记多OLAP引擎联合支撑基于HyperLogLog算法预估结果集基数随着用户分析数据量的急剧增长与用户多维实时交互分析数据的需求,OLAP引擎成了交互式数据分析的标配。<1%的“异常”查询影响O原创 2020-11-01 17:26:04 · 2011 阅读 · 4 评论 -
Spark Shuffle机制解析
文章目录Shuffle简介与其发展Shuffle机制的实现ShuffleManager接口简介ShuffleManager的创建具体实现类SortShuffleManagerregisterShuffle方法getWriter方法getReader方法Shuffle Writer过程解析数据聚合与排序聚合排序溢写磁盘数据合并与持久化生成索引文件Shuffle Reader过程解析获取map任务输出的位置信息获取blocks数据划分本地与远程Block获取远程Block获取本地Blockreduce端聚合数据原创 2020-10-15 09:38:42 · 621 阅读 · 1 评论 -
块管理器BlockManager
文章目录简介BlockManager的创建BlockManager的注册Master与Slave间的消息类型BlockManagerMasterEndpoint接收的消息BlockManagerSlaveEndpoint接收的消息BlockManager的存储实现DiskStoreMemoryStore简介Spark中的RDD-Cache、Shuffle-output以及broadcast的存...原创 2019-11-23 22:20:16 · 463 阅读 · 0 评论 -
Spark内存存储MemoryStore & 磁盘存储DiskStore
文章目录简介内存存储MemoryStore数据存储方法putBytes数据存储方法putIteratorAsValues & putIteratorAsBytes获取内存数据方法getBytes & getValues磁盘存储DiskStoreNIO读取方法getBytesNIO写入方法putBytes & put简介BlockManager中block的实际存储是由M...原创 2019-11-17 12:32:08 · 642 阅读 · 0 评论 -
Apache Hadoop YARN:另一个资源协调者
文章目录摘要1. 引言2. 历史和基本原理2.1 专用集群的时代2.2 Hadoop on Demand的缺点2.3 共享集群3. 架构3.1 概述3.2 Resource Manager (RM)3.3 Application Master (AM)3.4 Node Manager (NM)3.5 YARN框架/应用程序写入者3.6 容错能力和可用性4. 现实中的YARN4.1 Yahoo!上...翻译 2019-11-16 18:38:52 · 709 阅读 · 0 评论 -
GFS:Google文件系统
文章目录摘要分类和主题描述通用术语关键词1. 简介2. 设计概览2.1 假设2.2 接口2.3 架构2.4 单一Master2.5 块大小2.6 元数据2.6.1 内存数据结构2.6.2 块位置2.6.3 操作日志2.7 一致性模型2.7.1 GFS的一致性保证2.7.2 对应用的影响3. 系统交互3.1 租约和变化顺序3.2 数据流3.3 原子的记录追加3.4 快照4. master操作4.1 ...翻译 2019-08-22 17:57:38 · 1172 阅读 · 0 评论 -
MapReduce:大型集群上简便的数据处理
文章目录摘要1. 简介2. 编程模型2.1 示例2.2 类型2.3 更多示例3. 实现3.1 执行概述3.2 主数据结构3.3 容错Worker故障Master故障存在失败的语义3.4 本地化3.5 任务粒度3.6 备份任务4. 优化4.1 分区函数4.2 排序保证4.3 Combiner函数4.4 输入和输出类型4.5 副作用4.6 跳过错误记录4.7 本地执行4.8 状态信息4.9 计数器5....翻译 2019-08-14 09:37:55 · 1678 阅读 · 0 评论 -
Spark:使用工作集的集群计算
文章目录摘要1. 简介2. 编程模型2.1 弹性分布式数据集(RDD)2.2 并行操作2.3 共享变量3. 示例3.1 文本搜索3.2 逻辑回归3.3 交替的最小二乘4. 实现4.1 共享变量4.2 编译器集成5. 成果5.1 逻辑回归5.2 交替的最小二乘5.3 交互式Spark6. 相关工作6.1 分布式共享内存6.2 集群计算框架6.3 语言集成6.4 血缘7. 讨论及未来的工作8. 致谢参...翻译 2019-08-09 10:38:58 · 672 阅读 · 1 评论 -
Spark Streaming中维度管理器实现
文章目录简介设计常规方法存在的问题通用的方法实现获取最新分区数据加载小结简介数据可以分为两大类:维度数据和事实数据。在数据仓库中最常用的是星型结构(即1事实表 + N维表),因此在处理过程中,关联维表是不可避免的。通常需要将事实数据与维度数据关联,以获取想要的维度列。在批处理类计算任务中,只要在需要时将维度数据读取出来然后按正常的计算流程去关联即可。但是在流式实时任务中,如果还是在每个bat...原创 2019-08-04 18:51:10 · 1077 阅读 · 0 评论 -
BlockManagerMaster对BlockManager的管理
文章目录简介创建实现BlockManagerMasterEndpoint消息类型时序图BlockManagerSlaveEndpoint消息类型时序图简介BlockManagerMaster负责对Executor上的BlockManager的管理和协调,具体操作依赖于BlockManagerMasterEndpoint。Driver上的BlockManagerMaster对存在于Executo...原创 2019-06-02 21:03:09 · 500 阅读 · 0 评论 -
磁盘块管理器DiskBlockManager
文章目录简介创建主要成员主要功能创建本地目录获取BlockId对应的文件路径查询BlockId对应的文件是否存在创建临时Block文件简介DiskBlockManager主要用来创建并持有逻辑blocks块与物理磁盘位置之间的映射。逻辑block块通过其BlockId映射到一个磁盘上的文件。Block块文件被hash存储到spark.local.dir(或SPARK_LOCAL_DIRS)配置...原创 2019-06-02 17:55:14 · 285 阅读 · 0 评论 -
Spark OLAP on Nested Structure Data
文章目录引言将原始数据转换为DataFrame定义数据格式读取数据为RDD将RDD[Protobuf]转换为DataFrame展平嵌套结构数据常规方法自动展平自动解析sql获取使用列获取select和aggregate列获取filter列测试获取数据源获取数据时间小结引言大多数系统中,采集的原始日志数据往往都是半结构化或者非结构化的。而对于数据分析人员来说,每次写代码去处理原始数据不够高效且有...原创 2019-05-26 20:13:23 · 332 阅读 · 0 评论 -
shuffle服务与客户端
文章目录简介UML类图创建过程实现ShuffleClient接口定义抽象类块传输服务BlockTransferService实现类NettyBlockTransferService初始化RPC服务RpcServer传输上下文TransportContextRPC客户端工厂TransportClientFactoryNetty服务器TransportServer获取远程shuffle文件上传shuf...原创 2019-05-25 12:21:56 · 514 阅读 · 0 评论 -
Spark streaming always zero input rate
前面在运行spark streaming任务时,发现一个很奇怪的问题:在web ui的streaming监控界面上的input rate一直为0,显示接收到的records也一直为0,但是任务却有数据输出,且生成数据正常。下面是问题查找之路:确认输入输出数据:对任务的输出数据进行验证,发现数据生成正确。检查任务的输入数据,发现输入数据也正常。理解监控界面的指标含义:input ra...原创 2018-07-16 20:24:47 · 657 阅读 · 2 评论 -
Spark简介与优化
针对前面对spark的学习与调优的经验,总结了一下spark的简介和任务优化PPT,主要分为四个部分:1. spark简介;2. spark运行原理;3. spark任务优化;4. spark小结。spark 简介Apache spark是一个围绕速度、易用性和复杂分析构建的大数据计算框架。 Scala是函数式语言,适合数据处理编程,并且其运行在 JVM 之上,可利用java生...原创 2018-07-17 18:35:27 · 801 阅读 · 0 评论 -
Spark Cache的几点思考
Spark Cache的几点思考Spark涵盖了大数据领域内的离线批处理、流式计算、机器学习和图计算等不同的场景,已经成为大数据计算领域首选的计算框架。由于spark框架的应用越来越广,针对spark任务的优化成为必不可少的一项技能,其中cache是一种简单而有效的方式。相信用spark开发的人都知道如何使用cache,但你真的对cache的以下几个问题的答案都非常清楚吗?为什么要cac...原创 2018-09-02 21:28:26 · 12547 阅读 · 2 评论 -
Spark UI实现原理与事件监听机制
Spark UI实现原理与事件监听机制一、引言Spark UI是了解spark任务运行情况的入口,也是进行spark任务性能优化与调试必不可少的工具。在Spark UI中可以查看job、stage、storage、environment、excutors和spark sql等信息,那么这都是怎么实现的,这些信息都是怎么获取到的呢?本文从源码的角度对Spark UI的信息获取方式与Spa...原创 2018-09-09 17:57:18 · 1081 阅读 · 0 评论 -
Spark 延时计算原理
Spark 延时计算原理Spark算子主要分为两类:Transformation变换/转换算子:这种变换是延迟计算的,也就是说从一个RDD转换生成另一个RDD的转换操作不是马上执行,需要等到有Action操作的时候才会真正触发运算。Action行动算子:这类算子会触发Spark提交作业(Job),并将数据输出。Spark是延时计算的,只有Action算子才会触发任务的正式执行,那么Sp...原创 2018-11-17 13:26:10 · 1078 阅读 · 0 评论 -
SparkEnv源码解读
SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象。由于local模式下Driver会创建Executor,而cluster模式下Worker启动的CoarseGrainedExecutorBackend进程也会创建Executor,所以SparkEnv存在于Driver或者CoarseGrainedExecutorBackend进程中。下面是SparkE...原创 2019-03-17 11:51:26 · 384 阅读 · 0 评论 -
SparkContext源码解读
SparkContext是Spark的入口,负责连接Spark集群,创建RDD,累积量和广播量等,向集群申请资源与分配任务并监控任务的状态与执行情况。在Yarn-Cluster 模式中Spark任务运行的的整体流程为:Spark客户端向Yarn集群提交应用程序。ResourceManager 收到请求后,在集群中选择一个 NodeManager,并为该应用程序分配一个 Container,在...原创 2019-03-13 11:11:40 · 382 阅读 · 0 评论 -
任务调度器TaskScheduler
TaskScheduler可以看做任务调度的客户端,负责任务的提交,并且请求集群管理器对任务调度。TaskScheduler的类UML图如下,针对不同部署方式会有不同的TaskScheduler与SchedulerBackend进行组合。TaskScheduler类负责任务调度资源的分配,SchedulerBackend负责与Driver、Executor通信收集Executor上分配给该应用的资...原创 2019-03-25 09:54:42 · 5522 阅读 · 0 评论 -
Spark的延迟执行再理解
首先,大家可以猜测下如下代码的执行结果,是否会报错?val df = Seq((0, "ben", "student"),(1, "jim", "teacher")).toDF("id", "name", "job")val df2 = df.select("id", "name")val df3 = df2.filter("job = 'teacher'") // 是否会报错?df3....原创 2019-04-16 09:04:09 · 1336 阅读 · 0 评论 -
Spark环境更新与应用启动
文章目录简介环境更新解析jar包和文件获取环境配置发送环境更新事件应用启动简介在SparkContext的初始化过程中,可能对其环境造成影响,所以需要更新环境,然后再进行应用启动:postEnvironmentUpdate()postApplicationStart()环境更新环境更新前,首先判断taskScheduler是否已经创建完成,如果创建完成了则进行环境更新:解析ja...原创 2019-04-21 16:25:50 · 331 阅读 · 0 评论 -
MetricSystem指标系统
文章目录简介MetricsSystem的创建与启动加载配置文件注册Sources注册并启动Sinks给Sinks增加Jetty的ServletContextHandler简介MetricSystem通过一个特定的Instance创建,由sources和sinks组成,并周期性地将source中的指标数据推送到目标sink中去。MetricSystem使用codahale提供的第三方测量仓库Me...原创 2019-04-14 13:13:06 · 1681 阅读 · 0 评论 -
Executor动态分配实现原理
文章目录简介ExecutorAllocationManager创建和启动相关配置参数简介ExecutorAllocationManager在SparkContext中创建,基于工作负载通过后台定时线程来动态分配、移除Executor资源及取消多余的executor申请。ExecutorAllocationManager保存一个动态目标数量的executor信息,并定时周期同步给cluster ...原创 2019-04-14 16:03:25 · 575 阅读 · 0 评论 -
DAGScheduler详解
文章目录概述基本概念主要功能DAGScheduler类说明Job的提交stage的划分与提交stage的划分创建ResultStage获取或创建父Stage列表获取RDD的所有shuffle依赖列表获取或创建ShuffleMapStage列表获取缺失的祖先Shuffle依赖列表stage的提交提交ResultStage获取stage所有未提交的父Stage列表提交未计算的Task集合将Stage标...原创 2019-04-15 09:12:14 · 4059 阅读 · 0 评论 -
ContextCleaner详解
文章目录简介ContextCleaner类的组成实现ContextCleaner的创建ContextCleaner的启动ContextCleaner的关闭功能清理RDD清理shuffle清理Broadcast数据清理Accumulator数据清理检查点数据简介ContextCleaner用于清理任务执行过程中生成的超出应用范围的RDD、Shuffle、Broadcast、Accumulato...原创 2019-04-19 09:49:37 · 838 阅读 · 0 评论 -
DStream中transform的理解误区与应用
文章目录简介理解上的误区transform vs Transformationtransform中有RDD的action操作transform在每个batch批次间隔间被调用实际应用简介DStream中的transform操作允许运行任何 RDD-to-RDD 函数。它能够被用来应用任何没在 DStream API 中提供的 RDD 操作。它和DStream其他普通的Transformatio...原创 2019-05-06 22:34:34 · 2328 阅读 · 0 评论 -
Spark Web UI详解
Spark Web UI是学习调试spark任务的入口,查看spark UI任务日志也是一项必备技能。但在几番搜索后,一直没能找到全面详细地对如何查看spark Web UI方法的文章,故在查看资料及个人理解的基础上整理了本篇文章,欢迎大家一起交流学习! 下面对spark Web UI的各tab页分别进行介绍:1. Jobs在提交spark任务运行后,日志中会输出tracking UR...原创 2018-07-16 19:06:06 · 19907 阅读 · 0 评论