SecondaryNameNode的基本工作流程

首先来看一下HDFS的结构,如下图:


如上图,在HDFS架构中,NameNode是职责是管理元数据信息,DataNode的职责是负责数据存储,那么SecondaryNameNode的作用是什么呢?

其实SecondaryNameNode是hadoop1.x中HDFS HA的一个解决方案,下面我们来看一下SecondaryNameNode工作的流程,如下图:



1.NameNode管理着元数据信息,元数据信息会定期的刷到磁盘中,其中的两个文件是edits即操作日志文件和fsimage即元数据镜像文件,新的操作日志不会立即与fsimage进行合并,也不会刷到NameNode的内存中,而是会先写到edits中(因为合并需要消耗大量的资源)。当edits文件的大小达到一个临界值(默认是64MB)或者间隔一段时间(默认是1小时)的时候checkpoint会触发SecondaryNameNode进行工作。

2.当触发一个checkpoint操作时,NameNode会生成一个新的edits即上图中的edits.new文件,同时SecondaryNameNode会将edits文件和fsimage复制到本地。

3.SecondaryNameNode将本地的fsimage文件加载到内存中,然后再与edits文件进行合并生成一个新的fsimage文件即上图中的Fsimage.ckpt文件。

4.SecondaryNameNode将新生成的Fsimage.ckpt文件复制到NameNode节点。

5.在NameNode结点的edits.new文件和Fsimage.ckpt文件会替换掉原来的edits文件和fsimage文件,至此,刚好是一个轮回即在NameNode中又是edits和fsimage文件了。

6.等待下一次checkpoint触发SecondaryNameNode进行工作,一直这样循环操作。


注:checkpoint触发的条件可以在core-site.xml文件中进行配置,如下:

[html]  view plain  copy
  1. <property>  
  2.   <name>fs.checkpoint.period</name>  
  3.   <value>3600</value>  
  4.   <description>The number of seconds between two periodic checkpoints.  
  5.   </description>  
  6. </property>  
  7.   
  8. <property>  
  9.   <name>fs.checkpoint.size</name>  
  10.   <value>67108864</value>  
  11.   <description>The size of the current edit log (in bytes) that triggers  
  12.        a periodic checkpoint even if the fs.checkpoint.period hasn't expired.  
  13.   </description>  
  14. </property>  

转载自:https://blog.youkuaiyun.com/lzm1340458776/article/details/42398111

### Hadoop启动时无法设置NameNode和SecondaryNameNode进程优先级的问题分析 当执行`start-dfs.sh`脚本启动Hadoop集群时,如果遇到错误提示`ERROR: Cannot set priority of namenode process`或类似的关于DataNode的错误消息,则表明系统尝试调整这些服务进程的优先级失败。以下是可能的原因以及对应的解决方案。 #### 原因分析 该问题通常由以下几个原因引起: 1. **权限不足** 调整进程优先级的操作需要管理员权限(即root权限)。如果没有足够的权限运行命令,就会触发此错误[^1]。 2. **未安装必要的工具** Linux中的`nice`和`renice`命令用于管理进程优先级。如果系统缺少这些工具或者配置不正确,也可能导致上述错误[^2]。 3. **环境变量冲突** 如果在Hadoop配置文件中设置了与优先级相关的参数(如`HADOOP_NICENESS`),而实际环境中并未支持此类操作,也会引发这个问题[^3]。 4. **日志记录异常** 查看NameNode的日志可以帮助进一步确认具体问题所在。通过命令`tail -n 200 hadoop-xinjie-namenode-VM-0-9-centos.log`可以获取更多上下文信息[^4]。 --- ### 解决方案 #### 方法一:修改Hadoop配置文件 编辑Hadoop的核心配置文件`core-site.xml`或其他相关配置文件,移除可能导致优先级设置失败的相关选项。例如,在某些情况下,默认启用了`HADOOP_NICENESS`参数来降低Hadoop守护线程的CPU调度权重。可以通过以下方式禁用它: ```bash export HADOOP_NICENESS=0 ``` 将其添加到`$HADOOP_HOME/etc/hadoop/hadoop-env.sh`文件中并保存更改[^5]。 #### 方法二:提升用户权限 确保当前登录账户具有适当权限以允许调优操作系统资源分配策略。一种简单的方法是以超级用户身份重新执行启动脚本: ```bash sudo ./start-dfs.sh ``` #### 方法三:验证依赖软件状态 检查服务器上是否存在完整的POSIX兼容实用程序集,并测试基本功能是否正常工作。比如输入下面这条指令看看是否有任何警告输出: ```bash which nice && which renice || echo 'Missing required binaries!' ``` #### 方法四:排查其他潜在干扰因素 有时第三方安全机制会阻止常规应用程序改变其自身的属性级别。因此建议临时关闭SELinux或AppArmor再试一次全部流程;当然生产环境下需谨慎对待这类改动! --- ### 总结说明 以上列举了几种常见场景下的处理措施供参考选用。每一步骤都应仔细核验效果直至完全消除原初报告出来的状况为止。另外值得注意的是即便解决了表面可见的技术难题之后仍要记得定期备份重要数据以防万一发生不可预见的情况影响业务连续性。 ```python # 示例Python代码片段展示如何动态调整进程优先级 (仅作演示用途) import os, psutil def adjust_process_priority(pid=None): current_pid = pid or os.getpid() p = psutil.Process(current_pid) try: # 设置较低的I/O优先级作为例子 p.nice(19) # 数字范围[-20,+19],越负越高 print(f"Successfully adjusted PID {current_pid}'s IO Priority.") except Exception as e: print(e) adjust_process_priority() # 对当前正在运行的脚本生效 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值