自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lilyjoke的专栏

学无止境,止于至善

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

原创 Spark SQL执行计划到RDD全流程记录

记录Spark SQL生成执行计划的全流程和代码跟踪。Spark版本是2.3.2。上图流程描述了Spark SQL 怎么转成Spark计算框架可以执行的分布式模型,下面结合一个样例,跟踪每个步骤。

2022-12-17 23:34:15 1884

原创 基于语法树解析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 4098

原创 基于mysql binlog和flink broadcast实现配置动态更新

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

2021-04-20 15:21:36 986 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 2005 5

原创 Spark AQE 配置和源码说明

网摘:AQE(Adaptive Query Execution)自适应查询,是Spark 3.0开始增加的一种机制,可以根据 Shuffle Map阶段的统计信息,基于地调整和修正的,来完成对原始查询语句的优化。

2023-07-05 22:02:16 470

原创 为Hive表owner自动赋Ranger读写操作权限的解决方法

挖坑 待填。

2023-06-13 17:50:07 209

原创 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 913

原创 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 476

原创 leecode每日一题 1023 驼峰式匹配

如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。

2023-04-14 15:27:55 74

原创 leecode每日一题 2404 段式回文

给你一个整数数组nums,返回出现最频繁的偶数元素。如果存在多个满足条件的元素,只需要返回的一个。如果不存在这样的元素,返回-1。

2023-04-13 09:56:03 61

原创 leecode每日一题 1147 段式回文

你会得到一个字符串 text。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足:subtexti 是 非空 字符串所有子字符串的连接等于 text ( 即subtext1 + subtext2 + ... + subtextk == text )对于所有 i 的有效值( 即 1

2023-04-12 16:23:33 52

原创 Spark jdbc读写的数据对账功能和问题解决

3. 当某一条数据写入错误时,整个spark任务是失败状态,但是发现有部分数据已经成功写到表,有部分数据回退的情况。1. 注册JdbcRelationProvider,实现createRelation, 通过调用JdbcUtils.saveTable()方法实现写表功能。可以发现,savePartition是有做事务的,发生错误之后可以回退。2. saveTable的内部实现,可以看到主要实现方法是,拼接了一个insert的执行对象,然后根据写入的分区遍历写入。这个时候,其实是异步的,并不是串行的。

2023-03-29 11:44:06 485

原创 Hive表热度统计

通过解析hiveserver2的info日志,获取每个执行sql命令。通过durid对sql进行解析,获取对于表的操作,并写到数据库中。接口提供,最小粒度到分钟,给到应用做展现。

2023-03-08 15:09:23 299

原创 Spark Sql表关联筛选行列转换窗口比较等代码实现

不涉及业务,记录基于Spark Sql框架和Scala语法,实现表的关联,筛选,聚合,行列转换,窗口比较等代码实现。Demo1,主要是通过字符串分割和flatmap实现行转列,通过聚合函数实现行转列。Demo2,定义窗口,通过row_number实现TopN。

2023-01-28 11:47:35 192

原创 Dolphinscheduler定时调度没有启动Handling 4 trigger(s) that missed their scheduled fire-time

无业务信息,只是问题记录积累。

2023-01-19 22:53:47 2813

原创 基于Durid解析SQL语法树获取单查询该查询的最终输出字段

本来方案是,直接用Durid里面自带得HiveSchemaStatVisitor,进行SQL遍历,就可以获取所需的Select字段。测试结果发现不是这样,原生的解析拿不到子查询的明细字段,也拿不到"*"对应的字段,如下图。需求:要解析用户的SQL,从语法上获取SQL的输出字段,这样好和后面的入库字段做映射。2、将子查询内的字段展现(最终是输出的字段),如果最终不输出,也不考虑这些字段。该记录不涉及任何业务信息,仅作学习记录,代码在最下面。下图是和上图用的同一句SQL,测试输出的结果。

2022-09-03 17:03:17 1388 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 1869

转载 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 656

原创 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 4824

原创 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 5236

原创 升级Spark 3.2的包冲突记录

升级Spark 3.2的包冲突记录

2022-01-28 14:38:38 3262

原创 Spark RDD Partition和Scheduler调度的梳理

问题来源业务同学报障,同一个Spark计算,数据源,执行代码和提交客户端配置都一模一样,第一次运行跑了几个小时没出数kill掉了,失败后第二次运行,跑了18分钟就出数了。我这边要分析一下原因,提供解决方案,避免业务再出现类似的问题。说明:该记录只是问题梳理,不会涉及任何业务信息。问题分析对比了Spark History的详情,以及日志,发现同样的执行计划,任务的并发数...

2022-01-03 14:51:27 1251

原创 Presto Hive Antlr SQL解析流程

要做Presto和Hive语法兼容可能要从物理执行计划层面都要改OMG 先占坑 后面梳理下

2021-12-28 16:37:39 653

原创 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 1643

原创 Spark On Yarn -- Spark Shuffle Service加载流程

最近要写一个spark on yarn的代码梳理,帮自己理清楚相关的服务脉络,先占个坑

2021-11-22 15:09:59 602

原创 presto内存配置逻辑梳理

presto内存配置逻辑梳理

2021-11-18 15:39:48 983

转载 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 99

原创 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 999

原创 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 71

原创 日常错误积累

问题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 84

原创 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 1377

原创 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 1068

原创 kafka要点总结

做一个kafka的要点总结,官网或者博客都有大量资料目录基础术语副本机制Kafka数据备份Leader选举ISR集合方法少数服从多数方法如果所有的ISR副本都失败了怎么办Kafka数据commitISR配置宕机如何恢复少部分副本宕机全部副本宕机Zookeeper协调服务Zookeeper的watch机制Kafka分区策略Range...

2020-01-19 22:45:04 294

原创 基于flume框架的ORCSink开发中遇到的坑(一)

最近做了一个基于flume 1.7 的sink,用于写hdfs orc文件,中间遇到了几个坑,下面把思路和遇到的问题一一记录下来。1. 开发思路首先的实现场景是这样的:从channel拿数据-->sink拿到数据后做分类-->分类后将数据写入对应的orc文件->文件关闭。技术要点是这样:1.1  线程池管理hdfs操作在分类写orc文件这环节,我开了两个线程池,一...

2018-08-02 17:59:46 1937 3

原创 flume的事务实现

在flume的内部实现中事务是一个重要的概念,事务保证了数据的可用性(有别于数据库中的事务)。下图的数据流是spooling directory source-> memory channel-> kafka sink,其中memory channel维护了两个事务,分别是put事务和take事务。 下面简要介绍一下事务的代码实现:1. doPut(放入event)...

2018-08-02 17:29:00 3762

原创 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 635 3

原创 flume spoolDirectory Source原生代码流程及其拓展

最近小组要在flume的基础上做定制开发,以满足公司内部的业务使用。我这块主要的开发是对zip包中的文件做一定的处理后,以avro方式序列化,写入kafka。整个流程参考了flume的spoolDirectorySource的实现,因为主要是对spooldirectorySource中文件解析的部分进行了参考,所以下面的文章将会着重分析文件的解析部分。1、  spoolDirector

2017-09-08 16:12:55 2158

原创 通过ICE接口对hbase进行文件操作

最近开发了几个对集群做文件操作的模块,都是基于python(2.7)。下面记录一下对通过ICE接口,写HBASE的模块,贴出部分代码。1. 关于ICEICE是一个中间件,我们可以通过ICE,不考虑server和client分别是什么,进行跨集群的操作。ice已经有很多资料可供学习,以后也会自己总结一个关于ice的文档2. 依赖包ICE3. 源码及解释

2017-02-21 18:42:39 868

原创 基于pyhdfs接口对hadoop进行文件操作

最近开发了几个对集群做文件操作的模块,都是基于python(2.7)。下面记录一下对hdfs做文件操作的模块,贴出部分代码。1. pyhdfs(PyHDFS-0.1.2.tar.gz), 依赖包requestssimplejson2. 代码及解说因为之前没有判断把文件写到hdfs后的执行结构,下一步就直接将文件移走了,会造成在写hdfs时,报找不到本地文件的错;

2017-02-21 18:32:39 3382

原创 大数据运维框架(三)--运维框架参考:CDH cloudermanager & apache ambari

666

2016-10-12 09:52:55 1379

yanagishima-20.0.zip

yanagishima-20.0.zip

2023-03-30

flume 1.7 user guide.docx

flume user guide

2017-07-12

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除