- 博客(65)
- 收藏
- 关注
原创 Java并发进阶系列:深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(上)
在单线程场景下,HashMap适用于key为无序的键值对存放,而TreeMap适用于key为有序的键值对存放。在高并发场景下,ConcurrentHashMap适用于key为无序的键值对存放,但对于高并发且要求key有序的场景下,首先TreeMap显然是非线程安全,那么还有什么高并发容器是支持的呢? 在Concurrent包里面只有跳表:ConcurrentSkipListMap可以满足"乐观锁的高并发和key有序"需求,而且其设计不会像ConcurrentHashMap这么复杂,但确有着很好的场景,例如
2025-06-13 21:53:45
941
原创 Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的computeIfAbsent源代码修复逻辑
在文章中《深度解析官方关于jdk1.8的resizeStamp的bug处理过程》,我们讨论关于CHM的核心设计——resizeStam需要修复的处理过程,本文再次基于openJDK的bugs讨论组提出的CHM源代码另外一个会造成死循环的bug,默认读者已经掌握CHM的核心源代码实现,否则无法从本文的讨论中获益。文章前部分先把computeIfAbsent的bug成因分析清楚,再来介绍官网ConcurrentHashMap.computeIfAbsent stuck in an endless loop的讨论
2025-05-20 17:45:06
723
原创 Java并发进阶系列:jdk1.8 ConcurrentHashMap的TreeBin读写锁竞争机制讨论
本文接前面ConcurrentHashMap文章的内容,继续深入到TreeBin这个特殊节点的读写锁竞争机制。7、TreeBin类设计原理对TreeBin类深入分析,不仅能够理解为何CHM能支持并发读的底层实现,而且也能加深jk1.8的ConcurrentHashMap整体设计原理。本文将非常细腻地解析TreeBin优秀的读写锁控制设计,此部分内容在全网的相关文章很少涉及。7.1 保证加锁对象不改变的设计思想首先看其源码的注释说明:TreeNodes used at the heads of b
2025-05-20 17:44:47
867
原创 Java并发进阶系列:深度讨论jdk1.8 ConcurrentHashMap并发环境下transfer方法桶位分配过程
在前面有多篇关于jdk1.8的ConcurrentHashMap研究是基于源代码给出的深度分析,要知道多线程环境下的ConcurrentHashMap内部运行机制是相对复杂的,好在IDEA提供的相关断点和Debug功能确实好用,使得多线程调试起来直观,通过这种方式能加深多线程操作CHM的执行流程。前期准备这部内容请参考文章中的小节部分,本文不再累赘。使用埋点打印法观测此方法相对繁琐,也比较入门,要求使用者对源代码设计足够理解,否则埋点位置不佳影响观察效果1、测试代码package concur.
2025-05-20 17:44:14
897
原创 Java并发进阶系列:jdk1.8的HashMap红黑树设计原理及其源代码深入解析(不含balanceDetection方法)
在前面的《jdk1.8的HashMap源码分析》文章已经给出HashMap中数组+链表这一部分的内容,本篇文章将剩余的HashMap里面红黑树及其相关操作源码进行解析,内容较多,因此单独放在一篇文章进行讨论。一、背景知识由于红黑树的插入、删除、扩容等操作相对复杂,因此建议先熟悉基本数据结构,例如二叉树、二叉搜索树及其关于它的查找、插入、删除操作、2-3节点树等。本人假定看此文章的同学已经具备基本的数据结构知识,因此,关于红黑树的背景知识,这里不再累赘。冷知识:红黑树为什么叫红黑?节点为什么被标记为红
2025-05-20 17:43:23
619
原创 spark的缓存提升本质以及分区数量和task执行时间的先后
可以看到10个tasks并不是同时执行的,因为只有4个cpu,因此第1组4个task先在33秒进行,第2组task等第1组结束后,从35秒开会执行,最后两个task等第2组完成后,从38秒开始执行。执行后,spark安排了10个tasks,当然每个task负责的数据量从32M降到14.6M,那么这个10个task的运行时序是怎么调度的呢?因为数据是145M,虚拟机有4个核,自动分区为4+1共5个分区,因此executor进程需要开启5个线程,也即5个task。那么这5个task是同时执行代码吗?
2025-05-20 17:40:49
925
原创 Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的resizeStamp源代码修复逻辑
前言首先给出以下open JDK版本的序号说明和Oracle JDK序号说明(1)对于JDK8或者Java 8即可指代openjdk-8-jdk或者java-1.8.0-openjdk,也可指代Oracle家的Java SE 8或者JDK 8u211 and later(1)对于JDK16或者Java 16即可指代openjdk的JDK 16.0.2也可指代Oracle家的Java SE 16或者 jdk16.0.1这里为何给出Java 8和Java 16版本说明?因为本文所提的bug在J
2025-05-20 11:18:05
604
原创 基于AQS驱动的ReentrantLock公平锁和非公平锁实现原理解析
本文是入门和理解AQS框架的重要文章,尽管AQS还有共享模式以及条件Condition等设计,但重入锁仍然是最适合理解AQS底层数据结构及其算法设计的切入点。单线程使用可重入锁的内部简单工作机制分别在以下两个断点位置进行debug,断点条件i==5,并且在variables窗口watch一个特殊的变量stateimport java.util.concurrent.locks.ReentrantLock;public class ReentrantLockDemo { public sta
2025-05-20 11:17:17
759
原创 Java并发进阶系列:深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(下)
文章说明:因为CSM解析内容较多,因此全文分为“深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(上)”和“深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(下)”两篇文章上篇:CSM数据结构设计原理、doGet、doPut核心方法解析下篇:doRemove核心方法解析、总结remove方法:删除操作的设计原理这里先介绍Doug Lea在源代码注释给出算法设计说明:n.helpDelete(b,f)的设计原理在上面的get、put方
2025-05-20 11:16:53
893
原创 Java进阶系列:深度解析jdk1.8的HashMap红黑树balanceDeletion节点删除平衡算法设计(核心文章)
这可能是全网最期待的jdk1.8的红黑树balanceDeletion的源代码解析技术文章了!其实掌握HashMap红黑树的同学都知道,balanceDeletion方法的源代码是HashMap红黑树部分最复杂也是最难理解的部分,若想写成高质量的源码分析文章,要求coder精通其内部实现,并且能用可理解语言和可理解图结构展示给他人。当然在全网能对balanceDeletion的coder较少,绝大部分所谓关于深入HashMap分析的文章都会跳过balanceDeletion源代码,有部分文章的coder他
2025-05-20 11:15:42
811
原创 Java高级主题:深入解析ThreadLocal的数据结构设计原理及其源代码实现
ThreadLocal可以实现完全基于无锁且也不是基于CAS的线程隔离需求,让每个线程可以有自己的本地实例,但如果对ThreadLocal底层设计不了解,那么对甚至无法正确ThreadLocal及其可能出现的内存泄露问题。可以说ThreadLocal的源代码设计也一种非常优秀的可支持“高并发”的实现。1、基本用法:1.1 demo1public class ThreadLocalDemo { static class ProducerA extends Thread{ @Ove
2025-05-20 11:06:35
806
原创 基于AQS实现的ReentrantReadWriteLock源代码深入分析
在ReentrantLock的独占模式下,当需要在一个读写高度竞争场景中使用它的lock.lock()时,你会发现这是独占锁,它会让大量其他读线程和写线程都进入CLH阻塞队列中等待,如果在“读多写少”的场景中,ReentrantLock的这种独占锁方式显然会降低并发性能,因此ReentrantReadWriteLock就是为了解决这种“读多写少”的场景:读操作可以请求读锁(共享锁),意味着多个读线程可以并发读,写操作可以请求独占锁,其他写线程和读线程都需要等待。这里首先通过Doug Lea在源码注释给出的
2025-05-20 11:05:25
907
原创 pandas使用to_sql快速写入mysql
https://blog.youkuaiyun.com/LeiLiFengX/article/details/109922043指定数据类型to_sql()时对应的字段类型设置参数dtype使用方法:DATE,CHAR,VARCHAR… 可以去 sqlalchemy 的官方文档查看所有的sql数据类型: [‘TypeEngine’, ‘TypeDecorator’, ‘UserDefinedType’, ‘INT’, ‘CHAR’, ‘VARCHAR’, ‘NCHAR’, ‘NVARCHAR’, ‘TEXT’, ‘T
2025-02-12 15:26:14
217
原创 pandas常见的棘手编程汇总
如果是字符串中仅有一个%,那么python会把它解析为字符串占位,因此解决办法是:加多一个%此时bad_cols存放三列数据,表名,原字段,剔除其他字符的中文字段。考虑到当表1和表2含有相同的字段名称时,通过df合并后,就会出现以下。解决unsupported format character。当要处理的表有是中文加各种符号时,提示。例如有些字段在创建时采用无意义字符,保留字段里面的中文,去到其他字符。关于模糊查询的sql中出现异常。或者:(此写法作为推荐写法)返回表名中含有关键字的表。
2023-09-09 16:42:49
29
原创 分析Kafka offset管理与Spark Streaming背压速率(待更)
1、背压问题涉及到自动调整ss消费消息的速率,以便让计算处理能力跟接收消息的能力匹配2、手动管理offset的文章为何要管理offset三种场合都需要保证重启ss进程后,能够接着上次消费的位置进行消费...
2020-03-19 22:21:45
645
原创 基于PySpark整合Spark Streaming与Kafka
本文内容主要给出基于PySpark程序,整合Spark Streaming和Kafka,实现实时消费和处理topic消息,为Python开发大数据实时计算项目提供基本参考。(后续将陆续给出基于Scala开发大数据实时计算项目的文章)1 程序环境准备:虚拟机A:启动单实例kafka服务虚拟机B:运行PySpark程序在VM A,程序环境要求安装jdk1.8以上以及与kafka匹配版本的s...
2020-03-06 23:43:11
9120
9
原创 深入理解异步IO的底层逻辑——IO多路复用(select、poll、epoll)
文章目录前言1、理解文件描述符1.1 基本概念1.2 打开一个文件1.3 对文件描述符进行读写1.4 通过管道打开文件描述符1.5 常见的文件描述符0、1、21.6 进程打开文件描述符的个数1.7 文件描述符底层原理本节小结2、 IO多路复用原理2.1 IO触发用户空间与内核空间之间的切换2.1 IO模型的介绍前言 在前面两篇文章《gevent与协程》和《asyncio与协程》,讨论了有关协...
2020-01-21 23:12:17
4844
原创 Spark DataFrame、Spark SQL、Spark Streaming入门教程
文章目录前言1、RDD、Spark DataFrame、Spark SQL、Spark Streaming2、Spark DataFrame2.1 创建基本的Spark DataFrame2.2 从各类数据源创建Spark DataFrame2.3 Spark DataFrame持久化数据2.4 Dataframe常见的API3、Spark SQL4、Spark Streaming实时计算TCP...
2020-01-14 21:50:59
2207
原创 基于PySpark和ALS算法实现基本的电影推荐流程
2、读数据多个api基本常用读取数据的apisc.pickleFile() # <class 'pyspark.rdd.RDD'>sc.textFile() # <class 'pyspark.rdd.RDD'>spark.read.json() # <class 'pyspark.sql.dataframe.DataFrame'>spark.read...
2020-01-11 10:23:19
5102
原创 深入解析asyncio与协程
文章目录前言1、asyncio的基本概念2、使用asyncio2.1 使用async关键字和await定义协程2.2 task对象2.2 future对象2.3 获取协程并发执行后的所有返回值2.4 asyncio.gather vs asyncio.wait2.5 嵌套协程的实现2.6 如何取消运行中协程2.7 理解loop的相关方法2.7.1 loop.run_until_complate ...
2020-01-04 21:10:48
1393
原创 gevent与协程
文章目录1、 yield 实现协程1.1 yield 同步执行1.2 启动多个yield模拟consumer并发2 、greenlet实现的协程2.1 简单gevent协程例子2.2 gevent 高并发测试2.3 理解gevent的monkey.patch_all()2.2.1 locals()方法2.2.2 gevent 替换非阻塞的模块的思路3、gevent examples3.1 使用协...
2019-12-28 14:42:52
871
原创 深入理解RDD弹性分布式数据集
文章目录前言1、RDD简介2、创建RDD3、宽依赖和窄依赖4、通过RDD的依赖关系构建DAG计算图5、RDD 持久化6、RDD的checkpointing机制7、Spark分区与RDD分区(待更新)前言 在前面的博客《深入理解Spark》 深入探讨了Spark架构原理内容,该文提到Stage的划分,为什么要做Stage划分?是为了得到更小的Task计算单元,分发给Executor的线程运行,...
2019-12-26 19:37:19
1211
原创 深入理解Spark
在前面博客文章里,已经把大数据实时分析项目在spark组件之前的各个组件原理、部署和测试都给出相关讨论,接下来是项目最核心的内容:实时计算部分,因为项目将使用spark streaming做微批计算(准实时计算),因此接下的文章内容将深入spark以及spark streaming架构原理,为后面实际计算编程做铺垫。1、Spark 是什么? Spark是一种分布式的并行计算框架,什么是计...
2019-12-22 16:31:16
1158
原创 基于Sentinel模式部署高可用Redis
文章目录1、安装redis2、Sentinel 的配置说明2.1 官网有关Sentinel模式的基本信息2.2 redis官网Sentinel模式说明3、一主两从的redis架构配置3.1 配置主从的**redis.conf**文件3.2 启动和测试主从4、sentinel 高可用配置4.1 配置sentinel.conf4.2 测试redis高可用5、在python项目或者django的项目引入...
2019-12-20 21:31:37
1043
原创 深入解析Python元类功能
文章目录前言1、python的class也是一种object1.1 python的class也是一种object1.2 动态创建类2 、Python的metaclass元类前言python的元类使用场景一般在大型框架里面,例如Django的ORM框架、基于python实现的高级设计模式,元类的这部分内容相对晦涩,但也是作为python非常核心的知识点,通过解析其机制,有利于阅读和学习优秀中间件...
2019-12-18 19:39:36
304
原创 基于YARN HA集群的Spark HA集群
文章目录前言1、yarn HA模式的配置1.1 完整 yarn-site.xml配置1.2 mapred-site.xml的配置文件说明1.3 yarn HA的启动2、spark HA 集群及其基本测试2.1 修改spark配置2.2 启动spark集群3、spark on yarn3.1 spark集群跑在yarn上的两种方式3.2 测试spark on yarn前言 在前面的《基于h...
2019-12-08 18:06:08
1282
原创 flume集群高可用连接kafka集群
文章目录前言1、在kafka集群上创建相应的topic2、单节点配置flume的agent sink为sink2.1 配置flume 文件2.2 测试数据消费情况3 、flume NG集群连接kafka集群前言 在前面blog文章中:《在hadoopHA节点上部署flume高可用组件》和《在hadoopHA节点上部署kafka集群组件》,已经实现大数据实时数据流传输两大组件的部署和测试,本文...
2019-12-05 21:00:22
1864
原创 深入理解kafka
文章目录前言1、kafka集群架构图2、kafka 高性能读写的设计2.1、利用read-ahead 和 write-behind提升写性能2.2、使用pagecache缓存程序数据提升读写性能2.3 通过sendfile(零拷贝机制)提高消费者端的读吞吐量3、kafka的repilcas副本机制3.1 主分区的副本3.2 leade如何管理follower节点3.3 Replica如何均匀分布到...
2019-12-01 12:16:41
1440
原创 在hadoopHA节点上部署kafka集群组件
文章目录前言1、Kafka的基本介绍1.1 什么是kafka1.2 kafka 应用场景1.3 kafka相关术语2、kafka 单点部署与测试2.1 配置文件2.2 启动kafka进程2.3 测试topic3、kafka集群部署与测试3.1 配置server.properties3.2 集群测试3.3 在zk上查看集群情况4、kafka的架构原理4.1 Kafka集群的leader选举前言在...
2019-11-28 22:02:03
577
原创 Python开发常用的虚拟环境管理配置
文章目录前言1、python虚拟工具介绍1.1 virtualenv1.2 virtualenvwrapper1.3 venv1.4 pyenv2、python虚拟化环境实现原理3、使用virtualenv作为最终python虚拟环境管理工具3.1 为多个python版本安装相应的pip3.2 安装virtualenv4、virtualenv创建虚拟环境前言在项目中,或者跑一些demo,例如...
2019-11-27 19:24:21
717
原创 在hadoopHA节点上部署flume高可用组件
文章目录前言1、flume 的基本介绍1.1 基本介绍1.2 数据流模型2、flume的配置文件说明2.1 配置过程3、单点flume agent测试3.1 基本安装3.2 启动flume agent进程3.3 将source.type配成tail F4、flume高可用配置4.1 三个agent的flume配置4.2 配置 collector前言前面的blog已实现了hadoopHA的项...
2019-11-24 16:17:22
1188
原创 Pandas数据预处理的常用函数
文章目录前言1、读取数据文件1.1 读取excel数据文件1.2 读取csv文件1.3 读取数据时,跳过尾行1.4 读取特定分割符的数据文件1.5 使用c或者python作为读取文件的引擎1.6 使用迭代器读取超大文件2、查看数据的基本信息3、有关空值处理3.1 行的空值处理3.2 列的空值处理3.3 空值的填充3.4 空值使用所在列或者所在行的均值、中位数来填补4、dataframe 取(定...
2019-11-22 23:30:19
2291
原创 hadoop平台网络配置bond模式实现高可用
文章目录项目背景1、为测试服务器添加多个网卡2、查看测试服务器的网卡信息3、配置两个网卡3.1 这里需要先把原网卡配置拷贝一份作为备份。3.2 将ens33和ens37配成slave模式4、配置bond0虚拟网卡5、bond0的配置说明和工作原理6、 加载内核bond模块 modprobe bonding7、查看bond0虚拟网卡状态并测试主备网卡切换项目背景 在前面文章关于hadoop大数...
2019-11-19 20:54:57
559
原创 深入functools.wraps、partial
文章目录前言:第一部分内容:第二部分内容:第三部分内容:1、python的魔法方法`__slots__`的作用1.1、 slots方法保证实例不会创建`__dict__`方法1.2、为何列表占用空间比元组大?2、attrgetter/itemgetter类的解析2.1 attrgetter的使用场景2.2 attrgetter的内部实现:2.3 itemgetter的使用场景2.4 itemget...
2019-11-17 22:04:06
481
1
原创 构建高可用Hive HA和整合HBase开发环境(一)
文章目录1、Hive Requirements2、Hive 环境部署2.1 配置环境变量2.2 配置hive-env.sh和hive-site.xml2.3 配置Hive的运行日志2.4 加入mysql connector2.5 在mysql建表2.6 初始化hive schema2.7 在mysql上查看hive创建的元表2.8 启动hive3、hive建表测试3.1 创建一个员工表3.2 h...
2019-11-16 09:32:21
804
原创 supervisor管理web服务进程
部分较小的项目例如flask,对内部使用,可无需使用web server,直接用flask自带服务即可完成需求,但考虑到直接使用python app.py启动flask 应用时,在部分情况下,前端使用可能会导致flask进程退出,因此有必要对其进行监控并自动重启,supervisor可满足需求,加上其用python写成,完全可以独自进行二次开发。本文是对以往部分项目进行一个整理,作为参考资料归档。...
2019-11-06 23:16:49
1496
原创 HBase架构分析
在前面的文章中,详细给出了HBase HA高可用部署以及测试的内容,本篇文章将对HBase架构进行分析。1、有关HBase基本介绍1.1 HBase解决的痛点:解决随机近实时的高效的读写解决非结构化的数据存储1.2 HBase应用:可以存储非结构化的数据被用来做实时数据分析(整合flume、storm、streaming等)引用HBase作为业务存储,则需要注意的点(按官...
2019-11-02 09:37:41
376
原创 基于Hadoop HA集群部署HBase HA集群(详细版)
前面的博客中链接1、前言已经给出Hadoop3.1.2和yarn的完整部署(但还不是高可用),此篇博客将给出Hadoop的高可用部署,以及HBase高可用,为之后应用数据层开发提供底层的BigTable支持。前面的文章,我们已经深入讨论的ZooKeeper这个中间件的原理以及分布式锁的实现,事实上zookeeper使用最广泛的场景是“选举”主从角色,Hadoop以及Hbase的高可用(主从架构...
2019-10-28 22:26:17
5203
5
原创 MapReduce设计原理
(注意本文主要为个人理解、记忆以及归档而整理的技术文章,所以用词、句以个人易于理解的方式去组织。)1、MR基本定义参考百度百科定义,简要概括如下:MapReduce是分布式的计算框架或者解决方案,大致有基本内容:1)首先MapReduce重点是工作在集群的节点上,而非在单台服务器上做计算、做统计等2)MapReduce把用户提交的任务以分布式放在多个节点上执行,自动划分计算数据和计算任务...
2019-10-27 11:37:02
758
原创 理解HDFS文件系统架构和原理
1、hadoop是一种具体的技术吗?准确的说,hadoop是一套大数据的解决方案或者技术栈,不仅仅特指某种大数据技术,由Apache基金会上多个与大数据有关的明星组件构成,包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统)、Spark、Hive、Hbase、Mahout、Zookeeper、Flume等,如下图所示。本文将重点讨论HDFS、YAR...
2019-10-15 19:34:10
857
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人