hadoop总结-进程&功能

本文深入探讨Hadoop HDFS的架构,详细介绍了Namenode、SecondaryNamenode、DataNode的功能及其相互协作机制,解释了如何通过EditLog和FsImage实现元数据的持久化,以及ResourceManager和NodeManager在YARN中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

namenode :

  • Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
  • 控制副本放在哪些datanode上,读取时优先读取最近的,降低块消耗和读取时延。
  • 周期性接受datanode的信条信息和块状态报告(包含包含datanode的所有数据块列表)。

它维护着文件系统树文件夹的元数据,元数据包括:
fsimage:快照,存储某一时段NameNode内存元数据信息;
edits:操作日志文件;
Namenode是所有HDFS元数据的仲裁者和管理者,用户数据永远不会流过Namenode。

安全模式:
Namenode启动后会进入一个称为安全模式的特殊状态。处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的 Datanode接收心跳信号和块状态报告。块状态报告包括了某个Datanode所有的数据块列表。每个数据块都有一个指定的最小副本数。当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safely replicated)的;在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上。

#退出安全模式
hadoop dfsadmin -safemode leave

namenode & secondarynamenode 数据持久化

  • 对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为EditLog的事务日志记录下来。
  • Namenode在本地操作系统的文件系统中存储这个Editlog。整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为Fsimage的文件中,这个文件也是放在Namenode所在的本地文件系统上。
  • 当Namenode启动时,它从硬盘中读取Edits和FsImage,将所有Edits中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Edits,因为这个旧的Edits的事务都已经作用在FsImage上了。这个过程称为一个检查点(checkpoint)。

然而,这样下去不行,每次启动都要读取Editlog和FsImage,一段时间后edits变得非常大,影响效率。所以,secondarynamenode 出来了。

  • secondarynamenode会周期性(定时|超过大小)读取namenode的 edits
    然后更新自己的fsimage。拷贝更新后的快照,到namenode替换fsimage,最后把edits换了。就是,secondarynamenode分担了namenode的部分工作,给它做了,从而减轻负担,提高效率。

secondarynamenode

  • 是namenode的冷备,减少启动时间。
  • Secondary Namenode 运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。
  • 执行命名空间的定期检查点,并帮助将包含HDFS修改日志的文件大小保持在NameNode的特定限制内。
  • 在Namenode宕机时,数据丢失是不可避免的。在这种情况下,一般把远程挂载的网络文件系统(NFS)中的Namenode的元数据文件来使用,把NFS中的Namenode元数据文件,拷贝到辅助Namenode,并把辅助Namenode作为主Namenode来运行。

DataNode

  • 集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储,处理文件内容的读写请求,跟文件相关的数据流不经过namenode,会询问与哪些datanode联系,防止namenode成为系统瓶颈。
  • 通过向NameNode发送心跳保持与其联系(3秒一次)
  • 如果10分钟没有收到DataNode的心跳,则认为它挂了。

ResourceManager

在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。

nodemanager

nodemanager是ResourceManager安排在节点上的小弟,负责容器管理,监控,将情况向ResourceManager报告。

checkpointnode

定期地创建命名空间的检查点,CheckpointNode与NameNode通常运行在不同的机器上,内存与NameNode的内存一样大小,一个NameNode可以同时配置多个Checkpoint Node。

编辑core-site.xml 增加checkpoint相关配置
fs.checkpoint.dir
fs.checkpoint.period
fs.checkpoint.size

backupnode

比 checkpointnode 更实用于恢复,在内存中保留与NameNode一样的元数据。
BackupNode在内存中维护了一份从NameNode同步过来的fsimage,它还从namenode接收edits文件的日志流,定期把它们持久化到硬盘。

 NameNode,只允许配置一个BackupNode,而且利用Backupnode模式就不允许登录CheckPointNode了 
 # *********************************在此记一下,遇到好处理*********************

配置在 hdfs-site.xml
dfs.backup.address
dfs.backup.http.address

// 执行命令
hadoop namenode -backup
<think>好的,我现在要解决用户的问题:在Hadoop 3.3.6中遇到hadoop-mapreduce-examples.jar文件不存在或不是一个普通文件的问题。首先,我需要回忆之前与用户的对话历史。用户之前询问了如何启动YARN进程来检验History功能,我给出了步骤,其中包括提交测试作业时使用hadoop-mapreduce-examples.jar。现在用户遇到了这个文件缺失的问题,可能是因为他们按照之前的步骤操作时发现这个jar包不存在。 首先,我需要确定这个jar包在Hadoop中的位置。通常,Hadoop安装包中会包含示例jar文件,但可能用户安装的是二进制分发包而不是源码包,或者安装过程中某些步骤遗漏了。Hadoop 3.3.6版本的结构可能与旧版本不同,需要确认默认路径是否正确。 接下来,用户提到的错误信息是文件不存在或不是普通文件,这可能意味着路径错误,或者文件确实不存在,或者存在符号链接问题。我需要考虑几种可能性:jar包是否被误删,安装包是否不完整,或者环境变量配置错误导致系统找不到该文件。 解决方案方面,第一步应该是指导用户查找该jar包的位置,使用find命令在Hadoop安装目录下搜索。如果找到,可能需要检查Hadoop的classpath配置是否正确,或者使用绝对路径来运行示例程序。如果找不到,可能需要重新生成示例jar,比如通过编译源码,或者从其他来源获取。 另外,用户可能没有正确安装Hadoop的示例部分,某些Hadoop发行版可能将示例jar单独打包,需要额外下载。或者用户可能误删了该文件,这时候需要重新安装相关组件。 还需要考虑到用户可能对Hadoop的目录结构不熟悉,所以需要给出具体的路径示例,比如在Hadoop安装目录下的share/hadoop/mapreduce目录中查找。同时,用户可能不知道如何编译源码生成jar包,因此需要详细步骤,比如使用Maven命令进行编译。 最后,需要提醒用户检查文件权限,确保jar文件可读,并确认文件类型是否正确,避免符号链接导致的问题。如果所有方法都无效,建议用户重新安装Hadoop或联系社区支持。 总结下来,我需要分步骤引导用户检查文件是否存在,提供不同情况下的解决方案,并确保用户能够理解每一步的操作。同时,要预见到用户可能遇到的常见问题,比如路径错误或安装不完整,并给出对应的解决方法。</think>针对Hadoop 3.3.6中`hadoop-mapreduce-examples.jar`文件缺失或无效的问题,请按以下步骤排查和解决: --- ### 一、定位文件路径 #### 1. 验证默认安装位置 Hadoop 3.x版本的示例程序通常位于以下路径: ```bash $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar ``` 可通过以下命令全局搜索: ```bash find / -name "hadoop-mapreduce-examples*.jar" 2>/dev/null ``` #### 2. 检查安装完整性 若未找到文件,可能是以下原因: - **安装包类型错误**:确认下载的是**二进制发行版**(文件名含`-bin`),而非源码包 - **文件被误删**:检查`$HADOOP_HOME/share/hadoop/mapreduce/`目录是否存在 --- ### 二、解决方案 #### 方案1:手动生成示例JAR(推荐) 通过源码编译生成: ```bash # 进入Hadoop源码目录 cd hadoop-3.3.6-src/hadoop-mapreduce-project # 编译示例模块 mvn clean package -DskipTests -Pdist # 生成的JAR位于: target/hadoop-mapreduce-examples-3.3.6.jar ``` #### 方案2:从官方资源补全 直接从Apache仓库下载对应版本: ```bash wget https://repo.maven.apache.org/maven2/org/apache/hadoop/hadoop-mapreduce-examples/3.3.6/hadoop-mapreduce-examples-3.3.6.jar ``` #### 方案3:符号链接修复 若文件类型异常(如误创建为目录): ```bash rm -rf hadoop-mapreduce-examples-3.3.6.jar # 删除异常文件 ln -s $HADOOP_HOME/share/hadoop/mapreduce/client/hadoop-mapreduce-client-examples-3.3.6.jar hadoop-mapreduce-examples.jar ``` --- ### 三、验证修复 运行WordCount测试: ```bash hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output ``` --- ### 关键配置检查 1. **环境变量**:确认`$HADOOP_HOME`指向正确路径 2. **文件权限**:确保JAR文件有读取权限 ```bash chmod +r hadoop-mapreduce-examples-3.3.6.jar ``` 3. **安装日志**:检查初始安装时的`install.log`是否有报错记录 --- ### 附:Hadoop 3.x文件结构对比 | 文件类型 | 标准路径 | |-------------------|----------------------------------------| | 核心JAR | `$HADOOP_HOME/share/hadoop/common/` | | MapReduce示例JAR | `$HADOOP_HOME/share/hadoop/mapreduce/` | | YARN组件 | `$HADOOP_HOME/share/hadoop/yarn/` | --- ### 相关问题 1. 如何通过Maven自定义编译Hadoop特定模块? 2. Hadoop二进制包与源码包的主要区别是什么? 3. 如何修复Hadoop环境变量配置错误导致的ClassNotFound异常?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值