Hadoop各個類的作用
1.基礎包(包括工具包和安全包)
包括工具和安全包。其中,hdfs.util包含了一些HDFS實現需要的輔助數據結構;hdfs.security.token.block和hdfs.security.token.delegation結合Hadoop的安全框架,提供了安全訪問HDFS的機制。
hdfs.util(一些HDFS實現需要的輔助數據結構)
AtomicFileOutputStream.java----繼承實現類:原子文件輸出流類;
DataTransferThrottler.java----獨立內存類:數據傳送時的調節參數配置表;這個類是線程安全的,能夠被多個線程所共享;
LightWeightGSet.java----繼承實現類:一個低內存占用的實現類;
hdfs.security.token.block(安全訪問HDFS機制)
BlockKey.java----繼承實現類:Key用于生成和校驗塊的令牌;
BlockTokenIdentifier.java----繼承實現類:塊令牌的標識符;
BlockTokenSecretManager.java----繼承實現類:塊令牌管理類;BlockTokenSecretManager能夠被實例化為兩種模式,主模式和從模式。主節點能夠生成新的塊key,并導出塊key到從節點。從節點只能導入并且使用從主節點接收的塊key。主機和從機都可以生成和驗證塊令牌。
BlockTokenSelector.java----繼承實現類:為HDFS的塊令牌選擇;
ExportedBlockKeys.java----繼承實現類:傳遞塊key對象;
InvalidBlockTokenException.java----繼承實現類:訪問令牌驗證失敗;
hdfs.security.token.delegation(安全訪問HDFS機制)
DelegationTokenIdentifier.java----繼承實現類:特定針對HDFS的代表令牌的標識符;
DelegationTokenRenewer.java----繼承實現類:這是一個守護進程,實現等待下一個文件系統的接續;
DelegationTokenSecretManager.java----繼承實現類:這個類實現了HDFS特定授權的令牌的管理;這個管理類實現了生成并接受每一個令牌的密碼;
DelegationTokenSelector.java----繼承實現類:專門針對HDFS的令牌;
2.HDFS實體實現包
這是代碼分析的重點,包含8個包:
hdfs.server.common包含了一些名字節點和數據節點共享的功能,如系統升級、存儲空間信息等。
hdfs.protocol和hdfs.server.protocol提供了HDFS各個實體間通過IPC交互的接口的定義和實現。
hdfs.server.namenode、hdfs.server.datanode和hdfs分別包含了名字節點、數據節點和客戶端的實現。上述代碼是HDFS代碼分析的重點。
hdfs.server.namenode.metrics 和hdfs.server.datanode.metrics實現了名字節點和數據節點上度量數據的收集功能。度量數據包括名字節點進程和數據節點進程上事件的計數,例如數據節點上就可以收集到寫入字節數、被復制的塊的數量等信息。
hdfs.server.common(一些名字節點和數據節點共享的功能)
GenerationStamp.java----繼承實現類:生成時間戳的功能及讀寫訪問類;
HdfsConstants.java----接口類:一些HDFS內部的常數;Hdfs常量字段及取值的定義;
InconsistentFSStateException.java----繼承實現類:不一致的文件系統狀態異常;文件狀態檢查出錯提示信息;
IncorrectVersionException.java----繼承實現類:不正確的版本異常;版本不正確檢查時提示信息;
Storage.java----繼承實現類:存儲信息文件;本地存儲信息存儲在一個單獨的文件版本中;它包含了節點類型、存儲布局版本、命名空間ID以及文件系統狀態創建時間;內存中以擴展表記錄方式記錄當前namenode索引信息及狀態信息(文件是否在打開);
StorageInfo.java----獨立內存類:存儲信息的通用類;內存中文件索引信息基本表;基本作用是保存地儲上的文件系統元信息;
Upgradeable.java----接口類:分布式升級對象的通用接口;對象升級接口方法集定義;
UpgradeManager.java----獨立內存類、抽象:通用升級管理;
UpgradeObject.java----繼承實現類:抽象升級對象;包含常用接口方法的實現;可升級對象的接口方法實現;
UpgradeObjectCollection.java----獨立內存類:可升級對象的集合容器實現;升級對象在使用前應該先進行注冊,才能使用;
UpgradeStatusReport.java----繼承實現類:系統升級基類;升級過程狀態信息表定義;
Util.java----獨立內存類:獲取當前系統時間;
hdfs.protocol(HDFS各個實體間通過IPC交互的接口)
AlreadyBeingCreatedException.java----繼承實現類:文件已經建立異常;
Block.java----繼承實現類:數據塊在HDFS中的抽象;Bolck內存基本塊結構定義與讀寫訪問;這個類是大量和數據塊相關的類的基礎,在客戶端接口上,這樣的類有LocatedBlock、LocateBlocks和BlockLocalPathInfo。
BlockListAsLongs.java----獨立內存類:這個類提供了一個訪問塊列表的接口;Bolck塊的索引構成數組;該類的作用,就是將塊數組blcokArray中的數據,“原封不動”的轉換成一個long類型的數組blockList;
BlockLocalPathInfo.java----繼承實現類:應用于ClientDatanodeProtocol接口中,用于HDFS讀文件的數據節點本地讀優化。當客戶端發現它和它要讀取的數據塊正好位于同一臺主機上的時候,它可以不通過數據節點讀數據塊,而是直接讀取本地文件,以獲取數據塊的內容。這大大降低了對應數據節點的負載。
ClientDatanodeProtocol.java----接口類:客戶端與數據節點間的接口。用于客戶端和數據節點進行交互,這個接口用得比較少,客戶端和數據節點間的主要交互是通過流接口進行讀/寫文件數據的操作。錯誤發生時,客戶端需要數據節點配合進行恢復,或當客戶端進行本地文件讀優化時,需要通過IPC接口獲取一些信息。
ClientProtocol.java----接口類:客戶端與namenode之間的接口;是HDFS客戶訪問文件系統的入口;客戶端通過這個接口訪問名字節點,操作文件或目錄的元數據信息;讀寫文件也必須先訪問名字節點,接下來再和數據節點進行交互,操作文件數據;另外,從名字節點能獲取分布式文件系統的一些整體運行狀態信息,也是通過這個接口進行的;用于訪問NameNode。它包含了文件角度上的HDFS功能。和GFS一樣,HDFS不提供 POSIX形式的接口,而是使用了一個私有接口。一般來說,程序員通過org.apache.hadoop.fs.FileSystem來和HDFS打交道,不需要直接使用該接口。
DatanodeID.java----繼承實現類:用于在HDFS集群中確定一個數據節點;
DatanodeInfo.java----繼承實現類:繼承自DatanodeID,在DatanodeID的基礎上,提供了數據節點上的一些度量信息;Datanode狀態信息結構定義及訪問讀寫類;
DataTransferProtocol.java----接口類:客戶端與數據節點之間應用流協議傳輸數據的實現;
DirectoryListing.java----繼承實現類:用于一次返回一個目錄下的多個文件/子目錄的屬性;
DSQuotaExceededException.java----繼承實現類:磁盤空間超出配額異常類;
FSConstants.java----接口類:一些有用的常量;
HdfsFileStatus.java----繼承實現類:保存了HDFS文件/目錄的屬性;
LayoutVersion.java----獨立內存類:這個類跟蹤了HDFS布局版本中的改變信息;
LocatedBlock.java----繼承實現類:已經確認了存儲位置的數據塊;可以用于一次定位多個數據塊;
LocatedBlocks.java----繼承實現類:塊的位置和文件長度集合;一組數據塊及文件長度說明信息表的定義及讀寫;
NSQuotaExceededException.java----繼承實現類:命名空間超出配額異常類;
QuotaExceededException.java----繼承實現類:超出配額異常;
UnregisteredDatanodeException.java----繼承實現類:未注冊的數據節點異常;
hdfs.server.protocol(HDFS各個實體間接口的實現)
BalancerBandwidthCommand.java----繼承實現類:管理員通過調用"dfsadmin -setBalanacerBandwidth newbandwidth"實現動態的調整balancer的帶寬參數;
BlockCommand.java----繼承實現類:BlockCommand類實現的是數據節點控制下的塊的指令;數據塊命令定義及實現類;
BlockMetaDataInfo.java----繼承實現類:一個塊的元數據信息;數據塊的元數據信息定義及實現;
BlockRecoveryInfo.java----繼承實現類:塊恢復操作信息;
BlocksWithLocations.java----繼承實現類:BlockLocations序列的實現類;帶位置的塊信息的讀寫;
DatanodeCommand.java----抽象類:數據節點命令;數據節點基本信息定義及實現;
DatanodeProtocol.java----接口類:服務器間接口——數據節點與名字節點間的接口。在HDFS的主從體系結構中,數據節點作為從節點,不斷的通過這個接口主節點名字節點報告一些信息,同步信息到名字節點;同時,該接口的一些方法,方法的返回值會帶回名字節點指令,根據這些指令,數據節點或移動、或刪除,或恢復本地磁盤上的數據塊,或者執行其他的操作。
DatanodeRegistration.java----繼承實現類:DatanodeRegistration類包含名字節點識別和驗證數據節點的所有信息;數據節點的注冊信息讀寫方法定義及實現;
DisallowedDatanodeException.java----繼承實現類:不允許的數據節點異常;
InterDatanodeProtocol.java----接口類:服務器間的接口——數據節點與數據節點間的接口。數據節點通過這個接口,和其他數據節點進行通信,恢復數據塊,保證數據的一致性。
KeyUpdateCommand.java----繼承實現類:key升級命令;
NamenodeProtocol.java----接口類:服務期間接口——第二名字節點、HDFS均衡器與名字節點間的接口。第二名字節點會不停的獲取名字節點上某一個時間點的命名空間鏡像和鏡像的變化日志,然后會合并得到一個新的鏡像,并將該結果發送回名字節點,在這個過程中,名字節點會通過這個接口,配合第二名字節點完成元數據的合并。該接口也為HDFS均衡器balancer的正常工作提供一些信息。
NamespaceInfo.java----繼承實現類:NamespaceInfo類實現了返回名字節點針對數據節點的握手;
UpgradeCommand.java----繼承實現類:這是一個通用的分布式升級命令類;升級數據塊命名實現;
hdfs.server.namenode(名字節點的實現)
BlockPlacementPolicy.java----抽象類:這個接口用于選擇放置塊副本的目標磁盤的所需的數目;
BlockPlacementPolicyDefault.java----繼承實現類:這個類實現了選擇放置塊副本的目標磁盤的所需的數目;
BlockPlacementPolicyWithNodeGroup.java----繼承實現類:這個類實現了在node-group層上選擇放置塊副本的目標磁盤的所需的數目;
BlockInfo.java----獨立內存類:這個類維護了塊到它元數據的映射;
CancelDelegationTokenServlet.java----繼承實現類:取消代表令牌服務;
CheckpointSignature.java----繼承實現類:檢查點簽名類;存貯信息的簽名信息表定義;
ContentSummaryServlet.java----繼承實現類:文件校驗服務;
CorruptReplicasMap.java----獨立內存類:存儲文件系統中所有損壞的塊的信息;
DatanodeDescriptor.java----繼承實現類:DatanodeDescriptor類跟蹤并統計了給定的數據節點上的信息,比如可用存儲空間,上次更新時間等等;數據節點的狀態信息定義及實現;
DecommissionManager.java----獨立內存類:管理節點的解除;
DfsServlet.java----抽象類:DFS服務的基類;Web方式操作DFS的代理接口;
EditLogInputStream.java----抽象類:一個通用的抽象類用來支持從持久型存儲讀取編輯日志數據;讀取日志數據的類方法定義及實現;
EditLogOutputStream.java----繼承實現類:一個通用的抽象類用來支持從持久型存儲記錄編輯日志數據;寫日志數據的類方法定義及實現;
FileChecksumServlets.java----獨立內存類:文件校驗服務;文件較驗web操作命令的代理實現;
FileDataServlet.java----繼承實現類:文件數據web操作命令的代理實現;
FsckServlet.java----繼承實現類:名字節點上fsck的web服務;文件系統檢查web操作命令的代理實現;
FSClusterStats.java----接口類:這個接口用于檢索集群相關的統計;
FSDirectory.java----繼承實現類:類FSDirectory實現了存儲文件系統的目錄狀態;文件目錄結構的定義及實現;
FSEditLog.java----獨立內存類:FSEditLog類實現了維護命名空間改動的日志記錄;文件系統日志表的定義;
FSImage.java----繼承實現類:FSImage實現對命名空間的編輯進行檢查點操作和日志記錄操作;文件系統的目錄、文件、數據的索引及關系信息定義;
FSInodeInfo.java----接口類:文件系統相關信息;
FSNamesystem.java----繼承實現類:FSNamesystem類實現了為數據節點進行實際的記賬工作;為數據節點命名的信息結構定義;
FSPermissionChecker.java----獨立內存類:實現用于檢測文件系統權限的類;
GetDelegationTokenServlet.java----繼承實現類:獲取委托令牌服務;
GetImageServlet.java----繼承實現類:這個類用于在命名系統中檢索文件;通常用于第二名字節點來檢索鏡像以及為周期性的檢測點進行編輯文件;
Host2NodesMap.java----獨立內存類:主機到節點的映射;
INode.java----繼承實現類:這個抽象類包含了文件和目錄索引節點的通用字段;節點基礎信息結構定義;
INodeDirectory.java----繼承實現類:表示目錄的索引節點的類;
INodeDirectoryWithQuota.java----繼承實現類:有配額限制的目錄索引節點類;
INodeFile.java----繼承實現類:目錄索引節點文件;文件節點信息結構定義;
INodeFileUnderConstruction.java----繼承實現類:建立目錄索引節點文件;在創建之下的文件節點信息結構定義;
JspHelper.java----獨立內存類:JSP實現輔助類;
LeaseExpiredException.java----繼承實現類:創建的文件已過期異常;
LeaseManager.java----獨立內存類:LeaseManager實現了寫文件的租賃管理;這個類還提供了租賃恢復的有用的靜態方法;契約信息結構定義及實現;
ListPathsServlet.java----繼承實現類:獲取一個文件系統的元信息;
MetaRecoveryContext.java----獨立內存類:正在進行的名字節點恢復進程的上下文數據;
NameCache.java----獨立內存類:緩存經常使用的名稱以便再用;
NameNode.java----繼承實現類:名字節點功能管理和實現類;名稱節點的核心服務器類;
NamenodeFsck.java----獨立內存類:這個類提供了DFS卷基本的檢測;名稱節點的系統檢測類;
NameNodeMXBean.java----接口類:這個類是名字節點信息的JMX管理接口;
NotReplicatedYetException.java----繼承實現類:文件還未賦值異常類;
PendingReplicationBlocks.java----獨立內存類:這個類PendingReplicationBlocks實現了所有快復制的記錄;正在復制數據塊的信息表定義;
PermissionChecker.java----獨立內存類:這個類實現了執行權限檢查操作;權限檢查表結構定義及實現;
RenewDelegationTokenServlet.java----繼承實現類:續訂令牌服務;
SafeModeException.java----繼承實現類:當名字節點處于安全模式的時候拋出這個異常;客戶端不能夠修改名字空間直到安全模式關閉;
SecondaryNameNode.java----繼承實現類:第二名字節點功能的管理和實現類;
SerialNumberManager.java----獨立內存類:為用戶和組管理名稱到序列號的映射;
StreamFile.java----繼承實現類:流文件類的實現;
TransferFsImage.java----繼承實現類:這個類實現了從名字節點獲取一個指定的文件的功能;通過http方式來獲取文件的鏡像信息;
UnderReplicatedBlocks.java----繼承實現類:復制塊的類的實現;復制完成后的塊信息表定義;
UnsupportedActionException.java----繼承實現類:操作不支持的異常;
UpgradeManagerNamenode.java----繼承實現類:名字節點升級的管理;
UpgradeObjectNamenode.java----抽象類:名字節點對象更新類;數據節點的更新運行在單獨的線程上;升級名稱節點的對象信息;
hdfs.server.datanode(數據節點的實現)
BlockAlreadyExistsException.java----繼承實現類:目標塊已經存在異常;
BlockMetadataHeader.java----獨立內存類:數據塊頭部結構定義及實現;
BlockReceiver.java----繼承實現類:這個類實現了接收一個塊并寫到自己的磁盤的功能,同時也可以復制它到另外一個磁盤;數據塊接收容器信息結構及實現寫入到盤中;接收一個數據塊,并寫到本地的磁盤,同時可能會拷貝到其他的節點上;
BlockSender.java----繼承實現類:從磁盤讀取塊,并發送它到接收的目的地;從磁盤中讀數據塊并發送到相應接收者;
BlockTransferThrottler.java----獨立內存類:調節數據塊的傳輸;塊傳送時的調節參數配置表;
DataBlockScanner.java----繼承實現類:數據塊的掃描工具實現;DataBlockScanner擁有它單獨的線程,能定時地從目前DataNode管理的數據塊文件進行校驗;其實最重要的方法就是verifyBlock;DataBlockScanner其他的輔助方法用于對 DataBlockScanner管理的數據塊文件信息進行增加/刪除,排序操作;
DataNode.java----繼承實現類:數據節點的功能的管理和實現;數據塊的核心管理器;
DatanodeBlockInfo.java----獨立內存類:這個類用于數據節點保持從數據塊到它的元數據的映射的功能;建立塊文件和其屬于哪個FSVolume之間的映射關系;
DataNodeMXBean.java----接口類:數據節點信息的JMX管理接口的實現;
DataStorage.java----繼承實現類:數據存儲信息文件;
DataXceiver.java----繼承實現類:用于處理輸入/輸出數據流的線程;
DataXceiverServer.java----繼承實現類:用于接收和發送數據塊的服務;
FSDataset.java----繼承實現類:FSDataset類實現管理數據塊集合的功能;
FSDatasetAsyncDiskService.java----獨立內存類:這個類實現了每個卷上多個線程池的容器,所以我們能夠輕松地調度異步磁盤操作;為每個數據塊目錄創建一個線程池,并用作為一個線程組,池的最小值為1 ,最大值為4;當前版本,只有delete 操作會將任務經過線程池調度來進行異步處理,讀寫操作都是調文件操作同步去執行的;
FSDatasetInterface.java----接口類:這是一個接口,這個接口實現了一個數據節點存儲塊的底層存儲;FSDatasetInterface是DataNode對底局存儲的抽象;
SecureDataNodeStarter.java----繼承實現類:這個類實現在一個安全的集群中啟動一個數據節點,在啟動前需要獲得特權資源,并把它們遞交給數據節點;
UpgradeManagerDatanode.java----繼承實現類:這個類實現了數據節點的升級管理;
UpgradeObjectDatanode.java----抽象類:這個類是數據節點升級對象的基類;數據節點升級運行在一個單獨的線程中;
hdfs(客戶端的實現)
BlockReader.java----接口類:這個接口供本地和遠程塊讀取共享;
BlockReaderLocal.java----繼承實現類:本地塊讀取;
ByteRangeInputStream.java----抽象類:為了支持HTTP字節流,每次都需要建立一個針對HTTP服務的新的連接;
ChecksumDistributedFileSystem.java----繼承實現類:分布式文件系統檢測;
DFSClient.java----獨立內存類:DFSClient類能夠連接到Hadoop文件系統并執行基本的文件操作;
DFSConfigKeys.java----繼承實現類:這個類包含了HDFS中使用的常數;
DFSUtil.java----獨立內存類:DFS實用工具;
DistributedFileSystem.java----繼承實現類:DFS系統的抽象文件系統實現;分布式文件系統功能的實現;
HftpFileSystem.java----繼承實現類:通過HTTP訪問文件系統的協議的執行;采用HTTP協議來訪問HDFS文件;
HsftpFileSystem.java----繼承實現類:通過HTTPs訪問文件系統的協議的執行;采用HTTPs協議來訪問HDFS文件;
LeaseRenewer.java----獨立內存類:更新租賃;
hdfs.server.namenode.metrics(名字節點上度量數據的收集功能)
FSNamesystemMBean.java----接口類:這個接口定義了獲取一個名字節點的FSNamesystem狀態的方法;取名稱節點的文件狀態信息;
NameNodeInstrumentation.java----繼承實現類:名字節點規范類;
hdfs.server.datanode.metrics(數據節點上度量數據的收集功能)
DataNodeInstrumentation.java----繼承實現類:數據節點的一些規范;
FSDatasetMBean.java----接口類:這個接口中定義了方法來獲取一個數據節點的FSDataset的狀態;數據集的職能定義;
3.應用包
包括hdfs.tools和hdfs.server.balancer,這兩個包提供查詢HDFS狀態信息工具dfsadmin、文件系統檢查工具fsck和HDFS均衡器balancer(通過start-balancer.sh啟動)的實現。
hdfs.tools(查詢HDFS狀態信息工具dfsadmin、文件系統檢查工具fsck的實現)
DelegationTokenFetcher.java----獨立內存類:這個類實現了從當前的名字節點獲取DelegationToken,并存儲它到指定的文件當中;
DFSAdmin.java----繼承實現類:這個類實現了提供一些DFS訪問管理;管理員命令的實現;
DFSck.java----繼承實現類:這個類實現了對DFS卷進行基本的檢查;文件系統檢查命令的實現;
HDFSConcat.java----獨立內存類:HDFS串接;
hdfs.server.balancer(HDFS均衡器balancer的實現)
Balancer.java----繼承實現類:負載均衡進程,各節點基于他來進行任務量的平衡;balance是一個工具,用于當一些數據節點全部使用或者有新的節點加入集群的時候,來平衡HDFS集群上的磁盤空間使用率;
4.WebHDFS相關包
包括hdfs.web.resources、hdfs.server.namenode.metrics.web.resources、hdfs.server.datanode.web.resources和hdfs.web共4個包。
WebHDFS是HDFS 1.0中引入的新功能,它提供了一個完整的、通過HTTP訪問HDFS的機制。對比只讀的hftp文件系統,WebHDFS提供了HTTP上讀寫HDFS的能力,并在此基礎上實現了訪問HDFS的C客戶端和用戶空間文件系統(FUSE)。