- 博客(293)
- 资源 (4)
- 收藏
- 关注
原创 Spark 管理和更新Hadoop token 流程
Spark AM 和 Executor 更新收到的 tokens。定时 Refresh tokens。启动 token manager。
2023-09-08 17:58:13 851
原创 Podman QuickStart
版本过低,这个版本的qemu 有Bug。更新Homebrew 后,https://github.com/Homebrew/homebrew-core/blob/master/Formula/qemu.rb 版本升级到。目前DockerHub pull image会限制速度,中科大的mirror 已经暂停外部访问。创建需要pull 的image mirror。之后,就可以pull 对应的 ucloud image mirror。一开始本低 Homebrew 没有更新,podman 依赖的。
2022-12-25 11:08:10 1558
原创 Spark lazy list files 的实现
对于Sparkpartitiontable,在生成HadoopFsRelation时,如果partitionKeyFilters或者subqueryFilters非空的时候,HadoopFsRelation的属性为LazyFileIndex,在最终FileSourceScanExec调用listFiles之前才将LazyFileIndex转换成InMemoryFileIndex。...
2022-07-26 10:34:54 310
原创 Spark External Shuffle Service 实现
ESS 服务启动Executor 向 ESS 注册Executor 的初始化Spark on Yarn 的 Executor 的启动类是 org.apache.spark.executor.YarnCoarseGrainedExecutorBackend。在 run() 方法中初始化 SparkConf, SparkEnv, 然后创建一个名字为 Executor 的 CoarseGrainedExecutorBackend 来接收 RPC 请求。因为 CoarseGrainedExecutor
2022-05-28 00:20:23 833
原创 Spark中Push Based Shuffle实现
Push Based Shuffle 概述正常的 Shuffle 会将Map结果写本地一个data文件,然后还有一个index文件存储每个reduce数据的索引。Pushed Shuffle在Map完成后,将同一个Reduce数据推送到同一个ESS,写到同一个data文件,并用一个index文件存储Map的索引。此外还有一个Meta文件,Server端不断接受Pushed 数据,当Server端接收到的数据大于Chunk size时,会将一批Map 数据当作一个Chunk来处理,并记录在Meta文件中
2022-05-06 11:32:19 1460
原创 Spark 中的 exchange reuse
文章目录说明ReuseExchange 和 ReuseSubquery RuleAE 中 reuse 的实现AE 第一次划分 Stage 并提交执行AE 第二次划分 Stage 并提交执行说明如果一个Query中有重复出现的Exchange或者Subquery, Spark 可以对着一部分进行 Reuse。在 disable AE 时,是通过两个固定的Rule 来改写Plan 来实现 reuse.在 enable AE 时,AE 通过 Stage 的划分和调度,通过特殊的 ReusedStage 来
2022-04-13 19:00:15 1277
原创 Spark Job写文件个数的控制以及小文件合并的一个优化
在大数据领域,平台小文件治理一直是一个非常重要的问题。我司大佬在Spark平台里,在向目标表中增加一个Shuffle,然后在Reduce端合并数据,以实现将小文件合并成大文件,来减少平台中的小文件。我司还对单个任务写HDFS文件个数做了限制,同时限制了单个Task 和 单次Job 可写的HDFS个数限制。通过引入额外Shuffle对写入数据进行合并最终实现效果如下== Optimized Logical Plan ==CreateDataSourceTableAsSelectComman
2022-04-12 19:14:41 2821
原创 使用双数组前缀树来优化字符串匹配
使用前缀树优化字符串匹配传统的字符串匹配有很多的优化算法,包括大名鼎鼎的KMP算法,算法复杂度为O(M + N).对于多路字符串匹配(Multi-Way Pattern Matching),比较出名的算法是 Aho-Corasick 算法。算法根据需要匹配的patterns创建类似于一棵 Trie-Tree 结构,且优化了在算法匹配不上的时候,节点之间的失效转移函数(failure function). 有兴趣的可以看一下一篇 中文博客AC 算法的效率确实非常快,但是在构建AC 自动机的时候,
2022-02-17 21:35:17 601
原创 SQL 在Join 和 Exists查询时对Null 值的处理
文章目录Join 中 null 值的处理In 和 Exists 中 null 值的处理Join 和 Exists 测试准备测试数据Join 测试In 和 Exists 测试最近发现SQL在处理Join 和 父子查询的时候,会对 null 记录做一些很奇怪的处理。根据大佬朱峰的解释,SQL 在当初设计的时候,不是把 null 做为空值来理解的,而是当作 未知 来处理的。所以在后续计算的时候,如发现计算结果 未知 会对记录进行丢弃处理。Join 中 null 值的处理Inner Join: 左右两张表中
2022-01-24 15:48:23 4162 1
原创 KODI 电视版本以及字母插件的安装
文章目录软件的安装KODI 软件配置开启UPNPKODI 官方插件库的安装字母插件安装软件的安装我的电视是创维电视,默认是不能安装外部软件的。可以在电视端开启 ADB,在电脑上提前下载好App,然后通过 adb install xxx.apk 进行安装。当贝软件是不能直接安装的, 一定要记得到官方下载和安装 创维电视版本。 这样再进入当贝软件,就可以下载很多额外的App了通过当贝市场下载的KODI 默认版本是 19., 不知道为什么打开视频的时候特别卡,听从网友建议,在当贝市场,安装的时候选择历史版
2022-01-16 18:26:19 13647
原创 Python3 SimpleHttpServer增加超时功能
之前为了司内的一个小服务需求,使用Python3启动了一个简单的HttpServer: python3 -m http.server 8000 &。可是过一段时间发现这个服务连接不了了。netstat 查看有非常多 connections 存在。所以改写了内置的 SimpleHttpServer, 对每个HttpRequest 实现自动超时,目前看上去Bug fix。python3 server.py 2> stderr.log &import http.serverimpo
2022-01-12 09:22:39 1027
原创 Spark String Decimal类型引起的问题
从Spark 2 到 Spark3 这期间, Spark 对于 String 和 Decimal 类型的比较会自动转换为Double 类型。这样会导致转换后的Filter 无法进行 Data Filter Pushed. 社区相关Ticket:[SPARK-17913][SQL] compare atomic and string type column may return confusing result[SPARK-22469][SQL] Accuracy problem in comp
2021-11-24 11:54:50 3354
原创 Spark AQE DataSkew 处理过程中考虑的一些Case
Spark AQE 在 DataSkew 处理过程中,需要考虑一些边界条件,否则可能会引入一些额外的Shuffle。EnsureRequirements在开始今天的Topic之前,需要先回顾一下 EnsureRequirements, 熟悉的同学请跳过。EnsureRequirements 是为了保证Spark 算子的数据输入要求,在算子之间引入Shuffle的核心工具。outputPartitioning算子的 Partitioning 表示该算子的数据在集群上是如何分布的。SparkPla
2021-11-18 18:25:32 1925
原创 Spark Task的各个动作时间来源以及Task Schedule Delay 问题排查
背景发现线上偶尔会出现一些Spark Task会显示Schedule Delay数分钟甚至十几分钟,所以要排查原因。Task 时间分析以及Schedule Delay计算公式如图所示,时间轴上面的表示Driver 记录到的各个时间,时间轴下面的表示Executor记录到的各个时间。我们反过来,先说 Executor 记录的各个时间,再说Driver记录的各个时间。Executor 中Task运行时间Task 在Executor端运行,有三个时间段,分别是 deserializeTime, ex
2021-11-18 17:38:32 2985 3
原创 玩客云刷机记录
系统刷机玩客云刷机参考教程固件软件打包下载 https://cloud.189.cn/t/6ryUv2aYBvam (访问码:a8ez)根据教程, 对玩客云拆机,自己使用一段短的电线来实现主板上的两个接触点进行短路对刷机软件有要求,我自己在Mac上的刷机软件就无法识别硬件,使用自己十几年前的XP 系统上的刷机软件,成功识别硬件加载系统Img 文件,使用默认选项进行刷机通过 arp -a 保存当前识别的IP, 开启启动刷机后的玩客云,找出开机通电后的玩客云IP, 通过 root / 1234
2021-10-16 23:02:10 4815 3
原创 Spark对 Shuffle MapStatus 信息的处理
文章目录Spark AE 提交 ShuffleQueryStageExec 执行,并返回Futrue对象DagScheduler 收集 Map 执行结果,等待 MapStage执行结束AE 接收并处理 Stage MapOutput 信息MapStatus 对象Spark 3 中的AE会将原始SQL切分成很多QueryStage,在每个QueryStage执行完毕后,针对之前完成的QueryStage执行结果,对QueryPlan进行二次优化。其中二次优化最重要的就是根据之前QueryStage shu
2021-10-11 13:20:26 729
原创 K8S 集群安装和学习
文章目录K8S 集群的安装参考文章操作系统准备查看和升级系统内核安装图形界面配置系统环境变量安装Docker 和 K8S集群初始化添加集群节点检查安装结果Kubernets Dashboard UIExpose ServiceObjects in kubernetesContextNameSpaceDeployment运行Curl PodK8S 集群的安装参考文章操作系统准备查看和升级系统内核详细步骤参考[root@k8s-master k8s]# uname -r3.10.0-1160.el
2021-09-13 16:32:35 248
原创 Prepare and run TPCDS query with spark
文章目录TPCDS 数据生成工具通过 spark-sql-perf 项目生成TPCDS测试数据spark-sql-perf 项目编译sbt-spark-package 插件无法下载生成测试数据注册TPCDS外部表SBT console 无法运行TPCDS 数据生成工具TPC-DS 测试数据的生成依赖tpcds-kit项目, Databricks forks了改项目,并支持将生产的数据写入到Stdout,然后直接生成测试数据。我们需要提前安装好这个工具。git clone https://github.
2021-09-01 20:49:32 1247
原创 Thrift 0.12.0安装和 Parquet-mr 编译
文章目录Thrift 0.12.0 版本安装thrift 版本踩坑编译环境准备升级GCC版本Install BoostInstall libevent编译安装 thrift 0.12.0TroubleShootingerror: no member named 'stdcxx' in namespace 'apache::thrift'fatal error: 'openssl/opensslv.h' file not foundcomposer: No such file or directorygo.m
2021-08-29 11:42:51 1302 1
原创 通过Docker搭建数据库测试环境
环境准备拉取镜像文件docker pull postgres容器后台进程运行,向外暴露5432端口 docker run --name mypostgres -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres . 运行成功后默认数据库登录名、密码皆为postgres,当然也可以手动设置登录名、密码测试SQLCREATE TABLE T1 ( ID INT PRIMARY KEY NOT NULL, NAME
2021-08-20 15:11:38 460 1
原创 SBT 使用踩坑记录
SBT 本身应该还是一个非常优秀的编译工具。就像Scala 对比于 Java ,SBT 对比于 Maven,如果用的好的话,感觉还是好用太多~~ 但是因为国内网络连接不畅,相关资料介绍比较少的缘故,在国内对很多开发同学来说还是有些陌生了。SBT 仓库的问题SBT 是可以复用 Maven 仓库的,但是要合理配置,否则在编译项目的时候,就可能被各种包的下载问题给搞崩溃。配置 ~/.sbt/repositories 仓库列表,国内也有很多介绍配置该文件的博客,但是有很多都是过时的配置,随着时间的更新,建
2021-06-17 17:40:23 831
原创 SparkContext 终止 Task 运行过程及Executor Shutdown 造成 DeadLock 分析
文章目录KillTask 消息从提交到执行的传递流程DAGScheduler 提交 cancel job请求SchedulerBackend 发送Kill消息到 ExecutorExecutor 的 killTask 处理过程TaskRunner 线程的生命周期TaskRunner kill Task过程Executor 在 Shutdown 过程中是如果造成 DeadLock 的CoarseGrainedExecutorBackend 注册Signal事件处理Singnal信号注册ActionHandle
2021-06-11 13:07:09 2177 2
原创 Spark中几种不常见的Join
Semi JOIN : 查询 Left 数据在 Right 中存在的记录,返回 Left 字段Anti JOIN : 查询 Left 数据在 Right 中不存在的记录,返回 Left 字段Cross Join : 这个在Spark的代码里没看出和Inner Join有什么区别,在Spark中有一个Inner Like,就是包含Inner Join 和Cross Join的。。Natual Join : 我们在正常的Join 前面可以加 Natual 关键字,这个时候不能写ON条件,Spark 在 .
2021-05-20 09:44:06 485
原创 权限控制系统设计及Spark SQL 数据权限控制设计
权限控制系统基础权限控制系统设计在OA系统,数据系统中其实都差不多,离不开三级体系设计: Role, User, Principal. 具体叫法在各个系统的实现上会有差别。Role : 多个User 属于一个Role,User 用于Role 的所有权限。User : 系统用户,User 一般我们会做登录鉴权,在权限控制体系中,一般都是用于获取Role 的相关信息Principal : 这个中文不知道怎么翻译,我的理解就是一个具体权限的描述,包括<Role, Object, Privilege
2021-05-18 19:09:40 705
原创 Spark优化包含non deterministic Filter的条件下推
优化代码优化代码,参考: CombineFilters Ruleval applyLocally: PartialFunction[LogicalPlan, LogicalPlan] = { // The query execution/optimization does not guarantee the expressions are evaluated in order. // We only can combine them if and only if both are det
2021-05-12 18:17:57 362
原创 扩展Log4j支持日志文件根据时间分割文件和过期文件自动删除功能
为了实现我们的需求,我们先看一下原始的Log4j 是如何实现日志文件的管理的。RollingFileAppender在log4j中Appender 负责将日志写入日志文件中,实际生产环境中服务长期运行,日志文件会非常多,所以我们一般使用RollingFileAppender 来将日志根据规则进行切割,写入不同的日志文件中。在log4j内置的类是 org.apache.log4j.RollingFileAppender,这个类默认功能比较单一,通过参数 maxBackupIndex 配置Roll
2021-05-12 18:15:37 892
原创 Spark Bucket Table Join
生成Bucket表创建Bucket表方式一spark.sql("DROP TABLE IF EXISTS user1_bucket")spark.sql("DROP TABLE IF EXISTS user2_bucket")val r = new scala.util.Random()val df = spark.range(1, 100).map(i => (i, s"wankun-${r.nextInt(100)}")).toDF("id", "name")df.write.
2021-05-12 17:49:15 1118
原创 Spark3中Catalog组件设计和自定义扩展Catalog实现
文章目录Spark 3 中Catalog组件设计catalog管理类继承关系Catalog 初始化过程测试自定义Catalog编译和打包测试类切换catalog测试Spark 3 中Catalog组件设计catalog管理类继承关系在Spark 3中,我们可以轻松的对内置的访问Hive metastore 的catalog进行自定义功能扩展。我们先梳理一下整个系统实现的类设计,以及catalog的初始化流程Delta 是 Databrick 提供的一种扩展的文件存储格式,同时也提供了相关的SQL开发
2021-04-06 11:56:59 5317 1
原创 初探JuiceFS
文章目录说明Juicefs编译启动 Redis 服务来管理JuiceFS元数据将OSS存储挂载为本地目录读写Hadoop 访问 JuiceFS 存储参考说明个人理解JuiceFS的定位是一个建立在S3, OSS 等存储系统之上的一个抽象文件系统。因为使用Redis来做文件的元数据管理,所以减少了远程调用 S3, OSS API的开销;内部有对数据的Cache功能,所以当重复访问数据时,速度也会得到明显提升。Juicefs编译Juice编译设计到的go,java,maven等组件,而且go的编译还需
2021-03-31 14:28:58 3802 3
原创 Spark 3.0 DPP实现逻辑
准备测试环境测试数据和测试SQLimport spark.implicits._import java.time.LocalDateTimeimport java.time.format.DateTimeFormatterimport java.sql.Timestampspark.range(-1000, 1000).map { id => val dt = Timestamp.valueOf(LocalDateTime.now.plusDays(id)) val dt
2021-03-12 18:39:18 877
原创 Spark Filter算子在Parquet文件上的下推
Spark程序在读取Parquet文件的时候可以将合适的Filter条件转换为Parquet文件的Filter,根据文件Footer中的统计信息提交过滤掉一部分不满足条件的Block,减少数据的IO。准备测试环境Spark Version : 3.0.0Parquet Version : 1.10.1import spark.implicits._import scala.util.Randomimport scala.math.BigDecimalimport java.time.Loc
2021-03-11 21:09:12 1414
原创 修改 Spark 支持远程访问OSS文件
编译特定版本Hadoop访问OSS的Jar包目前Hadoop trunk 分支已经包含了hadoop-aliyun模块的代码,hadoop已经默认支持aliyun oss的访问支持。但是我们公司的hadoop版本还是CDH5的分支版本,默认是没有oss支持的。通过下载官方提供的hadoop-aliyun.jar包放到Hadoop中,发现高版本的hadoop-aliyun.jar依赖于高版本的httpclient.jar 和高版本的httpcore.jar, 高版本和低版本造成类访问冲突。无奈之下,尝试
2021-02-01 21:34:33 1705 1
原创 Spark 3.0 Adaptive Execution 代码实现及数据倾斜优化
文章目录启用Spark AEAE对Stage 分阶段提交执行和优化过程OptimizeSkewedJoin 优化原理启用Spark AEAdaptive Execution 模式是在使用Spark物理执行计划注入生成的。在QueryExecution类中有 preparations 一组优化器来对物理执行计划进行优化, InsertAdaptiveSparkPlan 就是第一个优化器。InsertAdaptiveSparkPlan 使用 PlanAdaptiveSubqueries Rule对部分Su
2020-12-21 15:54:52 1074
原创 Spark 任务Task调度异常分析
文章目录Spark任务调度异常回顾Spark Task调度过程问题分析任务优化思路Spark任务调度异常最近在帮业务的同学跑Spark程序,其中一个job的Stage有15000+Task,由100多个executor进行执行。任务执行一段时间后,driver只分配了几个task给其中的几个Executor执行,其他大部分executors全部处于空闲状态。回顾Spark Task调度过程这个网上文章很多,不再重复。简单说一下其中几个过程:Spark 对Job进行切分成Stage,每个Stage
2020-11-04 12:00:58 912
原创 使用Prometheus监控Spark任务
BackGroud目前spark支持Graphite打点,但是Graphite默认会为每个打点生成对应的文件,直接只有两个点数据,graphite生成的文件也有200多k,对Graphite造成很大的压力。所以考虑使用Prometheus来代替Graphite。Prometheus的打点默认是pull模式,和Graphite不同,而Spark3.0 新加的打点方式也是K8S友好的。所以还是考虑 使用Prometheus结合Graphite Exporter 的方式。Graphite Exporter
2020-08-03 15:47:12 1894
原创 学习Parquet文件格式
文章目录学习目的Parquet文件存储结构学习目的parquet文件作为列存的存储结构parquet文件的读写主要流程和调用接口spark对parquet文件读写的优化spark是如何实现向量化数据读取的Parquet文件存储结构例如一个实际的parquet文件meta信息parquet-tools meta --debug part-00000-95a6898f-c2aa-4e89-86a6-4f17a2a8fe26.c000.snappy.parquetcreator:
2020-07-09 12:20:20 1351 1
原创 Spark 3.0 测试与使用
Compatibility with hadoop and hiveSpark 3.0 官方默认支持的Hadoop最低版本为2.7, Hive最低版本为 1.2。我们平台使用的CDH 5.13,对应的版本分别为hadoop-2.6.0, hive-1.1.0。所以尝试自己去编译Spark 3.0 来使用。编译环境: Maven 3.6.3, Java 8, Scala 2.12Hive版本预先编译因为Hive 1.1.0 实在是太久远了,很多依赖包和Spark3.0中不兼容,需要需要重新编译。hi
2020-06-29 15:28:29 1951
原创 Spark动态资源分配的资源释放过程及BlockManager清理过程
文章目录Spark动态资源分配过程中YarnScheduler 释放资源过程SchedulerBackend, TaskScheduler 和 ExecutorAllocationManager 的创建ExecutorAllocationManagerCoarseGrainedSchedulerBackendo.a.s.scheduler.cluster.YarnSchedulerEndpointo.a.s.deploy.yarn.ApplicationMasterBlockManager 清理Broadc
2020-06-23 20:57:07 2097
Java做的文本编辑器
2009-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人