- 博客(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
原创 智能体设计
智能体是一种能够自主感知环境、做出决策并执行行动的软件或硬件实体。具备自主性、适应性、交互能力。根据自身学习到的知识进行判断决策,然后执行动作,影响环境。
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
原创 并发可见性与总线窥探机制
在java并发编程中,要保证可见性,需要给变量增加volatile关键字。普通变量存在可见性的原因是多核CPU架构中各处理器缓存不一致造成的,需要解决缓存不一致问题,才能保证可见性,总线窥探就是实现缓存一致性的方案之一。
2023-03-21 23:32:39
182
原创 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
原创 2、类加载-方法区
类的加载阶段分别有:加载,验证,准备,解析,初始化其中只有加载是java层面完成的,将class文件载入到内存,后续都是通过调动native方法完成
2023-03-19 14:32:42
208
原创 11、mysql配置优化
最大连接数,每个连接都会占用一定的内存,在查询时传输数据占用内存会加剧,所以要根据系统内存合理配置最大连接数,防止过多占用内存。
2023-03-19 14:20:12
894
原创 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
原创 3、索引优化
为了提高mysql的查询速度,需要尽可能的使用到索引,否则mysql只能通过全表扫描,此时查询效率会很低, 但是如果表内数据很少, 全表扫描反而可能会更快。
2023-03-09 14:36:07
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人