- 博客(222)
- 收藏
- 关注
原创 判断ceph osd 节点磁盘异常
refresh 是异步刷新,等待五分钟,再执行一次,没有刷新的磁盘是异常的。比如 ceph01 上的两个磁盘没有按时刷新。ceph-volume inventory 是用来获取当前节点所有可用磁盘清单的命令 ,会显示当前节点异常的磁盘。1 执行 ceph orch device ls --refresh。2 执行 ceph-volume inventory。
2025-12-25 14:57:52
336
原创 Ceph 日志系统
在ceph的类代码的宏定义中,找到 #define dout_subsys ceph_subsys_<子系统>,就可以确认这个类的日志属于哪个子系统。通过–debug-=参数可动态调整特定子系统的日志级别,例如–debug-osd=10开启 OSD 的详细日志。
2025-10-24 14:14:47
1013
原创 ceph用户无法创建,osd 启动失败无法
查看目录权限和创建用户记录,发现了 sudo useradd -u 167 -g 167 -d /var/lib/ceph -s /sbin/nologin -c “Ceph daemons” ceph 记录,cephadm 创建ceph用户失败,让后台运维人员创建ceph用户,保证uid 和gid一致。is already in use),尝试了各种方法不行,重启服务器,发现osd正常。发现 /etc/ceph 为null,其他节点进行同步。osd 一直启动失败,背景:测试环境不允许创建用户。
2025-10-20 18:43:49
265
原创 PG Scrub 全流程核心步骤清单
将scrub,按 “初始化→资源预约→校验执行→一致性对比→收尾”5 大阶段拆解,每个步骤均标注关键日志锚点,方便快速定位对应流程。主 OSD 从集群调度逻辑中选中目标 PG,先校验是否满足 scrub 执行条件,避免无效操作。一、初始化阶段:判断 scrub 可行性(触发条件校验)1.触发 scrub 任务。
2025-10-15 17:17:00
872
原创 ceph pgs not deep-scrubbed in time
查看卡住的pg, cephadm shell ceph pg dump |grep “scrubbing for” >scrub.pg.txt.2。进行ceph pg 9.606 query,查看scrub卡在哪个位置,统一都是osd 39。查看osd 39的日志,Sep 18 00:27:32 时间段osd 异常。手动重启 osd 39 进行查看。
2025-09-24 11:05:31
325
原创 Ceph 测试环境 PG_BACKFILL_FULL
backfill 先后进行 LocalBackfillReserved和 RemoteBackfillReserved ,在RemoteReservationRejectedTooFull时,会出现PG_STATE_BACKFILL_TOOFULL 状态。不知为啥卡在某个状态,因为当时日志级别较低,没有相关日志。进行ceph osd df,发现相关osd 还存在9 Tib空间,总空间 12 Tib,使用ceph pg 32.314 query ,查看 pg 大小为 53 GB,不存在剩余空间不足问题。
2025-09-19 15:59:33
490
原创 ceph scrub 参数
从参数来看,该 Ceph 集群的 scrub 策略偏向“无时间限制、中等并发、常规频率、手动修复”时间窗口:全天、每天允许 scrub(begin=end),适合无明显业务低峰期的集群;并发控制:单个 OSD 最多 3 个 scrub 任务,恢复期间不执行 scrub,避免资源争抢;检查频率:轻量 scrub 1~7 天/次,深度 scrub 7 天/次,符合常规集群的一致性需求;错误处理:关闭自动修复,需人工介入(适合对数据变更敏感的场景,如金融、核心业务)。
2025-09-09 19:54:40
809
原创 Ceph PG scrub 流程
mgr向osd 发送 MOSDScrub2 消息,驱使OSD 进行 scrub,客户端锁打印的消息,就是mgr所提供的。
2025-09-02 14:35:48
1050
原创 hdfs balancer -policy
代码区别:计算方式不同,一个使用datanode 的使用量,一个使用自己blockpool的使用量。:如果每个datanode中的每个块池都是平衡的,则集群是平衡的。hdfs balancer -policy当前有两种,(默认):如果每个数据节点是平衡的,则集群是平衡的。
2024-04-30 15:01:56
205
原创 MapReduce内存参数自动推断
MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,涉及到两个参数:mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦设置不合理,则会使得内存资源浪费严重,比如将前者设置为4096MB,但后者却是“-Xmx2g”,则剩余2g实际上无法让java heap使用到。对应patch。
2024-03-05 18:18:29
1429
原创 java 程序堵塞的排查方式
从 主线程(#1)进行查看,先分析 主线程在什么停顿,通过主线程的调用栈,就可以大概了解 整个程序的逻辑。然后 将其他线程的调用栈信息进行查看汇总,结合代码,基本就可以确定 堵塞的方法。如果 有日志的话,查看日志的最后打印信息,帮助快速定位问题。## 常见的堵塞1 read 等待 输入流2 wait 之后没有执行notify3 存在线程一直死循环,抢占了资源。## 死锁问题先确实是否死锁问题,使用arthas ,执行 thread -b 命令。不是死锁问题,执行 jstack 命令 保留 当前执行命令。
2023-12-29 14:20:24
825
1
原创 Fix potential FSImage corruption.
总结一下,生成 FSImage 文件的过程主要包括将文件系统的元数据序列化为 Protobuf 格式并将其存储在文件中。XAttrFormat用于定义XAttr格式的接口,并提供了序列化和反序列化方法,而XAttrStorage则是用于管理XAttr存储的类,提供了读取、写入和删除XAttr的方法。增加了 name ,max变量,用current来替代之前的 max,用来判断边界值的情形发生了变化,用sn>max 更专缺,sn<0 意味着已经超过Integer的最大值,可能比表的范围更大。
2023-04-18 15:03:21
393
原创 DataNode 日志异常--- “DataXceiver error processing unknown operation”
因为datanode并没有处理空内容的逻辑,发生这种情况时,DataNode会遇到意外的EOF,并记录完整的栈跟踪。DataNode 日志出现以下异常“ DataXceiver error processing unknown operation src: /127.0.0.1:xx dst: /127.0.0.1:50010”这个可以忽略,服务是正常的,或者使用 https://issues.apache.org/jira/browse/HDFS-9572里的patch。
2023-03-15 11:12:09
1096
原创 加速HDFS集群 RaidNode数据 退役的方法
加速集群退役的方法,结合以往的经验和当前的信息看,阻碍集群退役的block都是RaidNode数据。
2023-03-13 11:25:25
455
原创 FB版本RaidNode线程分析——BlockIntegerMonitor
文章目录FB版本RaidNode线程分析——BlockIntegerMonitor概述具体代码线程的创建和启动线程的实现代码(Dist模式)FB版本RaidNode线程分析——BlockIntegerMonitor概述RaidNode上的BlockIntegrityMonitor线程会通过DFSck工具检查系统中corrupt或decomission的数据,通过BlockCopier和BlockFixer线程周期行对出错的数据进行修复。local模式下,修复过程在RaidNode上之行,Dist模式
2022-03-25 17:57:20
405
2
原创 HDFS遍历子目录 Hadoop fs -ls -R path
/hadoop fs -help cmd 可以看命令的介绍hadoop fs -help ls22/03/24 18:47:41 INFO conf.Configuration: Current hadoop.security.authentication = simple-ls [-d] [-h] [-R] [-t] [-S] [-r] [-u] [ …] :List the contents that match the specified file pattern. If path is n
2022-03-24 19:49:02
2838
原创 FB版本RaidNode线程分析——PlacementMonitor、PurgeMonitor
文章目录概述PurgeMonitorPlacementMonitor线程实现细节线程的创建和运行PlacementMonitor线程的运行细节PurgeMonitor线程的运行细节概述PurgeMonitorPurgeMonitor主要对过期失效的parity文件、目录进⾏行删除。 PurgeMonitor最主要的是确定purge的元素,它是通过DirectoryTraversal来对进⾏行遍历, 需要提供check⽅方法,来确定返回符合purge条件的元素。!首先是对directory进⾏行purg
2022-03-21 11:34:08
338
原创 DataNode启动分析
DataNode启动分析主方法DataNode通过DataNode.java的main方法进行启动,因为经过的方法太多,只说几个重点的。secureMain方法public static void secureMain(String args[], SecureResources resources) { try { StringUtils.startupShutdownMessage(DataNode.class, args, LOG); DataNode data
2021-11-12 09:36:12
1550
原创 HDFS写文件异常
HDFS写文件异常上传文件时发生hdfs.DFSClient: DataStreamer Exceptionorg.apache.hadoop.ipc.RemoteException(java.io.IOException): File /VERSION.txt.COPYING could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and no node(s
2021-11-05 10:52:25
650
原创 HDFS安装和启动出错的修复步骤
HDFS安装和启动出错的修复步骤问题:对于HDFS的安装过程中,导致HDFS不能正常启动,表现为 NameNode is not format,或者clusterId不匹配。对于这种情况,随意地格式化NameNode不一定能解决问题,因为NameNode格式化会生成新的clusterId,导致集群中的其他服务器的ID与其不匹配,不能进行连接。步骤1.start all journalnodejournalnode 是复制集群之间的通信,必须启动它,保证集群之间的正常交互。2.stop all d
2021-11-04 11:17:32
1231
原创 HDFS的全量块汇报以及Hadoop在2.x版本提供的限流优化
HDFS的全量块汇报以及Hadoop在2.x版本提供的限流优化问题背景在DataNode与NameNode的交互中,有大量的数据得不到处理,使得DataNode的增量块汇报不能及时处理,文件出现不能正常关闭等现象。在DataNode与NameNode的交互中,有三种形式,心跳报告,增量快汇报,全量块汇报。其中处理全量块汇报需要的时间和资源是其他汇报的数倍,且全量块汇报不需要立即处理,在HDFS中减少全量块汇报,使得系统有更多的资源去处理增量块汇报。全量块汇报的流程[外链图片转存失败,源站可能有防盗链
2021-10-20 19:31:27
1530
原创 HDFS写流程
本次学习全程参看于Jin’s Blog文章目录HDFS写流程概述create方法客户端:NameNode端:write方法客户端:概述:数据传输格式具体流程线程操作NameNode端选择DN(主要)更新元信息DataNode端初始阶段时序图close方法客户端:NameNode端:block状态流程:故障恢复clinetHDFS写流程概述.有两种思路:基数排序和桶排序。基数排序:import java.util.Arrays;/** * @author hehao * @create 2020-11-26 17:11 */class Solution { public int maximumGap(int[] nums) { int length = nums.length; if (length<2){ return 0;
2020-11-26 17:41:11
198
原创 LeetCode 127. 单词接龙
方法一:简单的广搜对于import javax.swing.plaf.basic.BasicScrollPaneUI;import java.util.*;class Node implements Comparable{ String s; int count; public Node(String s, int count) { this.s = s; this.count = count; } @Override
2020-11-15 20:32:11
169
原创 无序链表的排序
采用的是归并排序的算法,时间复杂度O(nlogn)package Demo1;/*package Demo1;public class LinkedNode { int value; LinkedNode next; public LinkedNode(int value) { this.value = value; this.next=null; }} */public class LinkedListSort {
2020-11-04 21:37:46
973
原创 关于剑指Offer刷题的一些个人理解
题目不在于多,而对于精,你可能把这些题都写了一遍,但下次不一定能答上来。我就卡在之字形打印树和反转链表这两道题上(当时有点沙雕了)。另外不管你把这些题写了几遍,看一看剑指offer这本书还是会受益匪浅的。我觉得如果把剑指offer真的写会了,直接去刷LeetCode上的hard题就可以了。...
2020-10-31 08:55:16
680
原创 剪绳子
用DP来实现当绳子长度为2,3时需要特判。其他情况f[i]=Math.max(f[i],j*f[i-j]);public class Solution { public int cutRope(int target) { if(target==2){ return 1; } if(target==3){ return 2; } int f[]=new int[ta
2020-10-31 08:45:36
138
原创 机器人的运动范围
简单的一道广搜题,我看大部分题解都是用二维数组来标记是否点被访问过,可能会造成空间浪费,用HashMap以String作为key的方法来解一下。import java.util.*;class Node{ int x,y; Node(int x,int y){ this.x=x; this.y=y; }}public class Solution { static HashMap<String,Boolean>map;
2020-10-24 09:50:26
128
原创 矩阵中的路径
public class Solution { boolean flag=false; int xx[]={-1,1,0,0}; int yy[]={0,0,1,-1}; boolean vis[][]; public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { vis=new boolean[rows][cols]; int l=str.le
2020-10-20 21:07:42
420
原创 四人过桥问题与扩展(DP,其实也可以看成贪心)
4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过, 4个人的过桥速度分别为1分钟A、2分钟B、5分钟C、10分钟D,试问最少需要多长时间4人才可以全部通过小桥?答案是17分钟先让A,B过桥(2分钟),再让A返回(1分钟),然后C,D一起过桥(10分钟),B返回(2分钟),最后A,B一起过桥(2分钟)。我们来想一下这个过桥问题的能减少时间的地方:让过桥时间少的人来传递手电筒让过桥时间相差最小的两个人一起过桥(两人过桥取两者时间最大值)解决思路:针对.
2020-10-16 17:44:56
1473
原创 十万个随机数冒泡排序和快速排序
package Demo1;public class Main { static void bubbleSort(int a[]){ int length=a.length; for(int i=0;i<length;i++){ for(int j=1;j<length-i;j++){ if(a[j-1]>a[j]){ int num=a[j-1];
2020-10-15 19:16:36
1991
原创 滑动窗口的最大值
使用了单调队列,队列最长为size,队列的元素顺序是从大到小,因为一个元素位置靠前,并且值很小,那它就不可能被取到。两个关系if(当前元素位置-队首元素位置>=size) 队首元素出队while(当前元素大于队尾元素) 队尾元素出队代码如下;//package Demo1;import java.util.*;public class Solution { public ArrayList<Integer> maxInWindows(int
2020-10-06 15:08:25
137
原创 数据流中的中位数
思想:建立两个排序碓(优先队列),大根堆和小根堆。个数为奇数时,元素存大根堆,放count-count/2的小数。个数为偶数时,元素存小根堆,放count/2的大数。当个数为奇数时if(元素>小根堆的堆顶) swap(元素,小根堆的堆顶)元素加入大根堆偶数时if(元素<大根堆的堆顶) swap(元素,大根堆的堆顶)元素加入小根堆代码如下import java.util.Comparator;import java.util.PriorityQueu
2020-10-06 14:42:33
140
原创 二叉搜索树的第k个结点
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { TreeNode node; int num; int m; TreeNode KthNode(Tr
2020-09-30 21:18:09
126
1
原创 序列化二叉树
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { String ss; int k; String Serialize(TreeNode root) {//序
2020-09-30 21:11:53
137
原创 把二叉树打印成多行
import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public c
2020-09-20 20:36:49
126
原创 按之字形顺序打印二叉树
import java.util.ArrayList;import java.util.Stack;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public Ar
2020-09-20 18:33:00
103
原创 对称的二叉树
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { boolean flag=true; boolean isSymmetrical(TreeNode pRoot)//
2020-09-16 19:46:08
116
原创 二叉树的下一个结点
/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/public class Solution { TreeLinkNode ans=null; pu
2020-09-15 19:58:26
129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅