大数据笔记-关于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个以上节点,做集群做副本集才有意义。

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chat GPT与写代码相关的prompt

文章目录 请介绍下面代码的 整体流程 的和要实现的目的 像debug一样解释下面的代码

OpenAI将推出ChatGPT Plus会员新功能,有用户反馈将支持上传文件和多模态

🦉 AI新闻 🚀 OpenAI将推出ChatGPT Plus会员新功能,有用户反馈将支持上传文件和多模态 摘要:OpenAI为ChatGPT Plus会员推出了一些新功能,包括上传文件、处理文件和多模态支持。用户不再需要手动选择模式,…

学习使用php实现汉字验证码

学习使用php实现汉字验证码 <?php //开启session &#xff0c;方便验证 session_start(); //创建背景画布 $image imagecreatetruecolor(200, 60); $background imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $background);//创建背景画布 for ($…

@Transactional失效和生效部分常见场景

Transactional失效和生效部分常见场景 1.不生效 1.1 没有带事务注解的方法调带事务注解的方法 public void initUser1(User user) {save(user);initPoint1(user.getId()); }Transactional public void initPoint1(Integer userId) {UserPoint userPoint new UserPoint();us…

docker的安装Centos8

在CentOS 7中&#xff0c;可以使用yum安装Docker。Docker官方提供了一个yum源&#xff0c;可以用于安装Docker。以下是安装Docker的步骤&#xff1a; 卸载旧版本的Docker&#xff08;如果有&#xff09; 如果你之前安装过Docker&#xff0c;需要先卸载旧版本的Docker。执行以…

Spring之AOP

动态代理 代理模式的解释&#xff1a;为其他对象提供一种代理以控制对这个对象的访问&#xff0c;增强一个类中的某个方法&#xff0c;对程序进行扩展。 比如&#xff0c;现在存在一个UserService类&#xff1a; public class UserService {public void test() {System.out…

HBase理论与实践-基操与实践

基操 启动&#xff1a; ./bin/start-hbase.sh 连接 ./bin/hbase shell help命令 输入 help 然后 <RETURN> 可以看到一列shell命令。这里的帮助很详细&#xff0c;要注意的是表名&#xff0c;行和列需要加引号。 建表&#xff0c;查看表&#xff0c;插入数据&#…

Android开发知识学习——Kotlin进阶

文章目录 次级构造主构造器init 代码块构造属性data class相等性解构Elvis 操作符when 操作符operatorLambda循环infix 函数嵌套函数注解使用处目标函数简化函数参数默认值扩展函数类型内联函数部分禁用用内联具体化的类型参数抽象属性委托属性委托类委托 Kotlin 标准函数课后题…

矩阵的其他性质及其运算技巧

1.单位矩阵&#xff08;E&#xff09;&#xff1a;类似实数运算中的“1”&#xff0c;任何矩阵乘单位矩阵都等于该矩阵本身&#xff0c;但不同矩阵对应的单位矩阵不同。 2.矩阵乘法满足结合律和分配律&#xff0c;但不满足交换律&#xff0c;原因见三。 3.当两个不同阶矩阵相…

Docker 多阶段构建的原理及构建过程展示

Docker多阶段构建是一个优秀的技术&#xff0c;可以显著减少 Docker 镜像的大小&#xff0c;从而加快镜像的构建速度&#xff0c;并减少镜像的传输时间和存储空间。本文将详细介绍 Docker 多阶段构建的原理、用途以及示例。 Docker 多阶段构建的原理 在传统的 Docker 镜像构建…

diffusers-Tasks

https://huggingface.co/docs/diffusers/using-diffusers/unconditional_image_generationhttps://huggingface.co/docs/diffusers/using-diffusers/unconditional_image_generation1.Unconditional image generation 无条件图像生成是一个相对简单的任务。模型仅生成图像&…

redis+lua实现限流

1、需要引入Redis的maven坐标 <!--redis和 springboot集成的包 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.3.0.RELEASE</version> &…

能源化工过程-故障诊断数据集初探-田纳西-伊斯曼过程数据集

1. 田纳西-伊斯曼过程(TE)数据集简介 整个TE数据集由训练集和测试集构成,TE集中的数据由22次不同的仿真运行数据构成,TE集中每个样本都有52个观测变量。d00.dat至d21.dat为训练集样本,d00_te.dat至d21_te.dat为测试集样本。d00.dat和d00_te.dat为正常工况下的样本。d00.d…

如何开始开发一个跑腿App系统?

1. 确定需求和功能规划 开始开发之前&#xff0c;需明确系统所需的基本功能&#xff0c;包括用户注册、登录、下单、配送员匹配、订单跟踪等。这些功能需要在系统设计之初明确。 2. 技术选型 选择适合的技术栈。前端可以使用框架如React、Vue.js&#xff0c;后端可选择Node…

Vue Camera组件的使用方法

Vue Camera组件是一个用于在Web应用中使用摄像头的Vue插件。它提供了一些常见的功能和方法来控制摄像头和捕获图像或视频数据。以下是一些Vue Camera组件的常见功能和使用方法&#xff1a; 1.显示摄像头画面&#xff1a;Vue Camera组件可以直接显示摄像头的实时画面。你只需要…

创新工具箱!重塑手机页面原型设计体验

在2024年&#xff0c;随着移动设备的普及和用户对移动体验的要求不断提升&#xff0c;手机页面原型设计工具变得越来越重要。在这篇文章中&#xff0c;我将为您推荐几款在2024年非常流行且值得一试的手机页面原型设计工具。 Pixso Pixso是一款基于云端的协作设计工具&#xf…

【已解决】PPT不能转换成PDF文档怎么办?

PPT可以转换成PDF文档&#xff0c;只需要点击PPT菜单页面中的【文件】选项&#xff0c;再点击【导出】即可转换&#xff0c;如果转换时发现【导出】选项不可选&#xff0c;无法完成转换怎么办&#xff1f;以下3种方法可以试试&#xff01; 出现上面这种情况&#xff0c;我们可以…

智慧水务监控系统解决方案

智慧水务监控系统解决方案 目前&#xff0c;水质监测在各行各业中起着至关重要的作用。随着人们对环境保护和健康意识的提升&#xff0c;对水质监测的需求也日益增长。然而&#xff0c;现有的水质监测方法与需求之间存在一定的差距&#xff0c;需要通过智慧水务监控系统来解决…

模糊C均值聚类(FCM)python

目录 一、模糊C均值聚类的原理 二、不使用skfuzzy的python代码 三、 使用skfuzzy的python代码 一、模糊C均值聚类的原理 二、不使用skfuzzy的python代码 import numpy as np import random import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.r…

1111 Online Map(30分)

题目翻译&#xff1a; 就是求解一个点到另一个点的最短路径。 不过由于限制条件很多&#xff0c;还得分开求两次&#xff0c;所以写起来就很繁。 题解思路&#xff1a; 可以用dijkstra或者dfs&#xff0c;用后者的话最后一个测试点可能会超时。 代码&#xff1a; dfs&…