自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 人工智能、机器学习、神经网络、深度学习、AI大模型的区别

AI方向的专用名词特别多,很容易混在一起,文本梳理下从机器学习到AI大模型发展历程和专业名词。下面按照概念的层次关系依次梳理。

2025-04-20 01:20:16 480

原创 Spark Streaming

Spark Streaming是Spark核心API的一个扩展,用于可扩展、高吞吐量、容错的实时数据流处理。为什么是一个扩展?因为Spark本身实现的是一个批处理计算,批处理计算存在延迟高,数据集还是有界的,所以只能处理离线计算。Spark Streaming利用Spark核心,实现了微批处理micro batch,使延迟降低到0.5-2秒内,可以完成对实时性要求不高的流式计算。支持多种数据源,包括Kafka、Flume、Twitter、TCP等。

2025-04-19 00:44:33 645

原创 Spark SQL

2 Spark是线程级并行,而Mapreduce是进程级并行,因此Shark在兼容Hive的实现上存在线程安全问题,导致Shark不断给Hive打补丁。完全兼容Hive,但仅依赖HiveQL解析和Hive的元数据,从HQL被解析成AST抽象语法树后,后面的部分完全由SparkSQL自己实现。Spark早期的SQL查询实现,即Hive on Spark,为了兼容Hive,重用了Hive除了MapReduce以外的几乎所有部分。RDD是分布式的java对象集合,而集合中对象的内部信息RDD是无法知道的。

2025-04-18 10:48:16 624

原创 Spark Core

分片的策略很多,使用hash分片策略的目的是因为这是一个去重计算,而hash分片会将重复的数据分到一个区。通过读取一个文件,然后经过一系列的转换操作,就产生了一系列有关系的RDD,这个关系图,就叫做DAG有向无环图,Spark就根据DAG进行依次执行。spark面向用户的使用接口,这是我们要使用Spark的入口,分为了四大模块,分别对应各个使用场景,他们的的实现都是基于spark核心RDD。RDD由于分区组成, 每个分区来自一个文件, 在HDFS中,如果将副本数设置为2,每个分区,会有两个实际的存储位置。

2025-04-18 10:46:39 475

原创 HBase

以HDFS角度来看,一个列簇等于一个目录,如果列簇过多,会造成文件夹多,加上LSM树结构特性,文件会频繁拆分合并,导致文件偏小,这不符合HDFS的优化方向。LSM树不会直接在树上做更新和删除操作,所有操作以插入的形式完成,最新插入的数据具有最高版本,然后通过不断的合并,最终将修改的数据合并到树结构中。HBase的设计是偏向写数据的,写数据流程十分简洁,但读数据要复杂的多,而且由于LSM树结构的分散问题,读取的性能是不如mysql的B+树。WAL是通过磁盘顺序写实现的,写入效率接近写内存,效率很高。

2025-04-10 01:06:58 992

原创 Hive(3)-调优与融合

hive.exec.reducers.bytes.per.reducer 每个reduce最大处理数据量,默认256Mb,如果是1G的文件,会产生4个reduce。HBase同样也是基于Hadoop之上的数据库引擎,HBase是一个列式数据库,他管理数据的效率非常高,但由于是列式存储的数据库,造成数据检索并不规范。将Hive的计算引擎更换为Spark,但配置复杂,使用较少,通常是Spark整合Hive,以Spark为入口。

2025-04-10 01:00:55 444

原创 Hive(2)-数据管理与查询

Hive自定义函数有三类:针对单行字段数据处理,输入单个数据, 输出单个数据针对统计数据, 输入一列数据, 输出一个数据针对生成数据, 输入一个数据,输出一列数据引入依赖创建函数为系统引入自定义函数#引入jar包#查看引入的jar包list jars;#创建函数#使用。

2025-04-10 00:59:29 1154

原创 Hive(1)-基础

在没有Hive的情况下,如果要对Hadoop进行数据级的查询和统计,需要编写mapReduce输出结果,不同的统计,需要编写不同的mapReduce,工作量很大且重复。有了Hive的情况下,通过编写sql,就可以对Hadoop的HDFS数据进行统计查询,Hive会根据sql自己组装mapReduce。数据源:数据存储系统(HDFS),Hive主要实现了对数据源的查询统计,数据的管理只提供了简单的操作。元数据:由Hive自己维护(通常存于mysql),用于对数据源的数据进行描述,包括库、表、字段等信息。

2025-04-09 23:59:31 464

原创 Hadoop(3)-YARN

application master 执行任务的管理者,相当于application的组长,针对具体任务向resource manager申请所需要的资源, 跟踪任务执行状态和执行进度。容量调度为了满足分配资源,需要提前获取任务所需的资源,这样就增加了一步操作,对性能产生影响,导致大任务执行速度会比FifoScheduler调度慢。不同的地方是队列内分配资源的方式, 容量调度是计算任务所需资源,按需分配,而公平调度不计算所需资源,先对队列内的任务平均分配平均分配 1/num)。

2025-04-09 23:54:22 1232

原创 Hadoop(2)-MapReduce

而在合并过程中,为了将相同的key快速合并到一起,ReduceTask 还会对数据再进行一次排序,排序之后的数据针对相同的key,局部有序。shuffle阶段会对数据进行分区处理,在分区时,一旦分区不均衡,就会导致下个阶段的各个reduce任务不均衡,造成部分reduce空闲。Mapper阶段输出的数据,会经过Partition进行分区,分区的目的是为了将mapper输出的数据保存到哪个文件。每个Reduce接收到的数据是按key局部有序的,但是多个Reduce任务之间的key并不能保证是有序的。

2025-04-09 23:53:20 776 2

原创 Hadoop(1)-HDFS

通过流程可知,nameNode是HDFS的核心,但nameNode却是单点的,一旦nameNode宕机,整个集群就不可用2NameNode也无法切换成nn。Hadoop是基于文件级别计算的,文件的个数会影响计算的效率,HDFS文件以128M进行块存储,所以要让每个块接近128存储资源利用率最高的策略。不适合处理大量小文件,小文件会导致文件块的数量过多,不仅增加了元数据,同时过多的文件处理也会浪费计算资源,大量花费在文件检索,而文件读取时间很短。不支持并发写,只能追加写,不支持文件修改。

2025-04-09 23:52:23 627

原创 行式row、宽列wide-column、列式column存储的区别

行式row、宽列wide-column、列式column存储的区别

2025-04-09 23:44:36 678

原创 智能体设计

智能体是一种能够自主感知环境、做出决策并执行行动的软件或硬件实体。具备自主性、适应性、交互能力。根据自身学习到的知识进行判断决策,然后执行动作,影响环境。

2025-03-27 13:06:18 693

原创 SQL Agent架构 NL2SQL

SQL Agent的作用就是将自然语言,转成sql语句,然后执行得到结果,又叫NL2SQL。其中主要的问题是大模型不知道数据库结构,但企业的数据库信息又不能暴露出去。就需要将企业数据库信息以提示词的形式发送给大模型。其中会有个最大的问题: 这个问题涉及哪些表,这些表的关系是什么,如何让大模型理解一些特定的统计术语?

2025-03-27 13:03:28 133

原创 RAG架构

对文章做摘要后,就可以通过RAG检索到总结性的Chunk,避免检索总结时,搜到无关内容适用场景:解决“这篇文章说了什么” “总结一下XXX”等全局性问题实现:通过mapreduce等方式分段抽取,通过模型为每段Chunk提取摘要信息。

2025-03-27 13:01:32 893

原创 spring boot2项目升级到spring boot3 jdk8升级到17

spring boot2项目升级到spring boot3 jdk8升级到17

2023-10-04 21:32:39 907

原创 基于redis的分布式锁

若给节点增加从节点,从而提高可用性, 但主从同步时仍然可能出现不一致的情况, 如主加锁成功,但在同步前宕机, 从节点变为主,没有锁。锁续命:在获得锁后, 增加一个定时任务,定期检测任务线程是否已执行完成,若未完成,则延长锁的过期时间。解决:加锁时候,value添加唯一标识(uuid), 解锁的时候判断是否是自己加的锁,然后删除锁。问题2:在删除锁逻辑中, 判断是否自己锁和删锁并非原子操作,还是会出现超时后删别人锁的情况。当为了性能,节点部署不多时,节点宕机容易造成半数锁失败,红锁 red lock。

2023-04-12 17:01:41 162

原创 分布式缓存问题与解决

5、在update操作时,需要更新数据库,更新缓存两个操作,这两个操作是非原子性的,在两个操作之间,数据库与缓存数据是不一致的,此时的不一致时间还不是很长。--------双写不一致。3、若管理端删除了某个数据,前端还停留在被删数据页面,此时前端请求了已经不存在的数据,缓存查找没有,会访问数据库,前端若一直请求,会持续对数据库造成压力。4、若大量并发瞬间访问了一个冷门数据(无缓存的),请求发现无缓存,会进行缓存重建,大量请求进行缓存重建,对数据库压力较大。------------缓存重建。

2023-04-12 17:00:05 262

原创 ThreadLocal内存泄漏的原因

Entry继承自WeakReference, Entry在构造函数使用super(k) 等同于 new WeakReference(key);如果不在key没被gc前,进行remove, 就没办法再通过key找到对应的value, value就会一直存在。也就是将key设置成弱引用, 当key的强引用都断开后,下次gc,key就会被清理掉。在扩容时, 会遍历Entry数组,清理掉key为null的数据。但如果一直不扩容, 则内存一直在占用, 所以需要手动清除下。此时Entry的key 就为null了。

2023-04-12 13:16:56 117

原创 ThreadPool

线程开启后会先执行一个提交的任务,然后再去阻塞队列去循环取任务执行,所以新开启的线程,可以直接运行一次任务,不用从队列里取。若当前线程数大于核心线程数, 使用超时阻塞取任务,若超时后仍然没有任务,则进行cas竞争,成功的线程跳出循环,结束线程。手动中断 shutdown shutdownNow, 直接对某一个线程中断无效,会被捕获中断,继续执行。可以自定义线程工厂类,给每个线程设置一个线程异常捕获方法,就可以自定义处理异常,而不会退出线程。当任务抛出异常后,线程也会被关闭,线程池会立即新增一个线程替补。

2023-04-12 13:09:26 76

原创 java - AQS

AQS是指AbstractQueuedSynchronizer类, 该类是JUC包下所有互斥锁的实现基础。它也是按照管程思想实现的。其中AQS,是管程的实现:state, 0无锁, 1有锁,大于1时表示锁重入了多次,加锁时一般通过cas修改state,修改成功意味着竞争到了锁。:通过双向链表实现,通过变量head tail维护,该队列按照先入先出,所以基于AQS的锁,很容易实现公平锁。

2023-04-12 13:05:34 135

原创 synchronized

当两个先后执行的线程,第一个线程完全结束后,开启第二个线程,共同持有同一个锁时,由于是先后执行没有交集都应该是偏向锁,并且锁头部中的线程id为各自线程。偏向锁撤销: 不等同于偏向锁解锁,偏向锁撤销一般是由于锁升级造成的,而加锁的前提条件是需要无锁状态,所以偏向锁撤销就是把锁的对象头转为无锁状态,然后等待加锁。需要等到安全点的时候。因为线程获取锁是通过cas操作的,在cas中,期望值是null,修改值为自身线程id, 所以锁切换线程时,必须要先变为无锁,才能再锁,否则cas无法成功。

2023-04-12 13:03:10 66

原创 进程通信与线程通信

进程通信与线程通信

2023-03-21 23:32:53 84

原创 并发可见性与总线窥探机制

在java并发编程中,要保证可见性,需要给变量增加volatile关键字。普通变量存在可见性的原因是多核CPU架构中各处理器缓存不一致造成的,需要解决缓存不一致问题,才能保证可见性,总线窥探就是实现缓存一致性的方案之一。

2023-03-21 23:32:39 182

原创 7、JVM调试命令和工具

调优对象: full gc的频率,频率越少越好,1天一次

2023-03-19 14:45:48 73

原创 6、JVM参数设置

-Xss:每个线程的栈大小-Xms:设置堆的初始可用大小,默认物理内存的1/64-Xmx:设置堆的最大可用大小,默认物理内存的1/4

2023-03-19 14:42:59 241

原创 5、垃圾收集器

serial parallel parNew cms g1 全是分代思想的实现者,所以分代思想的优化方式都是通用的,标记算法全是可达性算法实现。

2023-03-19 14:41:04 67

原创 4、jvm内存分配与回收-堆

当执行new指令时,首先会检查new指令后的类是否已被加载,否则会触发加载动作。

2023-03-19 14:35:28 104

原创 3、JVM虚拟机栈-栈

java虚拟机栈是线程运行时所需的存储栈,栈内存储的是栈帧,栈帧包含了本地变量表,操作数栈,动态链接,方法出口。

2023-03-19 14:34:03 54

原创 2、类加载-方法区

类的加载阶段分别有:加载,验证,准备,解析,初始化其中只有加载是java层面完成的,将class文件载入到内存,后续都是通过调动native方法完成

2023-03-19 14:32:42 208

原创 1、JVM结构总览

JVM由类加载子系统、运行时数据区、执行引擎组成。

2023-03-19 14:26:33 66

原创 11、mysql配置优化

最大连接数,每个连接都会占用一定的内存,在查询时传输数据占用内存会加剧,所以要根据系统内存合理配置最大连接数,防止过多占用内存。

2023-03-19 14:20:12 894

原创 10、innodb undo log

undo log 回滚日志,用于在事务失败时进行数据回滚,实现原子性的特性。同时也是实现MVCC机制的基础

2023-03-09 14:54:02 191

原创 9、mysql binlog

binlog 二进制日志文件,mysql实现,开启后会记录数据库的修改操作,每次事务提交成功,都会记录一次。

2023-03-09 14:51:25 164

原创 8、innodb redo log

redo log 重做日志,innodb存储引擎实现的日志,用于实现持久化特性,并提高写入磁盘的速度。

2023-03-09 14:47:58 136

原创 7、mysql innodb 底层原理

mysql主要分为Server层和存储引擎层Server层包含连接器,查询缓存器,分析器,优化器,执行器,实现了数据库主要功能。

2023-03-09 14:43:05 89

原创 6、MVCC

MVCC(Multi-Version Concurrency Control) 多版本并发控制作用:在RC RR级别下,实现读写并发,读操作不受写的影响。实现:innodb层面实现,通过undo log和可见性算法实现。

2023-03-09 14:42:15 57

原创 5、mysql锁

mysql是并发处理数据的,而数据又是共享资源,所以mysql必须运用锁才能实现并发的安全访问。

2023-03-09 14:39:44 62

原创 4、mysql事务

事务是数据库一组不可分割的操作序列,实现最终一致性。事务也是数据库并发控制的最小单位。

2023-03-09 14:37:59 54

原创 3、索引优化

为了提高mysql的查询速度,需要尽可能的使用到索引,否则mysql只能通过全表扫描,此时查询效率会很低, 但是如果表内数据很少, 全表扫描反而可能会更快。

2023-03-09 14:36:07 152

空空如也

空空如也

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

TA关注的人

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