- 博客(61)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注

原创 Spark SQL执行计划到RDD全流程记录
记录Spark SQL生成执行计划的全流程和代码跟踪。Spark版本是2.3.2。上图流程描述了Spark SQL 怎么转成Spark计算框架可以执行的分布式模型,下面结合一个样例,跟踪每个步骤。
2022-12-17 23:34:15
2394
1

原创 基于语法树解析Spark SQL 获取访问的表/字段/UDF等信息
最近有需求,需要拆解Spark SQL中的表,字段等信息,然后配合Ranger实现一些权限校验。其实难度不大,就是需要根据语法树做一些递归拆解,然后就能拆解出一段SQL中的相关信息,再创建一些数据结构bean对象用于配合校验。下面是部分源码(全部本人原创),不涉及业务信息。对于Presto我也做了拆解,欢迎沟通交流。import test.AccessType;import test.ColumnAccess;import test.ColumnsWithTable;import l
2022-04-13 10:59:22
4285

原创 基于mysql binlog和flink broadcast实现配置动态更新
在flink流式计算中,需要动态的更新配置,而无需重启作业进程。通过mysql binlog机制,可以实现配置的变化并可以捕获这一变化;通过flink的broadcast机制,可以将这一动态变化广播到业务流,并进行相应的逻辑处理,最终实现配置的动态更新。下面写一个简单的demo,仅供平时学习积累使用。CDCCDC全称Change Data Capture,变动数据捕获。它的核心思想是,监测并捕获数据库的变动,将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。m
2021-04-20 15:21:36
1114
4

原创 自定义child-first类加载器解决Jar包冲突
自定义java类加载器解决Jar包冲突最新使用tika进行非结构化数据的抽取,因为现场抽取的种类很多,针对EXCLE数据,需要引用到poi-ooxml中的方法,但是现场的poi-ooxml的版本和tika-app中依赖的版本有冲突,因此需要解决该问题。概念此处来源 https://www.jianshu.com/p/1e4011617650BootstrapClassLoader(启动类加载器)c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClas
2021-01-18 14:18:50
2346
5
原创 Spark AQE 配置和源码说明
网摘:AQE(Adaptive Query Execution)自适应查询,是Spark 3.0开始增加的一种机制,可以根据 Shuffle Map阶段的统计信息,基于地调整和修正的,来完成对原始查询语句的优化。
2023-07-05 22:02:16
765
原创 leecode每日一题 1080 根到叶路径上的不足节点
给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为 不足节点 ,需要被删除。叶子节点,就是没有子节点的节点。输入:root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1输出:[1,2,3,4,null,null,7,8,9,null,14]
2023-05-25 17:51:08
963
原创 leecode每日一题 1054 距离相等的条形码
在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。你可以返回任何满足该要求的答案,此题保证存在答案。示例 1:输入:barcodes = [1,1,1,2,2,2]输出:[2,1,2,1,2,1]示例 2:输入:barcodes = [1,1,1,1,2,2,3,3]输出:[1,3,1,3,2,1,2,1]
2023-05-16 15:35:13
626
原创 leecode每日一题 1023 驼峰式匹配
如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。
2023-04-14 15:27:55
224
原创 leecode每日一题 2404 段式回文
给你一个整数数组nums,返回出现最频繁的偶数元素。如果存在多个满足条件的元素,只需要返回的一个。如果不存在这样的元素,返回-1。
2023-04-13 09:56:03
97
原创 leecode每日一题 1147 段式回文
你会得到一个字符串 text。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足:subtexti 是 非空 字符串所有子字符串的连接等于 text ( 即subtext1 + subtext2 + ... + subtextk == text )对于所有 i 的有效值( 即 1
2023-04-12 16:23:33
90
原创 Spark jdbc读写的数据对账功能和问题解决
3. 当某一条数据写入错误时,整个spark任务是失败状态,但是发现有部分数据已经成功写到表,有部分数据回退的情况。1. 注册JdbcRelationProvider,实现createRelation, 通过调用JdbcUtils.saveTable()方法实现写表功能。可以发现,savePartition是有做事务的,发生错误之后可以回退。2. saveTable的内部实现,可以看到主要实现方法是,拼接了一个insert的执行对象,然后根据写入的分区遍历写入。这个时候,其实是异步的,并不是串行的。
2023-03-29 11:44:06
675
原创 Hive表热度统计
通过解析hiveserver2的info日志,获取每个执行sql命令。通过durid对sql进行解析,获取对于表的操作,并写到数据库中。接口提供,最小粒度到分钟,给到应用做展现。
2023-03-08 15:09:23
410
原创 Spark Sql表关联筛选行列转换窗口比较等代码实现
不涉及业务,记录基于Spark Sql框架和Scala语法,实现表的关联,筛选,聚合,行列转换,窗口比较等代码实现。Demo1,主要是通过字符串分割和flatmap实现行转列,通过聚合函数实现行转列。Demo2,定义窗口,通过row_number实现TopN。
2023-01-28 11:47:35
341
原创 Dolphinscheduler定时调度没有启动Handling 4 trigger(s) that missed their scheduled fire-time
无业务信息,只是问题记录积累。
2023-01-19 22:53:47
4036
原创 基于Durid解析SQL语法树获取单查询该查询的最终输出字段
本来方案是,直接用Durid里面自带得HiveSchemaStatVisitor,进行SQL遍历,就可以获取所需的Select字段。测试结果发现不是这样,原生的解析拿不到子查询的明细字段,也拿不到"*"对应的字段,如下图。需求:要解析用户的SQL,从语法上获取SQL的输出字段,这样好和后面的入库字段做映射。2、将子查询内的字段展现(最终是输出的字段),如果最终不输出,也不考虑这些字段。该记录不涉及任何业务信息,仅作学习记录,代码在最下面。下图是和上图用的同一句SQL,测试输出的结果。
2022-09-03 17:03:17
1710
2
原创 Spark2.4升级到Spark 3.2后,小文件数增多的问题解决
全部原创,仅做问题分析记录,不涉及任何业务信息。问题描述数仓同学报障,说升级了spark3.2后,同样的一组SQL和配置,为什么最终写表的小文件从几个变成了500个,是不是distribute by rand()不生效了... :DSpark 3.2Spark 2.4首先问题的确是存在(虽然和distribute by rand()没关系。。。),最后一个insert操作,原来的分区只有几个,从上游job500个变成了几个,而现在都是500个,进一步分析。定位和解决.
2022-04-18 11:02:12
2233
1
转载 Flink--Hybrid Source提出的动机及实现原理介绍
Hybrid Source的提出动机在实践中,许多Flink作业需要按顺序从多个数据源读取数据,具体有如下2个场景:Change Data Capture (CDC): 用户可以将数据的快照存储在HDFS/S3中,数据的更新日志存储在数据库binlog或Kafka中 机器学习特征回填: 当向模型添加新特性时,需要从几个月前到现在的原始数据计算该特性。在大多数情况下,历史数据和实时数据分别存储在两种不同的存储系统中,例如HDFS和Kafka。在过去,用户可能必须运行两个不同的Flink作业,或者在S
2022-04-15 11:57:39
841
原创 Presto读Hive报错: Malformed ORC file. Cannot read SQL type ‘tinyint‘ from ORC stream...
向社区提了个Issue:Malformed ORC file. Cannot read SQL type 'boolean' from ORC stream '.illegal' of type INT with attributes · Issue #11428 · trinodb/trino (github.com)跟了代码之后,这样改了,实测是能解决了,也用到生产环境了。但是不一定能合到社区,发出来,给可能有类似问题的同学做下参考,抛砖引玉吧:Support 8-bit field typ
2022-03-22 15:52:30
5372
原创 Spark Sql Left Join(多对多)导致的数据膨胀问题和解决
问题:大表left join小表,小表有10万条,大概就10M大小。大表有30多亿条,对应分区下有40个HDFS文件,简单的一个left join,跑了几个小时跑不出结果。INSERT OVERWRITE TABLE 结果表 PARTITION(dt='20220302') select vertice,types,nvl(dstgid,groupid) as gid from ( select vertice,groupid,types from
2022-03-03 17:20:30
6161
原创 Spark RDD Partition和Scheduler调度的梳理
问题来源业务同学报障,同一个Spark计算,数据源,执行代码和提交客户端配置都一模一样,第一次运行跑了几个小时没出数kill掉了,失败后第二次运行,跑了18分钟就出数了。我这边要分析一下原因,提供解决方案,避免业务再出现类似的问题。说明:该记录只是问题梳理,不会涉及任何业务信息。问题分析对比了Spark History的详情,以及日志,发现同样的执行计划,任务的并发数...
2022-01-03 14:51:27
1310
原创 Spark 3.2 基于推送的Spark shuffle 服务
[SPARK-30602] SPIP: Support push-based shuffle to improve shuffle efficiency - ASF JIRA (apache.org)[SPARK-36374][SHUFFLE][DOC] Push-based shuffle high level user documentation by venkata91 · Pull Request #33615 · apache/spark · GitHub
2021-12-09 15:43:53
1836
原创 Spark On Yarn -- Spark Shuffle Service加载流程
最近要写一个spark on yarn的代码梳理,帮自己理清楚相关的服务脉络,先占个坑
2021-11-22 15:09:59
662
转载 Presto UDF小坑--SimpleDateFormat线程安全问题
原文链接:还在使用SimpleDateFormat?你的项目崩没? | Felix (542869246.github.io)用SimpleDateFormat做时间格式转换,构造了一个全局的SimpleDateFormat,结果发现时间转出来五花八门,有些时间戳还有负数。public final class Test{ private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //问题
2021-11-08 19:00:20
142
原创 Presto UDF 返回Map类型
最近在做presto改造和业务功能支持,需要做一个返回map的udf,网上例子比较少,官网也没有,因此记录下。Slice,Block,Page返回Map类型的UDF Demo/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtai
2021-10-30 20:09:10
1212
原创 spring-mybatis整合
http://mybatis.org/spring/zh/mybatis基础实现1. 在数据库中创建一张表,CRUD操作2. 定义一个实体类,和数据库中的表有对应关系(一对一,多对一,一对多等等)@Data@Alias("user")public class User { private int id; private String name; private String pwd;}3. 定义一个接口类,提供对数据库进行CRUD操作的接口方法。public in
2021-02-08 16:09:33
104
原创 日常错误积累
问题1: 通过JDBC连接Hive报错,Required field ‘client_protocol’ is unset,错误栈如下图:原因:跟着代码走一遍错误栈就知道了,依赖的hive客户端jar包版本和访问的Hive服务端的版本不对应,客户端的hive-jdbc-#{version}.jar和服务端的hive-service-#{version}.jar版本要一致。...
2021-01-29 09:59:48
118
原创 IMEI,手机号,身份证号格式有效性校验
IMEI,手机号,身份证号格式有效性校验IMEI格式有效性校验手机号格式有效性校验身份证格式有效性校验IMEI格式有效性校验imei一般由15位数字组成,有些厂家会在最后加上两位数字表示版本号。imei的校验主要通过模10算法,基于前14位的数字校验第15位的数值。class IsValidIMEI: AbstractScalar(), (String) -> Boolean { //一般的imei基本都是15位,有些17位的,后两位是版本号 private val regex
2020-11-06 15:35:57
1578
原创 Apache Tika 1.24包冲突记录
tika-app版本1.241. 报错:java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.read(Ljava/io/InputStream;[B)Icommons-io-2.1.jar换成commons.io-2.6.jar2. 报错:java.lang.NoSuchMethodError: org.apache.commons.compress.archivers.ArchiveStreamFactory.detect.
2020-09-12 11:22:16
1477
原创 kafka要点总结
做一个kafka的要点总结,官网或者博客都有大量资料目录基础术语副本机制Kafka数据备份Leader选举ISR集合方法少数服从多数方法如果所有的ISR副本都失败了怎么办Kafka数据commitISR配置宕机如何恢复少部分副本宕机全部副本宕机Zookeeper协调服务Zookeeper的watch机制Kafka分区策略Range...
2020-01-19 22:45:04
339
原创 基于flume框架的ORCSink开发中遇到的坑(一)
最近做了一个基于flume 1.7 的sink,用于写hdfs orc文件,中间遇到了几个坑,下面把思路和遇到的问题一一记录下来。1. 开发思路首先的实现场景是这样的:从channel拿数据-->sink拿到数据后做分类-->分类后将数据写入对应的orc文件->文件关闭。技术要点是这样:1.1 线程池管理hdfs操作在分类写orc文件这环节,我开了两个线程池,一...
2018-08-02 17:59:46
2014
3
原创 flume的事务实现
在flume的内部实现中事务是一个重要的概念,事务保证了数据的可用性(有别于数据库中的事务)。下图的数据流是spooling directory source-> memory channel-> kafka sink,其中memory channel维护了两个事务,分别是put事务和take事务。 下面简要介绍一下事务的代码实现:1. doPut(放入event)...
2018-08-02 17:29:00
3831
原创 orc文件写入+GC调优+java多线程+java静态类
好久没总结,说来惭愧,做了4年的开发,但是对于基础的概念总结还是很不完善,最近有可以写的东西,先做个引子和总结,等有空来写。1. flume自定义sink,用于写orc文件,直接挂到hive表上,相当于直接入库了。2. 并发程序中出现OOM的调优过程3. 并发概念总结4. 静态类的概念总结5. fs.automatic.close配置引起的乌龙6. hdfs的租约模型(df...
2018-07-17 15:26:23
704
原创 flume spoolDirectory Source原生代码流程及其拓展
最近小组要在flume的基础上做定制开发,以满足公司内部的业务使用。我这块主要的开发是对zip包中的文件做一定的处理后,以avro方式序列化,写入kafka。整个流程参考了flume的spoolDirectorySource的实现,因为主要是对spooldirectorySource中文件解析的部分进行了参考,所以下面的文章将会着重分析文件的解析部分。1、 spoolDirector
2017-09-08 16:12:55
2238
原创 通过ICE接口对hbase进行文件操作
最近开发了几个对集群做文件操作的模块,都是基于python(2.7)。下面记录一下对通过ICE接口,写HBASE的模块,贴出部分代码。1. 关于ICEICE是一个中间件,我们可以通过ICE,不考虑server和client分别是什么,进行跨集群的操作。ice已经有很多资料可供学习,以后也会自己总结一个关于ice的文档2. 依赖包ICE3. 源码及解释
2017-02-21 18:42:39
912
原创 基于pyhdfs接口对hadoop进行文件操作
最近开发了几个对集群做文件操作的模块,都是基于python(2.7)。下面记录一下对hdfs做文件操作的模块,贴出部分代码。1. pyhdfs(PyHDFS-0.1.2.tar.gz), 依赖包requestssimplejson2. 代码及解说因为之前没有判断把文件写到hdfs后的执行结构,下一步就直接将文件移走了,会造成在写hdfs时,报找不到本地文件的错;
2017-02-21 18:32:39
3461
安卓开发入门资料推荐?
2014-05-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人