`
cloudeagle_bupt
  • 浏览: 538032 次
文章分类
社区版块
存档分类
最新评论

Hadoop系统通信协议介绍

 
阅读更多

转: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 0.20.2,其他版本某些函数会有改变
想共同探讨Hadoop请联系作者: hadoop123 at gmail.com
分享到:
评论

相关推荐

    Hadoop的RPC通信程序

    使用Hadoop的RPC机制创建一个协议接口、通信服务端、通信客户端程序 目标:通过该任务,理解分布式系统中远程过程调用协议,掌握分布式系统中客户机与服务器的通信机制。

    hadoop集群建立

    hadoop集群建立,从准备工作到hadoop配置,再到hadoop的启动。...在第一次配置好hadoop集群时,必须先格式化一个新的分布式文件系统。 在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。

    hdfs源码.zip

    1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 HDFS客户端写流程 24 1.3.3 HDFS客户端追加写流程 25 1.3.4 Datanode启动、心跳...

    大型分布式网站架构与实践

     如何保障高并发系统的稳定运行,如采用流量控制、依赖管理、服务分级、开关等策略,以及介绍如何设计高并发系统。  如何优化应用的性能,包括前端优化、Java程序优化、数据库查询优化等。  如何进行Java应用故障...

    HBase核心模块介绍及基本概念介绍(HBase模式设计)

    Client是整个HBase系统的入口客户端使用RPC协议与HMaster和RegionServer进行通信对于管理类(表的增删)操作,Client与HMaster进行RPC通信对于数据读写类操作Client与RegionServer进行RPC交互客户端可以是多个,也...

    netty4.0.56稳定版本

    例如,在大数据领域中,Hadoop的高性能通信和序列化组件Avro的RPC框架默认采用Netty进行跨节点通信。此外,Netty也广泛应用于分布式系统中,作为基础通信组件被Dubbo、Zookeeper,RocketMQ等分布式开源框架使用。 ...

    netty3.10.6稳定版

    例如,在大数据领域中,Hadoop的高性能通信和序列化组件Avro的RPC框架默认采用Netty进行跨节点通信。此外,Netty也广泛应用于分布式系统中,作为基础通信组件被Dubbo、Zookeeper,RocketMQ等分布式开源框架使用。 ...

    云计算第二版

    2.3.5 通信协议 32 2.3.6 正确性与性能 34 2.4 分布式结构化数据表Bigtable 35 2.4.1 设计动机与目标 35 2.4.2 数据模型 36 2.4.3 系统架构 37 2.4.4 主服务器 38 2.4.5 子表服务器 39 2.4.6 性能优化 42 2.5 分布式...

    FusionInsightHD华为大数据平台.pdf

    FTP-Server⽀持FTP、FTPS协议,每个服务都⽀持PORT、 PASSIVE数据通信协议。⽤户或业务组件可通过通⽤的FTP客户端、传输协议提供对HDFS⽂件系统进⾏基本的操作,例如:⽂件上 传、⽂件下载、⽬录查看、⽬录创建、⽬...

    Storm学习总结

    Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。...要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。

    漫谈大数据第四期-storm

    要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。 容错性。Storm会管理工作进程和节点的故障。 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。 可靠的消息处理。Storm保证每个消息至少能...

    2015 Netty权威指南 第2版 带书签目录 完整版

    1、Hadoop、Storm、Spark、Facebook、Twitter、阿里巴巴都在使用Java高性能NIO通信框架Netty,本书告诉你Why,通过本书你可以全面、系统地理解Netty 架构设计理念,以及异步NIO 编程。 2、本书作者为资深一线专家,...

    EasyMR并行架构技术源码 v1.0

    EasyMR的作业会由Mgr平台根据Key集切分成若干个数据集,通过RTP通信协议分配到计算Cell上,Mgr同时负责监控Cell上运行情况。 3、任务脚本管理运行管理平台 支持基于C#语言的任务执行脚本,所有脚本会基于TaskBase类...

    MyCat权威指南 更新于2018年7月25

    MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信, 其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。 ...

    企业质量大数据的应用.docx

    数据采集的方式很多,以下几种采集方式可以作为参考: 1)电文通讯:在源系统中对数据进行组织,通过TCP/IP协议,将数据以电文方式发送给数据中心。 企业质量大数据的应用全文共3页,当前为第1页。2)数据库通讯:...

    Python示例-从基础到高手PDF

    第 10 章 通过 python 和 websocket 构建实时通信系统[扩展 saltstack 监控] 第 11 章 关于 B+tree (附 python 模拟代码) 第 12 章 Python 编写的 socket 服务器和客户端 第 13 章 python 之 MySQLdb 库的使用 ...

    java多线程tcpsocketserver源码-netty-learning:网络学习

    通用通信 API 支持零复制的富字节缓冲区 io.netty.buffer, io.netty.common, io.netty.resolver, io.netty.resolver.dns 协议支持 HTTP 和 WebSocket 安全证书 谷歌原型缓冲区 大文件传输 io.netty.codec.http, io....

Global site tag (gtag.js) - Google Analytics