- 博客(519)
- 资源 (9)
- 收藏
- 关注
原创 大白话实战Seata
每个微服务连的都是自己的数据库,如果我们做一个购买业务,我要做的就是创建一个订单,并且把这个商品的库存扣了,然后去账户扣减余额,所以这个购买业务会调用三个微服务。上面是一段jdbc完成事务的代码,第一步是从数据源里获取连接,这个连接就是连向了某个数据库,第二步给这个连接设置非自动提交,也就是进入手动提交模式,接下来写我们的业务逻辑,写完后调用提交方法,如果业务执行期间出现异常,可以统一回滚,通过这段代码发现,我们以前的事务是在一条连接里面做的所有事情,它才可以一起提交和一起回滚,这个是我们本地事务的根源。
2025-02-22 16:36:06
721
原创 大白话实战Gateway
虽然SpringCloud里面内置了非常多的断言规则,但是它也不能囊括我们业务的所有规则,这个时候我们可以自己写一个断言工厂,通过配置的方式使用起来。假设我们有个需求,只有vip的用户才能转到必应去搜索,那怎么判断vip呢,我希望它自己从请求参数中拿到user并且user=aaa,它才是vip。q=haha?} };} };import org。
2025-02-20 23:29:55
1457
原创 大白话实战Sentinel
Sentinel是SpringCloudAlibaba提供的用来做服务保护的框架,而服务保护的常见手段就是限流和熔断降级。
2025-02-18 21:05:42
1079
原创 大白话实战OpenFeign
避免这种问题的最简单的处理方式就是加入限时等待,比如只等待商品服务10s,如果没有超过,自然就返回正确结果,否则就中断调用。可以看出默认是从不进行重试。响应拦截器用的不多,我们就用请求拦截器为例进行测试,我们希望订单服务给商品服务发送请求之前,用请求拦截器给这次请求里面放一个业务扩展字段,比如X-Token,在业务上代表一个一次性令牌,后边的值可以是一个uuid,把这组k-v放到本次请求的请求头上,最后商品服务收到这个请求,就可以从请求头上拿到X-Token的数据,接下来我们来实现这个需求。
2025-02-15 21:48:06
1003
原创 大白话演绎SpringCloud架构进化过程
同理,数据库服务器也可以复制多台副本。以前的架构我们在每一台服务器上部署了商城的完整应用,这样每一处代码的更新都得需要把应用重新打包部署,现在可以把整个应用,按照功能模块进行拆分,把一个大的应用,拆分成一个个小应用,比如商品、订单、支付等等,拆分出的每一个小应用,我们把它称为微服务,每个微服务都可以独立部署,不仅应用可以拆分,数据库也可以,以前商城所有的数据都在一个库里面,并发高的情况,所有增删改查都要经过这个库,可能同样扛不住,进一步拆分,把商品的数据放到商品数据库、订单数据放到订单数据库里,依次类推。
2025-02-07 22:12:08
1183
原创 Spark操作Hive表幂等性探索
旁边的实习生一边敲着键盘一边很不开心的说:做数据开发真麻烦,数据bug排查太繁琐了,我今天数据跑的有问题,等我处理完问题重新跑了代码,发现报表的数据很多重复,准备全部删了重新跑。我:你的数据操作具备幂等性吗?实习生:啥事幂等性?数仓中的表还要考虑幂等性吗?
2023-08-11 15:49:32
1252
原创 SparkSQL性能优化终极篇
随着Spark版本的不断迭代,SparkSQL底层使用了各种优化技术,无论方便性、性能都已经超越了RDD。因此SparkSQL已经是最常用的Spark开发方式,因此,这里把常用的SparkSQL性能优化技术进行汇总。
2023-06-12 13:46:10
2376
2
原创 Spark数据倾斜解决方案六:随机前缀和扩容Join(包含完整案例代码)
该想法的原因:Shuffle的时候把Key的数据可以分到不同的Task里。但是,现在的倾斜的Key非常多,成千上万,所以如果说采样找出倾斜的Key的话,并不是一个非常好的想法。需要考虑当前程序能够使用的Core的数目,扩容的问题是来解决从程序运行不了的问题,从无法运行到能运行的结果。该方案更多的是缓解数据倾斜,而不是彻底避免数据倾斜,而且需要对整个RDD进行扩容,对内存资源要求很高。同时对另外一个正常的RDD进行扩容,将每条数据都扩容成n条数据,扩容出来的每条数据都依次打上一个0~n的前缀。
2023-06-10 13:12:36
1448
原创 Spark数据倾斜解决方案五:对倾斜key采样后单独Join(包含完整案例代码)
对倾斜的Keys采样进行单独的Join操作步骤有点复杂:首先对RDD1进行采样,例如RDD1进行Sample抽样(15%)可以计算出一个结果,其是一个RDD,采样之后进行Map操作,通过reduceBykey操作计数,然后对Key和Value进行置换,通过SortByKey进行排序,再进行Map置换操作,从而找出哪一个Key值倾斜比较严重,对其进行过滤,提取到RDD11中,剩下的提取到RDD12中。避免了占用过多内存。如果倾斜的Key特别多,如50多个倾斜的Key,我们可以一个一个地对Key进行过滤处理。
2023-06-10 12:32:11
1181
原创 带你彻底理解Spark的分区
我:什么是RDD?面试者:RDD是被分区的,由一系列分区组成…我:你怎么理解分区?面试者:…我:Spark中有哪些可以实现分区的方法?分别使用的场景是什么?面试者…我:Spark默认分区数是多少?如何保证一个分区对应一个文件?面试者…Spark分区是将大型数据集划分为较小的数据块,每个数据块称为分区,分区是一个逻辑数据块,对应相应的物理块Block。每个分区都可以在集群中的不同节点上并行处理,这样可以提高Spark的并行性和性能。
2023-05-05 10:53:06
1347
原创 通俗易懂理解RDD看这一篇就够了
今天面试一个大数据开发工程师,spark相关的知识感觉都能懂一点,但是连基础的RDD稍微一问深一点就不知所云,这种情况基本上是无法通过面试的,今天想用通俗的话把RDD说明白。弹性分布式数据集)是Spark中最基本的数据抽象,代表不可变、可分区、可并行计算的集合。RDD允许将计算结构缓存到内存中,这样当后续计算需要这些数据时,就能快速从内存中加载它们,这样不但提高数据的复用性,还提高了数据的计算效率。RDD主要特点包括并行计算自动容错数据本地性调用等。
2023-05-04 18:26:37
2997
原创 repartition和partitionBy的区别
旁边的实习生一脸困惑:我把一个dataset的数据往某个文件夹或hive表中写的时候可以用partitionBy对数据进行分区,可是repartition顾名思义也好像与分区有关,这两个究竟有啥区别?我该如何使用?
2023-05-04 15:26:38
1011
原创 Spark需要的资源调优(Yarn Cluster模式)
Spark应用程序是粗粒度的,也就是说在提交的时候就得规划好需要多少资源,设定了不合适的资源也会影响整体性能。yarn.nodemanager.resource.memory-mb 每个nodemanager分配的内存,也就是该节点上YARN可使用的物理内存总量。官方。
2023-04-01 23:43:46
690
原创 Dataset关联性能优化
如果一大一小两个Dataset进行join,每个woker的内存足够存放小的Dataset,此时最好的处理方式就是将小的Dataset进行广播,有关广播的知识可以参考这篇文章。
2023-03-31 23:45:01
388
原创 广播变量对Spark性能产生的影响
先说一下为什么Spark会引入广播变量?我们在driver端定义了一个变量,如果要在executor端使用,spark会为把这个变量以task的形式给每个executor发送,也就是有多少个task,每个executor中就会有多少个变量,如果该变量是个集合,而且比较大,甚至会导致内存溢出。因此,引入了广播变量来解决这种问题。下面会用实际案例进行详细描述。
2023-03-31 17:25:50
463
原创 collect大RDD性能优化
众所周知,collect算子会把所有数据拉到driver端,如果数据量太大,直接会造成内存溢出。但是该算子在很多实际场景中会经常用到,这个时候就需要采取一定地方优化措施了。
2023-03-31 15:14:18
603
2
原创 Scala中如何优雅的处理Null
前言如果在scala代码还在使用ids!=null,可能会被有的人嘲笑,都什么年代了,竟然还有这样的写法,NullPointerException见少了吧?不过,据统计:Spark 源代码使用了 821 次 Option 关键字,但它也直接在像if (ids != null)。Spark 采用混合方式,大部分情况下使用 Option,但个别时候出于性能(这里主要是为了给使用这返回提示信息)原因才使用了null。一个很好的习惯是当有方法返回值可能为null的时候,使用Option来代替。什么是Op
2021-08-28 20:44:08
4075
1
原创 Python 连续数据离散化最通俗的理解与操作
前言一些数据挖掘算法,特别是某些分类算法,如ID3算法、Apriori算法等,要求数据是分类属性形式。这样,常常需要将连续属性变换成分类属性,即连续属性离散化。离散化是干啥连续属性离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。所以,离散化涉及两个子任务:确定分类数以及如何将连续属性值映射到这些分类值。常用的离散化方法常用的离散化方法有等宽法、等频法和(一维)聚类。(1)等宽法将属性的值域分成具有相同宽
2021-01-05 18:26:40
11287
1
原创 python 下采样和上采样
前言由于工作数据量较大,训练模型很少直接单机python,一般都采用SparkML,最近把SparkML的工作使用python简单的写了一下,先写个上下采样,最终目的是为了让正负样本达到均衡(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)数据准备共20条数据,正样本1共有5条,负样本0共有15条。基础知识准备如何获取dataframe的行数pandas.DataFrame.shape 返回数据帧的形状df.shape[0] 返回行数de.shape[1] 返
2020-10-28 16:23:27
10076
2
原创 Hadoop面向行和面向列格式详解
前言说到HDFS上面存储数据的格式,一般会想到面向行存储的Avro、SequenceFile(现在较少用);面向列存储的Parquet、ORC等,那么在存储的时候如何选择呢?面向行存储格式(以Avro和SequenceFile为例)Avro基本概念Avro是一个独立于编程语言的数据序列化系统。引入的原因:解决Writable类型缺乏语言的可移植性。Avro数据文件主要是面向跨语言使...
2020-01-17 11:10:54
1500
原创 Hive压缩存储(以Parquet为例)
前言前面说了,HDFS上的数据在生产环境中一定是以压缩格式存储的,那么在Hive中如何使勇Parquet格式存储数据呢?测试数据在本地服务器上面vim test.txt1,zs2,ls3,ww4,zl由于我们一般接到的数据都是gzip压缩的文件,这里就将文件压缩为gzipgzip -c test.txt > .test.gz错误的方式创建parquet的hive表...
2020-01-09 10:22:46
2202
2
原创 HDFS文件的压缩
前言新搭建的集群,需要进行各种测试,于是让一个同事导入一些测试数据,大约1.4T左右。我进行了一个简单的hive测试//故意增加shuffleSELECT DISTINCT(COUNT id) FROM test_table;谁知道…就这么一个简单的SQL,半个小时过去后,仍然没有出结果追查原因原来同事从ftp拉取过来的数据是gzip格式的,他直接如到Hive表中…,而gzip格式的...
2020-01-04 18:06:11
8203
1
原创 Pearson相关系数和Spearman相关系数的区别
前言相关系数是用以反映变量之间的相关关系程度的统计指标。其取值范围是[-1,1],当取值为0时表示不相关,取值为[-1,0)表示负相关,取值为(0,-1],表示负相关。目前常用的两种相关性系数为皮尔森相关系数(Pearson)和斯皮尔曼等级相关系数(Spearman)简介皮尔森相关系数评估两个连续变量之间的线性关系。其中:-1 ≤ p ≤ 1p接近0代表无相关性p接近1或-1......
2019-08-29 14:31:55
71710
10
原创 MapReduce过程详解
MapReduce是一种云计算的核心计算模式,是一种分布式运算技术,也是简化的分布式并行编程模式,主要用于大规模并行程序并行问题。MapReduce的主要思想:自动将一个大的计算(程序)拆分成Map(映射)和Reduce(化简)的方式。流程图如下:数据被分割后通过Map函数将数据映射成不同的区块,分配给计算集群进行处理,以达到分布运算的效果,再通过Reduce函数将结果进行汇...
2018-05-16 11:54:47
3379
原创 一看就会的python线程池
实习生:为什么每次让写多线程任务,我总是暗自恐慌,然后去网上搜索相关的代码?我:你就没有真正搞清楚应该怎么写,也并没有真正的手动写过,所以你心里没底就会慌乱。实习生:那你能不能告诉我一种让我很快掌握,甚至能一次性记住一种写处理多线程代码模板。我:你可以直接线程池。
2025-11-20 14:52:54
302
原创 通用大模型压测报告工具
我们部署完大模型在上线之前需要做一个压测报告,需要涵盖业界标准的压测指标,并输出结构化的压测报告。接下来我们写一个通用的压测报告代码。
2025-11-07 15:18:05
950
原创 深入理解 Python 中的 with 语句:优雅地管理资源
with 语句是 Python 中实现确定性资源管理的核心工具。它的设计哲学是:“申请即拥有,离开即释放”。通过上下文管理器协议,我们可以轻松实现资源的安全获取与释放。文件读写数据库连接与事务管理线程锁(threading.Lock)临时目录/文件(tempfile)网络套接字自定义资源(如 GPU 显存、硬件设备)🧠 记住一句话:“凡是需要成对操作的资源(打开/关闭、加锁/解锁、连接/断开),都应该考虑使用 with。
2025-11-05 09:36:38
649
原创 Fastapi服务在高并发情况下大量超时问题排查
实习生写的服务在压测的时候出现大量超时失败,他第一想法就是要扩大容器节点,我说软件能解决的问题,千万别堆硬件,否则老板迟早被你霍霍完蛋。在一个异步方法中调用了一个同步方法,这就导致一个容器服务一次只能支持一个并发。我们直接用代码进行演示。诊断问题:首先确认哪个同步方法是瓶颈。优先选择异步库:如果是 I/O 操作(网络、数据库),首选方案二是使用对应的异步库(如 httpx, asyncpg)。这是性能最好、最符合异步哲学的方式。
2025-11-04 13:41:18
769
原创 milvus数据条数统计的一些问题
用的milvus版本为2.3.7。collection.query(expr=“”, output_fields=[“count(*)”]) 和 collection.query_iterator迭代后条数不一致# 用于验证 Milvus 中 count(*) 与 query_iterator 的数据一致性# ==================== 配置 ====================MILVUS_HOST = "127.0.0.1" # 修改为你的 Milvus 地址。
2025-10-30 10:44:01
537
原创 工厂+注册表解决大量if else问题
... 还有更多写一个新的节点类修改 create_node 方法,加一个 elif 分支❌ 代码越来越长,容易出错❌ 修改核心类,风险高❌ 新人看不懂,维护成本高❌ 违反了“开闭原则”:对扩展开放,对修改关闭我想要的效果是:新增节点,只写代码,不改 Graph 类!实习生:你的想法很好,但是我不知道怎么实现。你可以把“装饰器”想象成一个 “给函数加功能的工具”。
2025-10-27 10:25:52
657
原创 Python推导式
实习生非常苦恼:python搞的这个列表推导式有什么用啊,好好的写个for循环多直观明了,非得搞得这么隐晦,让人看不懂。我:看不懂是原因是因为没有把推导式真正理解和应用起来,下面我们整理一下它的使用。推导式类型语法符号特点适用场景列表推导式[…]一次性生成完整列表数据不多,需要反复使用字典推导式{k:v…}生成键值对构建映射关系(如配置、缓存)集合推导式{…}自动去重提取唯一值(如标签、ID)生成器推导式(…)懒加载、省内存、只遍历一次处理大数据、流式计算。
2025-10-20 13:37:31
680
原创 通俗易懂理解python yield
旁边的实习生非常苦恼的问:我每次遇到yield都会困惑,看一次相关博客就感觉好像懂了,但是时间一长又完全记不清了,它不像方法中的return很常用,知道就是用来结束方法,并返回值的。我:那说明你每次看完博客,认为自己理解了,其实依然处于一知半解,这里需要你有思维上的一个转变。我们接下来,就用通俗易懂的案例帮你一次性彻底理解。
2025-10-17 17:28:41
569
原创 Python Pydantic库使用指南
在现代 Python 开发中,数据验证(data validation)和数据解析(parsing) 是构建健壮且可靠应用的重要组成部分。无论我们是在开发 API、处理配置文件,还是从各种来源获取数据,确保数据被正确地验证和解析都是至关重要的。这正是 Pydantic 发挥作用的地方。Pydantic 是一个利用 Python 类型注解(type annotations)来实现数据验证和配置管理的库,它提供了强大且易于使用的工具,帮助我们确保数据格式正确。
2025-09-23 12:48:47
955
原创 Python 中的 typing.Annotated:全面指南
Python 是一种动态类型语言,这意味着变量的类型是在运行时才确定的。虽然这种灵活性带来了便利,但在大型项目中,它也可能导致代码难以理解和维护。为了改善这一点,Python 3.5 引入了 typing 模块,为 Python 增加了静态类型检查的能力。typing 模块中的一个强大功能是 typing.Annotated。它允许你在类型注解上附加额外的元数据(metadata),从而使代码更具自解释性,并提升工具(如类型检查器、IDE)的支持能力。
2025-09-22 13:34:02
964
原创 通俗易懂掌握Python进程、线程和协程
对于初学者很容易对进程、线程和协程的概念以及如何写出相关代码上面感到有些困惑,本篇博客我将用最通俗易懂的方式和案例,带你理解进程、线程和协程这三个核心概念。我们从一个生活化的比喻开始,然后分别深入,并提供可以直接套用的“模板代码”。进程:多任务,资源不共享,稳定线程:多任务,资源共享,需要锁协程:单线程内多任务,协作式,高效方式优点缺点适用场景多进程利用多核CPU,稳定性高(一个崩了不影响别人)资源开销最大,创建和切换慢计算密集型(压缩、加密、科学计算)
2025-08-25 09:52:42
739
原创 一文快速入门FastMcp
模型上下文协议允许你构建服务器,以安全、标准化的方式向大语言模型应用程序公开数据和功能。它常被描述为 “人工智能的 USB - C 接口”,提供了一种统一的方式将大语言模型连接到它们可以使用的资源。把它想象成一个 API 可能更容易理解,但它是专门为大语言模型交互而设计的。通过 Resources(可以把这些有点像 GET 端点;它们用于将信息加载到大语言模型的上下文中)公开数据通过 Tools(有点像 POST 端点;它们用于执行代码或以其他方式产生副作用)提供功能。
2025-08-24 09:39:44
1093
原创 手动写一个MCP
最重要的是,uv显著提升的包管理速度对于MCP这类需要频繁管理依赖的项目来说,能够明显改善开发体验。其中,依赖包openai用于调用OpenAI风格LLM的API,依赖包python-dotenv用于从环境变量中读取API_KEY信息,这样可以更安全方便地管理API秘钥。为此,我们需要在项目根目录下创建一个名为.env的文件,专门用于存储API的关键配置信息。本例将通过HTTP请求来查询天气,因此需要安装几个核心依赖包,其中,依赖包httpx用于异步发起HTTP请求,依赖包mcp是使用MCP的必要前提。
2025-08-09 10:54:50
1127
原创 大白话讲解MCP
我们不一开始就给出MCP的概念,用大白话一步一步讲解MCP的出现的原因、MCP的相关概念。假设你是一个全栈开发工程师,有一天老板找到你让你开发一个AI聊天应用,作为你一个AI小白你什么感受?除了懵逼,还有就是恐慌,AI太高端了我怎么会呢?但是这样一个AI聊天应用程序其实非常简单。MCP本质就是基于JSON-RPC的Function Calling加了标准化协议。
2025-08-03 23:07:08
988
原创 接口地址后加/引发的问题
同事用FastApi封装了一个接口:http://xxx.xxx:33001/test/由于算法工程师对web开发规范不甚了解,因此接口末尾加了一个/。他把这个接口给了网关测的同事,网关同事进行了转发处理,转发的地址写为:http://xxx.xxx:33001/test,并没有加/。网关暴露的接口为:https://域名/test。用户访问的时候出现了:这里竟然暴露出来的是算法接口地址(多么恐怖的一件事)。所以接口后面能不能加上/呢?
2025-07-01 10:58:52
803
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅