大数据笔记-关于Cassandra的删除问题
Cassandra是Facebook开源的一个NoSQL数据库,它除了具备一般的NoSQL分布式数据库特点以外,最大的一个特点是去中心化架构设计,这和Hadoop HDFS/HBase等不一样,比如HDFS分为NameNode和DataNode,而Cassandra集群中所有节点都是数据节点,每一个节点都在集群中承担相同的角色。
我们开始在2013年做大数据存储系统选型过程中,也考虑过Cassandra,不过最终选择了MongoDB,之后又使用Elasticsearch,一直与Cassandra无缘,不过前几年我们引入了一款商业的AI类系统,它的后台存储系统选择了Cassandra,迫使我们不得不去熟悉Cassandra系统,然而一般是运维人员去维护它,常常也是咨询厂家运维人员来解决具体问题。
最近由于某地市平台的运维人员休长假,由我来暂时接管其运维工作。这个系统中的Cassandra被限制只能存储2亿特征向量数据,到达这个阙值之后,系统将不永许再新增任何特征向量记录。我们每天大概几百万的采集量,大概3月左右就会存储满,所以运维人员写了一个定时清除脚本,指定一个上限阙值,一旦超过这个阙值,脚本将删除最早的一天数据,一直到存储量低于这个阙值才停止,比如阙值190000000,但是,在crontab配置时编辑错误,也没有事后进行检查,致使一直没有生效,时间到了3个月之后某一天,客户发现数据前一天没有入库,马上给我电话,他立即赶到现场,稍微分析发现Cassandra容量已经刚好达到2亿,厂家业务系统停止入库了。
得知具体原因之后,我和主开发人员商量清理一部分数据,反正客户也不要求那么多天数据,我们的特征向量存储远比图片文件存储的时间长,所以主开发人员给我建议是先删除5000万。这个数据量也不大,我也没想那么多,使用厂家删除库接口进行删除,我们是一天一个特征向量库的,于是用Python脚本调用厂家接口从最早库进行删除,一直删除到库容量小于1.5亿,删除倒是很快完成,删除之后我第一时间用库列表查询接口去看,第一次查询还能出结果,但是再次查询的时候,接口就返回错误: no hosts availed in the pool,整个系统所有接口都不能调用了,先前还只是新增特征向量接口不行,现在什么都不行,吓了我一跳,系统这么脆弱。
一边第一时间联系厂家远程运维人员,一边登录这台AI系统所在服务器,按厂家运维人员去看系统状态,这个系统只有一台机器,厂家却在上面安装了一个k8s单集群,本人没有使用过k8s系统,一切只能边baidu边摸索,用命令看容器状态:
kubectl get pod -A
发现Cassandra也是只有一个容器实例,已经是0/1了,肯定是发起删除操作的时候,让整个系统垮掉了,于是手工删除它,让k8s去重启它:
kubectl delete pod -n component Cassandra-default-0
但是还是启动不起来,于是强制删除:
kubectl delete pod --force --grace-period=0 -n compent Cassandra-default-0
容器终于启动起来了,然后看容器日志:
kubectl logs -f -n component Cassandra-default-0
这时日志没有ERROR级别错误,只是大量gc1日志,看来JVM在做大量垃圾回收处理,这肯定跟删除有关了。
再访问厂家API接口,不管是查询库列表接口、创建库接口,还是新增特征向量接口、搜索特征向量接口,都不可用,全部返回先前的错误描述:no hosts availed in the pool。
咨询厂家运维人员,运维人员去问内部开发人员,答复是:从来没碰到一次性删除5000万数据的,删除1千万数据可能要5个小时。我说5000万数据不是要25个小时,这简直不可接受啊,但是也没办法,对方是大公司,开发人员应该是有水平,只有等了。
但是我还是不甘心,就要自己分析Cassandra为什么会这么慢,系统内部状态是什么。于是就进入容器,直接用docker命令:
docker ps | grep cassandra
docker exec -it container-ID /bin/bash
进入容器之后看进程: ps -ef | grep cassandra
然后看端口: sudo netstat -ntlp
9042 : native协议服务端口
7199 : JMX服务端口
这两个重要的端口都是正常存在的,于是用cqlsh工具去连接,需要密码,问厂家运维人员,回答账号在k8s环境里,于是执行:
kubectl gett secrets password-secrets -o yaml | grep cassandra
得到一个json格式的账号列表,Cassandra、MySQL、MinIO等登录账号都在这里,于是对密码进行Base64解码,得到密码原文。
登录Cassandra:
> cqlsh -u username -p password
>> help
所有命令都出来了,然后看键空间和表,找到特征向量所在的表,其实就一张表而已,查询都没有问题,感觉Cassandra应该已经好了啊,不至于要25个小时,再去看docker容器日志,全部是INFO和DEBUG级别日志,都是在删除sstable数据,看不出任何问题。
我怀疑Cassandra可能已经正常,说不定是厂家自己的应用系统的问题。于是咨询厂家运维人员,他们自家开发的系统到底是怎么一个部署架构,之间是怎么调用的,我要分析一下他们的系统到底是打印什么错误。
然后我和厂家运维从kong网关查起,发现厂家的两个程序有大量错误,错误描述还是:no hosts availed in the pool。
我怀疑是cql连接池处理不好,于是重启厂家那两个需要连接Cassandra系统,重启之后,再去调用厂家所有API接口,一切正常。阿弥陀佛,庆幸自己没有听他们开发人员所谓的1千万数据删除要5个小时的断论,坚持了自己去分析各个系统,分析系统运行日志,整个系统提前恢复服务。
这个过程中也怀疑过Cassandra的删除机制墓碑问题,其实不可能那么慢,5000万数据对一个NoSQL数据库应该不至于致命,但是稳定性确实有问题,单点部署情况下,删除导致单点故障而不能恢复,确实是Cassandra一个小问题,但是一般用Cassandra应该至少3个以上节点,做集群做副本集才有意义。
相关文章:
大数据笔记-关于Cassandra的删除问题
Cassandra是Facebook开源的一个NoSQL数据库,它除了具备一般的NoSQL分布式数据库特点以外,最大的一个特点是去中心化架构设计,这和Hadoop HDFS/HBase等不一样,比如HDFS分为NameNode和DataNode,而Cassandra集群中所有节点…...
Qt自定义文件选择框
文章目录 前言一、头文件二、源文件三、qss文件四、效果 前言 在开发过程中,经常遇到使用文件选择框的情况,qt默认的文件选择框,样式可能与开发的桌面程序差异比较大.此时,我们可以自定义文件选择框,设置其样式,尽量做到样式统一. 一、头文件 #ifndef CUSTOMFILEDIALOG_H #d…...
金蝶云星空创建自动下推并保存公共服务
文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…...
人大金仓助力中国人民银行征信中心业务系统异地容灾优化升级
日前,人大金仓助力中国人民银行应收账款融资服务平台异地容灾项目顺利上线,保证了平台系统运行的连续性和数据安全,为充分发挥平台的融资功能,缓解中小微企业融资难提供了强有力的保障。 缓解中小微企业融资难 中国人民银行构于2…...
[架构之路-249/创业之路-80]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 产品(数据)管理
目录 前言: 一、企业信息化的结果:常见企业信息化软件 1.1 产品数据管理 1.1.1 什么是产品数据管理What 1.1.1.1 常见工具 1.1.1.2 软件企业的产品数据管理系统 1.1.2 为什么需要产品数据管理系统Why? 1.1.3 谁需要产品数据管理系统w…...
【NI-DAQmx入门】传感器基础知识
1.什么是传感器? 传感器可将真实的现象(例如温度或压力)转换为可测量的电流和电压,因而对于数据采集应用必不可少。接下来我们将介绍您所需的测量类型及其对应的传感器类型。在开始之前,您还可以先了解一些传感器术语&…...
CMake:构建时为特定目标运行自定义命令
CMake:构建时为特定目标运行自定义命令 导言项目结构相关源码结果 导言 add_custom_command 是 CMake 中用于添加自定义构建规则的命令,通常用于在编译项目时执行一些自定义操作,例如生成文件、运行脚本等。 项目结构 . ├── CMakeLists…...
基于适应度相关算法的无人机航迹规划-附代码
基于适应度相关算法的无人机航迹规划 文章目录 基于适应度相关算法的无人机航迹规划1.适应度相关搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用适应度相关算法来优化无人机航迹…...
jmeter BeanShell预处理程序:报错Error invoking bsh method: eval...
1、jmeter运行报错: ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: " . . . Encountered "" at line 13, column 23. WARN o.a.j.m.BeanShellPreProcessor: Problem in BeanShell scri…...
使用springboot对Elasticsearch 进行索引的增、删、改、查
一 SpringBoot Elasticsearch 项目环境搭建 1.1 修改pom文件添加依赖 目前使用spring-boot-starter-parent版本为2.2.8.RELEASE 对应spring-data-elasticsearch版本为2.2.8.RELEASE,版本对应可以自行百度,如果不行直接用elasticsearch-rest-high-lev…...
Project#2: Extendible Hash Index
文章目录 准备Task #1-Read/Write Page GuardsBasicPageGuard/ReadPageGuard/WritePageGuardUpgradeWrappersTests Task #2-Extendible Hash Table PagesHash Table Header Pages**成员变量:****方法实现:** Hash Table Directory Pages**成员变量&#…...
Emscripten + CMakeLists.txt 将 C++ 项目编译成 WebAssembly(.wasm)/js,并编译 Html 测试
背景:Web 端需要使用已有的 C 库(使用 CMake 编译),需要将 C 项目编译成 WebAssembly(.wasm) 供 js 调用。 上篇文章《Mac 上安装 Emscripten》 已讲解如何安装配置 Emscripten 环境。 本篇文章主要讲解如何将基于 CMakeLists 配…...
MATLAB中preparets函数用法
目录 语法 说明 示例 准备开环和闭环网络的数据 preparets函数的功能是为网络模拟或训练准备输入和目标时间序列数据 语法 [Xs,Xi,Ai,Ts,EWs,shift] preparets(net,Xnf,Tnf,Tf,EW) 说明 [Xs, Xi, Ai, Ts, EWs, shift] preparets(net, Xnf, Tnf, Tf, EW) 这个函数接受…...
ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇
作者:运维有术 前言 知识点 定级:入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ks-master-1172.16.33.1661650200KubeSp…...
react官网
应急方案 – React 中文文档 (docschina.org) 正版卡死版 Hooks FAQ – React (reactjs.org) 英文流畅版 应急方案 – React 中文网 (nodejs.cn) 盗版流畅版(翻译有稍稍的问题) http://www.react-cn.com/index.html 黄版...
前端css介绍
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。 CSS语法 CSS实例 每个CSS样式由两个组成部分:选择器和…...
MySql创建索引
在MySQL中,可以使用CREATE INDEX语句来创建索引。以下是创建索引的基本语法: CREATE INDEX index_name ON table_name (column1, column2, ...);其中,index_name是索引的名称,可以自定义(也可以不指定索引名称&#x…...
前后端分离vue+springboot家庭理财账单财务管理系统
项目介绍: 该系统能够管理家庭收入支出,并且能直观得表现收支状态。主要功能包括用户管理、收支管理、财务管理、统计收支情况等功能。 技术栈: 后端: SpringBoot,Sa-Token,MyBatis-Plus,MyB…...
LeetCode:2003. 每棵子树内缺失的最小基因值(C++)
目录 2003. 每棵子树内缺失的最小基因值 题目描述: 实现代码与解析: dfs 启发式合并 原理思路: 2003. 每棵子树内缺失的最小基因值 题目描述: 有一棵根节点为 0 的 家族树 ,总共包含 n 个节点,节点编…...
React Hooks之useContext使用
官方文档写道:在组件的顶层调用 useContext 来读取和订阅 context。 我理解就是一个“全局变量”的概念。它可以用来声明一个变量,然后在各个组件中使用,避免了props一级一级往下传,当然使用场景有限,比如设置一个主题…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
