转载自 ---- http://weilaiyxj.iteye.com/blog/913166
本文约定:
DN: DataNode
TT: TaskTracker
NN: NameNode
SNN: Secondry NameNode
JT: JobTracker
本文介绍Hadoop各节点和Client之间通信协议。
Hadoop的通信是建立在RPC的基础上,关于RPC的详解介绍大家可以参照 "hadoop rpc机制 && 将avro引入hadoop rpc机制初探"
Hadoop中节点之间的通信是比较复杂的一个网络,若可以把它们之间的通信网络了解清楚,那么对于Hadoop的整体框架理解会有很大帮助。
HDFS中有5种协议:
DatanodeProtocol (DN && NN)
InterDatanodeProtocol (DN && DN)
ClientDatanodeProtocol (Client && DN)
ClientProtocol (Client && NN)
NamenodeProtocol (SNN && NN)
Map/Reduce 中有3种协议:
InterTrackerProtocol (TT && JT)
JobSubmissionProtocol (Client && JT)
TaskUmbilicalProtocol (Child && TT)
其中,DatanodeProtocol,ClientDatanodeProtocol,InterTrackerProtocol,TaskUmbilicalProtocol,JobSubmissionProtocol这5种协议通信频繁。
这8种协议在Hadoop中是作为接口存在,8种协议都继承接口VersionedProtocol。
协议的实现主要集中在类: JobTracker, NameNode, TaskTracker, DataNode 这4个类中。
其中
JobTracker实现两个接口: InterTrackerProtocol,JobSubmissionProtocol
TaskTracker类实现: TaskUmbilicalProtocol
NameNode类实现: DatanodeProtocol,ClientProtocol,NamenodeProtocol
DataNode类实现: InterDatanodeProtocol,ClientDatanodeProtocol
类图参照下图
下面单独介绍每种协议
1.InterTrackerProtocol (TaskTracker & JobTracker通信协议)
协议简介:
TT 每隔一段时间向JT发送heartbeat提交当前TT所在机器的内存,CPU,磁盘等状态信息,是否可以接收新任务等信息;JT接收到
heartbeat给TT返回需要所做的job或task操作,是否开启新的任务。TT可以从取得JT取得当前文件系统路径,需要执行Job的Jar文件
路径等。
方法介绍:
heartbeat() //TT周期性(最短时间缺省时间是3秒)的调用heartbeat给JT发送heartbeat
输入参数:
TaskTrackerStatus: TaskTracker机器状态信息
空闲磁盘信息,虚拟和实际内存信息,Map使用内存,Reduce使用内存,可以虚拟和物理内存,累计 CPU 时间,CPU频率,CPU处理器个数,CPU使用率
Restarted: 是否是第一次启动
initialContact: 是否需要初始化
acceptNewTasks: 是否能接收新的Task (Map/Reduce)
responseId: 上次从JT成功接收的ID
返回结果:(JobTracker返回HeartbeatResponse )
HeartbeatResponse对象有以下几个属性:
responseId:返回应答ID
heartbeatInterval: heartbeat间隔
action列表: JT需要TT所做的操作(LAUNCH_TASK,KILL_TASK,KILL_JOB, REINIT_TRACKER,COMMIT_TASK)
getFilesystemName: TaskTracker调用一次,取得的文件系统路径
reportTaskTrackerError: TT报告问题到JT
getTaskCompletionEvents: 取得jobid的task完成信息
getSystemDir: 取得执行Job所需要文件的路径
2. JobSubmissionProtocol(JobClient & JobTracker 之间通信)
协议简介:
主要用来提交,执行Job和取得当前Job状态;
JobClient可以通过此协议提交Job(submitJob),取得当前job的参数,状态,Counter,Task状态,文件系统路径,jar文件路径,所有job的状态,还有Job队列的信息,
此外JobClient还可以提交KillJob和设定Job优先级等任务到JobTracker;
主要方法:
getNewJobId:分配JobId
submitJob:提交Job执行,返回Job状态
getClusterStatus:取得当前Cluster的状态,如果detailed为true还报告tracker names信息,返回cluster状态
killJob:Kill Job
setJobPriority:设定job优先级
killTask:Kill 任务attempt
getJobProfile: 取得已运行的job的句柄
getJobStatus: 取得已运行Job的状态
getJobCounters: 取得job的Counter
getMapTaskReports: 取得Job的各个Map Task报告
getReduceTaskReports: 取得Job的各个Reduce Task报告
getCleanupTaskReports:取得CleanupTask结果报告
getSetupTaskReports:取得Setup Task报告
getFilesystemName: 返回文件系统的名称
jobsToComplete: 取得没有完成和没有失败的Job状态(正在运行Job)
getAllJobs:取得所有Job状态
getTaskCompletionEvents: 取得特定Jobid完成的事件
getSystemDir:取得job文件存放的路径
getQueues:取得JobTracker的队列集合
getQueueInfo: 取得一个Job的调度信息
getJobsFromQueue:取得一个队列中所有提交的job
3. TaskUmbilicalProtocol (Child & TaskTracker)
协议简介:
Child & TaskTracker之间通信协议:
Child通过此协议,查看TT是否存在,取得任务,报告任务的进度,状态,出错信息,Commit文件到HDFS,并取得map结果给reduce;TaskTracker接收任务并监控任务的进度
主要方法:
getTask: Child运行时,调用此方法取得task任务
statusUpdate: 报告child进程进度
reportDiagnosticInfo:
reportNextRecordRange:报告Task下一步将要处理的记录范围
ping: child周期性的调用此方法来查看parent(TaskTracker)是否存在
commitPending: 报告此任务任务已完成,但是文件还未提交(还未Commit)
canCommit: 轮询task是否可以提交文件(Commit)
getMapCompletionEvents:Reduce任务调用此方法取得Map输出文件, 返回map状态更新(map完成事务)
4. DatanodeProtocol (NN & DN)
协议简介:
DN注册信息到NN,发送当前DN,block等信息到NN(发送block报告,发送block错误报告)
NN返回DN需要执行的操作(删除block或copy)
主要方法:
register :注册DN到NN
sendHeartbeat: DN报告NN,存在以及当前状态; NN返回DN DatanodeCommand数组,告诉DN需要做的操作(标记block失效,Copy等)
blockReport:
blockReport()告诉NameNode所有本地的块列表,NameNode返回一个废弃的需要删除的块的列表;
这个功能可以通知NameNode自己机器上的块的情况,当hadoop启动的时候,通过这个方法NameNode重建block和DN的关系表;其他情
况会定期检查(缺省时间一个月)
blockReceived: DataNode告诉NameNode,最近收到的block (假如有超过重复因子数量的额外的块会删除) 例如:client写入一个新块,或另一个DN拷贝一个block到此DN,会调用此方法
errorReport: 报告NameNode 数据节点发生错误
processUpgradeCommand: 给NameNode发送升级命令,返回更新命令
reportBadBlocks: 报告错误的Block
nextGenerationStamp: 返回某一块的新的时间戳
commitBlockSynchronization: Commit block synchronization in lease recovery
5. InterDatanodeProtocol (DN & DN)
协议简介:
取得blockmeta,更新block信息等
主要方法:
getBlockMetaDataInfo: 取得某blockMeta信息
updateBlock:更新Block信息(主要是时间戳和长度)
6.NamenodeProtocol (NN & SNN)
协议简介:
取得DN块列表,回滚edit log, 回滚FsImage
主要方法:
getBlocks: 取得某DataNode的 BlockLIst 并且是固定的Size,返回一个block和位置数组
getEditLogSize:取得当前edit log的size
rollEditLog: 关闭旧的edit log,打开一个新edit log (返回CheckpointSignature : 一个独立的事务ID)
rollFsImage: 主要工作删除旧的fsImage, 拷贝新的image到fsImage; 删除旧的old edits, 重命名到edits
7.ClientDatanodeProtocol (Client && DN)
协议简介:
recoverBlock: 恢复block,返回new blockId和 generation stamp
8.ClientProtocol (Client & NN)
协议简介:
Client-->NN: 用户进行文件操作,文件系统操作,系统管理和问题处理的接口
主要方法:
getBlockLocations: 得到文件某个范围内块的DN列表( 排序是按照和client的远近来排序, 之后Client根据DN位置,直接去最近DN取得实际数据),
create: 创建一个新的文件
append: 追加内容到一个文件结尾(dfs.support.append 为 true时 起作用)
setReplication: 设定当前文件的重复因子
setPermission: 设定存在的文件/目录的权限
setOwner: 设定一个路径的owner
abandonBlock: 丢弃一个block
addBlock: 文件里写入Block
complete:结束写数据,如果文件正常关闭true; 否则 false
reportBadBlocks: Client向NameNode报告损坏的Block
rename: 重命名一个文件或者目录
delete: 删除一个文件或者目录
mkdirs: 创建一个目录
getListing: 返回文件目录状态
renewLease: 判断client 是否dead
getStats: 取得fileSystem的状态
getDatanodeReport: 取得当前datanode的report
getPreferredBlockSize: 取得文件的block size
setSafeMode: 进入safe mode
saveNamespace: 保存namespace image
refreshNodes: NameNode重新读取Hosts文件
finalizeUpgrade: 结束上次更新
metaSave: 将当前系统namenode数据结构dump到一个文件,如果存在那么追加
getFileInfo: 取得文件的信息
setQuota: 设定文件目录的配额
getContentSummary: 目录的内容摘要
fsync: 同步文件所有metadata到文件
setTimes: 设定文件时间
分享到:
相关推荐
本文将深入探讨Hadoop客户端与服务器之间的通信机制,帮助读者理解这一核心过程,以便更好地利用和优化Hadoop系统。 一、Hadoop通信架构概述 Hadoop的通信架构基于其分布式文件系统HDFS(Hadoop Distributed File ...
### Hadoop分布式文件系统(HDFS)架构及源码分析 #### 一、HDFS的架构和设计分析 ##### 1.1 引言 Hadoop分布式文件系统(HDFS)是一种专门为运行在通用硬件上的分布式文件系统而设计的解决方案。与其他分布式文件...
吴超老师的这个小测试例子是关于Hadoop中RPC协议的应用,它可以帮助我们深入理解RPC的工作原理以及在Hadoop生态系统中的实际应用。 首先,我们需要知道Hadoop的RPC是如何工作的。在Hadoop中,RPC主要用于NameNode、...
在本资料中,我们重点讨论的是Hadoop的配置以及与Hbase相关的分布式消息系统。 **Hadoop配置** 配置Hadoop涉及设置集群的节点,网络通信,存储和计算资源。在Hadoop1.0.3中,配置文件通常包括`core-site.xml`...
根据提供的文档信息,本文将详细解析Hadoop系统架构的关键知识点,包括Hadoop核心组件、HDFS(Hadoop Distributed File System)的数据分布与组织、数据复制、通信协议以及启动过程,并进一步探讨Hadoop的并行计算...
本文将详细介绍如何使用Hadoop的RPC机制创建一个简单的协议接口、通信服务端和通信客户端程序。这不仅有助于理解分布式系统中的RPC协议,还能深入了解客户机与服务器之间的通信机制。 #### 二、创建RPC通信程序 ##...
这些工具包括文件系统接口、网络通信协议、安全性机制、配置管理等,为整个Hadoop集群提供了基础设施服务。 二、Windows环境下的Hadoop开发 通常,Hadoop主要运行在Linux环境下,但随着Hadoop的发展,Windows平台的...
本压缩包提供的“hadoop-common-bin-master”是Hadoop Common模块的源代码编译后的二进制版本,它是Hadoop生态系统的基础组件,包含了各种通用工具和库,如文件系统接口、网络通信协议等。 “winutils.exe”是...
在当前数字化时代,企业对数据存储和管理的需求日益增长,基于Hadoop、SpringCloud和Vue技术栈的企业级网盘系统成为了解决这一问题的有效方案。本文将深入探讨这些技术如何结合,以构建一个高效、可扩展且用户友好的...
当你在Windows环境中使用Hadoop的Java API时,如进行MapReduce编程,这个dll文件是必要的,因为它包含了Windows系统调用的实现,使得Java代码能正确地与Hadoop服务通信。 在标题和描述中提到的"IDE调试Hadoop程序...
总结来说,董西成在“Hadoop英雄会——暨Hadoop 10周年生日大趴”中详细介绍了Hadoop YARN的架构、API、通信协议以及如何在YARN上设计和运行应用程序。通过其演讲内容,我们可以看到YARN在构建现代大数据处理和分析...
网络通信组件则包括RPC(Remote Procedure Call)协议,使得Hadoop中的各种服务能够相互通信。安全机制涵盖了身份验证、授权和审计,确保集群的安全性。配置管理则负责处理Hadoop配置文件的读取和解析,为Hadoop组件...
1. **hadoop-common**: 这个模块提供了Hadoop的基础功能,包括网络通信、配置管理、日志记录、安全性和通用工具等。 2. **hadoop-hdfs**: 它包含了HDFS的所有源代码,使得数据可以在分布式环境中进行存储和访问。...
在Hadoop伪分布式部署中,SSH被用来在单机上模拟多个节点之间的通信。通常情况下,CentOS系统已经预装了SSH客户端和SSH服务端。可以通过rpm-qa|grep ssh命令检查系统是否已经安装了SSH相关的软件包。如果没有安装,...
另外,还有诸如NameNode和DataNode之间的通信协议等。 5. **日志和监控**:Hadoop的共享日志框架也在share包中,如`log4j.properties`配置文件,用于控制日志级别和输出。此外,还有监控相关组件,如JMX接口,允许...
5. **网络通信**:Hadoop Common实现了基于TCP/IP的RPC(Remote Procedure Call)协议,使得Hadoop集群中的节点可以相互通信。此外,它还包含Netty库,用于高效的数据传输。 6. **安全性**:在2.7.1版本中,Hadoop ...
Hadoop的RPC机制允许远程节点调用服务,使得分布式环境中不同节点间能够进行高效通信。Spring可以通过配置RPC客户端和服务端,实现对Hadoop服务的调用和暴露。例如,我们可以创建一个Spring Bean来封装Hadoop的...
总之,Hadoop分布式文件系统为云存储提供了高效、安全的数据检索机制,通过分布式计算和智能数据分布,降低了通信开销,提升了整体性能。这对于处理海量数据的企业和组织来说,是实现快速、可靠的数据存取和分析的...
总体来说,基于Hadoop的分布式入侵检测系统的设计与实现涉及了大量先进的IT技术,从网络通信、数据存储到高性能计算等多个方面。设计者需要综合运用这些技术来构建一个能够高效工作、准确检测安全威胁的系统。随着...