最近突然觉得, 很多掌握的都还是很浅的原理,需要更深入细粒度去了解整个分布式系统的运转机制。于是。。开始作死而又作死而又作死的源码之旅。万事万物,有始有终,因果循环,停止扯淡,开始。
Hadoop包的功能总共有下列几类:
tool:提供一些命令行工具,如DistCp,archive
mapreduce,:Hadoop的Map/Reduce实现
filecache:提供HDFS文件的本地缓存,用于加快Map/Reduce的数据访问速度
fs:文件系统的抽象,可以理解为支持多种文件系统实现的统一文件访问接口
hdfs:HDFS,Hadoop的分布式文件系统实现
ipc:一个简单的IPC的实现,依赖于IO提供的编解码功能
io:表示层,将各种数据编码/解码,方便在网络上的传输
net:封装部分网络功能,如DNS,socket
security:用户和用户组信息
conf:系统的配置参数
metrics:系统攻击数据的收集,用于网管范畴
util:工具类
record:根据DDL自动生成他们的编码函数,目前可以提供C++和java
http:基于Jetty的HTTP Servlet,用户通过浏览器可以观察文件系统的一些状态信息和日志
log:提供HTTP访问日志的HTTP Servlet
一、RPC
它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。
RPC采用客户机/服务器模式,请求程序就是一个客户机,而服务提供程序就是一个服务器。例如HDFS的通信就包括:
1、Client-NameNode之间,其中NameNode是服务器。
2、Client-DataNode之间,其中DataNode是服务器。
3、DataNode-NameNode之间,其中NameNode是服务器。
4、DataNode-DataNode之间,其中某一个DataNode是服务器,另一个是客户端。
org.apache.hadoop.rpc中包含Client类和Server类。Server类是一个抽象类,类RPC封装了Server,利用反射,把某个对象的方法开放出来,变成RPC中的服务器。
二、NameNode与DataNode
一个HDFS集群可能包含上千DataNode节点,这些DataNode定时与NameNode通信,为了减轻NameNode的负担,NameNode上并不永久保存DataNode上那些数据块信息,而是通过DataNode启动时上报,来更新NameNode上的映射表。