自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 收藏
  • 关注

原创 Flink异步IO初步了解

在EventTime中,以watermark为边界,介于两个watermark之间的消息是乱序的,但是多个watermark之间的消息是有序的。之前使用Flink查询Redis数据的过程中,由于对数据一致性的要求并不是很高,当时是用MapFunction + State 的方案。// resultHandler类内部的complete方法就是在用户自定义函数中传结果用的,最终执行结果会调用processInMainBox(results)方法,将结果发送给下游算子。// 调用用户编写的方法。

2023-12-21 21:10:14 1015

原创 DBT踩坑第二弹

总结下dbt-spark踩到的坑,连接方式采用的是thrift连接 + Kerberos认证。考虑到开源组件Kyuubi也是基于Hiveserver2,使用的thrift协议,所以采用Kyuubi执行SparkSQL。

2023-11-25 11:19:10 543

原创 @Embeddable and @ElementCollection 嵌套导致SpringBoot程序无法启动的问题

具体报错信息如下:org.hibernate.AnnotationException: @OneToMany, @ManyToMany or @ElementCollection cannot be used inside an @Embeddable that is also contained within an @ElementCollection: com.***.collection&&element.myValues。理解了下报错原因,特在此写篇文章记录一下。

2023-10-28 21:19:11 340

转载 扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

换言之,要是使用属性注入,那么你这个类就只能在 IOC 容器中使用,要是想自己 new 一下这个类的对象,那么相关的依赖无法完成注入。:如果用构造方法注入的时候,参数过多以至于代码过于臃肿,那么此时你需要考虑这个类的设计是否合理,这个类是否参杂了太多的其他无关功能,这个类是否做到了单一职责。以上分析都是根据 Spring 官方文档得来,日常开发应该还是属性注入较多,这个咱们不必纠结,代码该咋写还咋写,Spring 官方的态度了解一下即可,当然,结合 Spring 官方文档,我们来分析下。

2023-10-28 20:12:40 146

原创 对工作还有Bar Raiser的一些感想

在招聘中,“bar raiser”会用很苛刻的眼光考察应聘者是否在至少一点上比亚马逊的平均能力水平要高,如果是,那么雇用这样的人实际上就等于在提升公司的能力,这就起到了“抬杆”的作用。和朋友聊天的时候朋友说到在私企没有稳定的工作一说,想想确实是这样的,要随时拥抱变化,学习知识不能停,拓展知识的广度很有必要。不过也别太焦虑,有些事情确实不是自己能掌控的,good good study, day day up,做那些自己能掌控的事情,比如专研技术,好好做就好了,其他的就交给天意吧。

2023-10-15 16:13:13 485

原创 PriorityQueue如何确定构建的是大根堆还是小根堆

如下是PriorityQueue类中新放入元素时执行的代码,x是新放入的元素,k是队列大小,这里只要关注x就好了。可以看到满足 comparator.compare(x, (E) e) >= 0 时会跳出循环,e是队列中原先就存在的元素,此时如果o2-o1>=0,即e>=x时,x会停止往堆顶上升。此时如果o1-o2>=0,即x>=e时,x会停止往堆顶上升。否则如果o1-o2

2023-09-26 08:33:28 95

原创 浅谈DBT的一些不足之处

这个其实很dbt生成sql的方式有关。DBT的好处是显而易见的,它支持连接多达41种数据库。,当前主流的Hive版本都是1.x 和 2.x,3.x都很少见到,哭死...anyway,还是希望DBT发展的越来越好吧,hhh。

2023-09-20 22:48:15 356

原创 初识DBT以及搭建第一个DBT工程

按照官方的说法,DBT 是一个数据转换流编排工具。个人理解就是,DBT是帮你编排SQL用的,你可以按照DBT的结构,构建好一个SQL的pipeline,然后让DBT帮你执行这个pipeline。我这里说的SQL pipeline的意思就是,先执行SQL a,再执行SQL b,类似这种。个人理解这就是DBT最大也是最核心的功能!因为在DBT中的操作基本都是关于SQL的操作,所以DBT才对外宣称自己是专门做ETL中的T(当然它也有支持一部分的python代码,但是貌似支队一小部分数据库提供支持)。

2023-07-30 22:45:17 1161

原创 Node.js初步了解

Node.js是单线程运行的,这里的单线程指的是主线程是单线程,主线程中的操作是同步阻塞的。这里可以类比redis。Node.js适合用于开发高性能、实时性强、I/O密集型的应用程序,如网络服务器、聊天应用程序、实时通信应用程序、流媒体服务、API服务器等。Node.js不适合用于CPU密集型的应用程序,例如图像处理、视频编解码等。由于Node.js采用单线程的事件循环模型,因此在处理大量计算密集型任务时,可能会导致阻塞和性能瓶颈。做了个和Node.js相关的小东西,简单记录下。

2023-07-22 11:34:10 310

原创 在Redis集群模式下使用pipeline进行批量操作

在Redis集群模式下使用pipeline进行批量操作

2023-02-27 22:16:28 2587 5

原创 了解下SparkSQL中的笛卡尔积

了解下SparkSQL中的笛卡尔积

2022-09-17 23:01:28 1566

转载 为什么企业都会去优化Spark Shuffle Service

了解remote shuffle service

2022-07-03 16:08:08 459

转载 初步了解下对象存储

这三者的本质差别是使用数据的“用户”不同:块存储的用户是可以读写块设备的软件系统,例如传统的文件系统、数据库;文件存储的用户是自然人;对象存储的用户则是其它计算机软件。 首先要说明一下的是,这三个概念都是分布式存储中的概念,由不同的网络存储协议实现。不过“网络”和“存储”的结合本身会对解释这三个概念的本质差异带来不便,下面的解释中我会先解释存储本身,之后再结合网络来说明。 ps:百度网盘,个人理解就是对象存储.文件存储文件存储的用户是自然人,最容易理解。计算机中所有...

2022-05-18 22:26:19 388 1

转载 MySQL事务及原理

什么是事务 一个最小的不可再分的工作单元,定义一组要么同时执行成功,要么同时执行失败的SQL语句。四大特征(ACID)原子性(A):事务是最小单位,不可再分 一致性(C):事务要求所有的DML语句操作的时候,必须同时成功或者同时失败 隔离性(I):事务A和事务B之间具有隔离性 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)在MySQL中,默认情况下,事务是自动提交的,也就是说,只要执行一条DML语句就开启了事物,并且提交了事务,自动提交机制可以关闭..

2022-05-18 22:13:51 254

原创 对于MySQL表建索引的一些基本的了解

索引的作用 索引是帮助MySQL高效获取数据的数据结构。当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。 MySQL中存储的索引类型有两张:B-TREE 和 HASH,当存储引擎是MyISAM和InnoDB时,都至此支持B-TREE,MMEORY/HEAP存储引擎是B-TREE和HASH索引都支持。本文只探讨InnoDB引擎下的B-TREE索引。索引的分类根据索引的具体用途,MySQL 中的索引在...

2022-04-18 22:24:57 1669

原创 Kafka事务报错之 Producer attempted an operation with an old epoch

今天使用Spark往Kafka中写数据,写入数据的时候配置了transactional.id,即事务性写入。一次性写入的数据量有点大,每次至少是30W+条数据,每条数据有十几个字段。任务经常会报如下错误:...

2022-03-16 22:56:25 5235

原创 SQL中on、where、having的区别

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。on、where、having就是在这个过程中对数据进行过滤。 on是在生成中临时表之前就去作用的,它会在数据源那里就把不符合要求的数据给过滤掉,所以on运行的速度最快。 where和having是在临时表生产之后,对临时表中的数据进行过滤用的。having一般会用在聚合函数之后,比如name, sum(money) as tatal ...groupy by name having...

2022-03-12 16:55:22 2744

转载 with as 语句真的会把查询的数据存内存嘛?

最近有好几个朋友都有咨询这个问题,大概有两类:1、为啥我用了with..as效率没有提高?2、sql跑不动,改成with..as的写法,会不会更好些?网上博客几乎都有结论with ... as语句会把数据放在内存:hive-sql在hive中有一个参数hive.optimize.cte.materialize.threshold这个参数在默认情况下是-1(关闭的);当开启(大于0),比如设置为2,则如果with..as语句被引用2次及以上时,会把with..as

2022-02-08 17:05:55 543

原创 Hive多分区表重命名失败问题分析

项目上有一张Hive分区表,分区数非常多,大约有2000+,然后需要增加一个字段,然后华丽丽的发现,执行了半小时之后,失败了...然后想着那就对表进行重命名吧,使用新表来替换这张旧表,旧表使用别的名字,然后又是漫长半小时等待,又失败了...表重命名操作不就是修改下元数据么,MySQL操作不应该是非常快的么?!为啥还会失败,带着这个问题,来探究下Hive表重命名相关的原理。参考:增加Hive表字段超时_MapReduce服务 MRS_故障排除_使用Hive_华为云...

2021-10-13 22:27:18 1552

原创 Python进程池未并行执行的一个小坑

因为项目原因,所以选择了使用python作为工程开发的主语言。工程上在数据发送时,需要将一批数据快速的进行发送,所以很自然的就想到了Java中的多线程。但是坑爹的是python中的多线程是的假的多线程,python进程受GIL锁控制,只能有一个线程在运行。所以python中如果要做到类似Java中的多线程的功能的话,需要使用到python的进程池功能。参考:python中多线程是假的 python多进程中的Manager的作用...

2021-10-08 21:45:13 2696

转载 Spark SQL 自适应执行优化引擎(转载)

在本篇文章中,笔者将给大家带来 Spark SQL 中关于自适应执行引擎(Spark Adaptive Execution)的内容。在之前的文章中,笔者介绍过 Flink SQL,目前 Flink 社区在积极地更新迭代 Flink SQL 功能和优化性能,尤其 Flink 1.10.0 版本的发布,在增强流式 SQL 处理能力的同时也具备了成熟的批处理能力。但是在 SQL 功能完整性和生产环境的实践应用等方面,Spark SQL 还是更胜一筹,至于 SQL 批处理方面性能优劣,则需要笔者亲自去实践。

2021-08-29 22:50:02 1947

原创 Flink之双流Join原理解析

之前研究了SparkSQL中Join的原理,本文来研究下Flink中的两条流Join的原理。Flink双流Join的demo可见参考中的链接,那位博主Demo写的非常的好。 Flink中的Join分为WindowJoin和Interval join两种。前者是将数据缓存在Window中,然后再进行Join,所以本质上其实和SparkSQL中的Join一样,算是个离线数据Join;Interval join不太一样,是一条流中的每个元素和另外一条流某个时间范围区间的所有元素进行...

2021-08-25 22:04:18 5819

原创 SparkSQL运行流程浅析

写了有相当长一段时间的SparkSQL了,所以结合网上其他大神的分析,写一篇文章,谈谈我对SparkSQL整个运行流程的一个简单的理解。哈哈,毕竟程序员要做到知其然,还要知其所以然不是。SparkSQL的核心是Catalyst,SQL语句的解析以及最终执行计划的运行都是Catalyst来实现的,所以对SparkSQL的学习就是对Catalyst的学习。SparkSQL(Catalys)整体流程介绍:无论是使用 SQL语句还是直接使用 DataFrame 或者 DataSet ...

2021-07-27 22:58:16 1803 1

原创 Flink二阶段提交方式写入MySQL

项目中需要使用Flink消费Kafka中的数据,然后使用二阶段提交的方式写入到MySQL里面。网上找到了一大堆相关的例子,但是没有一个是靠谱的,全TM是复制粘贴而且还是不能用的那种! 开发+调试,浪费了我好几天的时间,哎,其实也是自己太菜了。所以本文就是解析下Flink二阶段提交的源码,然后给出自己的二阶段提交的实现。如果文章中有错误,非常欢迎大家的指正,多多交流!网上找到的Flink二阶段方式写入MySQL的代码:完整代码我就不贴全了,反正都是差不多类似如下的代码:packa...

2021-06-25 08:27:30 2274 4

原创 Hive文件存储格式选择

如果追求的大数据量下的快速写入,选择Text。如果追求的是磁盘空间使用最少,选择ORC。其他情况,无脑Parquet

2021-06-20 16:24:38 280

原创 MySQL数据写入的一些相关概念了解

最近在使用Flink以二阶段提交的方式写入MySQL,其中涉及到了Flink的二阶段提交,MySQL的事务机制,锁机制等等,所以本文就是来介绍下MySQL事务性写入时的一些概念,至于Flink二阶段提交写入MySQL,后续会另外开一篇文章进行分析。事务性写入MySQLDemo:public static void main(String[] args){try {Connection conn = null;// MYSQL驱动Class.forName("com....

2021-06-14 22:44:28 446 2

转载 MySQL与Redis的区别与联系详解

1. MySQL和Redis的数据库类型MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢.Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限.2. MySQL的运行机制MySQL作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库.第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数

2021-05-07 22:44:13 3749

转载 (转载)Spark任务输出文件过程详解

一、Spark任务输出文件的总过程当一个Job开始执行后,输出文件的相关过程大概如下:1、Job启动时创建一个目录: ${output.dir}/_temporary/${appAttemptId} 作为本次运行的输出临时目录2、当有task开始运行后,会创建 ${output.dir}/_temporary/${appAttemptId}/_temporary/${taskAttemptId}/${fileName} 文件,后面这个task的所有输出都会被写到这个文件中3、当task运行完

2021-04-20 22:00:03 1003

原创 Spark中的等值Join策略解析

最近工作中SparkSQL写了也不少了,整天Join来Join去的,哈哈哈,所以来了解下Join的底层原理吧,不想把Join当个黑盒一样的去使用。Spark支持Inner、full outer、left join、right join 、leftsemi、leftanti、cross这几种Join方式,具体每种Join得到的结果是啥,这里就不一一解释了,可见"参考一"中的内容...本人一般常用的也就是Inner 、outer、 left join和 leftsemi使用的多一点,其他几个暂时用的还...

2021-04-12 23:15:29 1359

原创 Spark读写Hive表导致cache失效问题

最近写spark程序的时候发现了一个奇怪问题。我cache了两个DataFrame,暂且称它们为A和B好了,然后将A和B通过SQL语句以inser overwrite的方式分别写入到两张Hive表中。但是发现如果我先将A写入再写入B,B这个DataFrame会触发重新计算...曾经一度以为自己触发了Spark某个未知的Bug,但是突发奇想将代码的顺序换了一下,先写入B再写入A,发现cache又是生效的。两者的执行计划分别如下所示,确实一个走了cache,另外一种没走:找了半天终于在Spar...

2021-03-07 23:22:06 817

原创 HSQL调优的一些个人见解

1. order by 全局有序,只有一个reduce(不管reduce task的数量设置成多少个,MR框架都会只设置成1个reduce)2. sort by 每个reduce内部排序,对全局来说不是排序。 一般要结合distribute by(分区函数)使用。 数据会按distribute by 写出,写成文件?还是写道不同的分区里面??? 如果指定distribute by,那么MR框架使用字段进行hash分区。3. cluster by...

2021-02-28 22:19:49 1046

原创 Hive执行计划初步了解

21

2021-02-12 20:48:47 1099

转载 hive 结合执行计划 分析 limit 执行原理

在hive查询中要限制查询输出条数, 可以用limit 关键词指定,如 select columnname1 from table1 limit 10; 这样hive将输出符合查询条件的10个记录,从根本上说, hive是hadoop提交作业的客户端,它使用antlr词法语法分析工具,对SQL进行分析优化后翻译成一系列MapReduce作业,向hadoop提交运行作业以得到结果. 看一条简单的SQL语句:selectdeviceidfromt_aa_pc_logwhere...

2021-01-24 22:57:19 3601

原创 Hive解析json字段,虽然json_tuple写法很优雅,但是效率并不一定高哦

在写Hive SQL时,需要从一个json列中解析出多个key的信息,查阅资料了解到有两种写法,一种是get_json_object,另外一种是json_tuple。两种用法的示例如下所示get_json_object示例:selectget_json_object(json_str_column,'$.a1') as a1,get_json_object(json_str_column,'$.a2') as a2,get_json_object(json_str_colum...

2021-01-19 23:17:12 10168

原创 Spark的动态Executor机制

最近在Spark程序运行的过程中发现了一个问题,系统每天会运行很多任务,任务计算逻辑是一样的,但是每个任务拉去的数据量有多有少,不知道怎么给Spark程序设置多少资源比较合理。这时候Spark的动态Executor分配机制就派上用场了,它会根据当前任务运行的情况自动调整Executor的数量,实现资源的弹性分配。Spark的动态Executor分配机制介绍://开启Dynamic Resource Allocationspark.dynamicAllocation.enabled=true.

2020-12-20 23:01:48 2989

原创 Flink的背压机制

想起来之前被问到了一个问题,如果Flink中的Task是一直不停的运行的话,那么拉取Kafka数据的Source端是不是会一直不停的拉取数据,如果消费速度不及时,内存不就很快会被撑爆了么?一开始对这个问题是一脸闷逼,后来随着对Flink使用的逐渐深入,对Flink的内部也有了一定的了解,所以本文就来了解下Flink内部的反压机制,看下反压机制是如何解决该问题的。什么是反压以及反压所带来的影响?在流处理系统中,出现下游消费的速度跟不上上游生产数据的速度,就种现象就叫做反压。出现反压时...

2020-11-18 22:58:44 9427 4

原创 Flink的低延迟、高吞吐与Task之间的通信机制

Flink自称是一个低延迟、高吞吐、有状态、容错的流式计算矿建。其中容错在之前的《Flink的ExactlyOnce语义与Checkpoint的实现》文章中已经说过了,容错是在数据流中周期性的注入一条CheckPointBarrier记录,各Task看到这种记录时,会将State持久化到后端存储中。如果发生了异常,可以从CheckPoint目录中恢复任务运行以及状态。 本文主要了解下Flink是如何实现低延迟与高吞吐的。低延迟 VS高吞吐: 低延迟和高吞吐其实是悖论。...

2020-10-19 22:18:45 2329

转载 ElasticSearch scroll查询原理

一、 ES搜索两阶段简介ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。Fetch阶段比较重,需要将每个shard的结果取回,在协调结点进行全局排序。 通过From+size这种方式分批获取数据的时候,随着from加大,需要全局排序并丢弃的结果数量随之上升,性能越来越差。二、 scroll分析Scroll查询,先做轻量级的Query阶段以后,免去了繁重的全局排序过程。 它只是将查询结果集,也...

2020-09-27 22:12:11 4674 1

原创 Flink中的状态一致性(再细说下Checkpoint)

CheckPoint流程如下:Coordinator发起trigger Source中注入barrier Source保存自己的状态 将状态的保存路径state handle汇报给coordinator下游task接收到barrier后继续保存状态,并向下继续传递barrier所有的operator都snapshot完成后,jobmanager会标记此次Checkpoint为completed checkpoint,并将meta存储到backend中...

2020-09-13 22:54:23 2374 4

原创 Kafka的幂等性与事务性理解

最近在深入理解Flink的Exactly-Once,发现Flink Checkpoint只能保障Flink程序内部的一致性,无法保证Sink到外部系统的Exactly-Once语义。但是Sink到外部如果实现了TwoPhaseCommitSinkFunction这个抽象类就能实现端到端的Exactly-Once语义,而Kafka刚好也实现了这个这个类,所以先来研究下Kafka的Exactly-Once是怎么实现的。 在Producer向Kafka发送消息的时候,如果消息成功被写入到日志文件...

2020-09-08 12:53:27 6275 4

空空如也

空空如也

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

TA关注的人

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