從今天開始,開始研究學習Hadoop Common相干的源碼結構。Hadoop Common在Hadoop1.0中是在core包下面的。此包下面的內容供HDFS和MapReduce公用,所以作用還是非常大的。Hadoop Common模塊下的內容是比較多的。本人打算在后面的學習中挑選部份模塊進行分析學習,比如他的序列化框架的實現,RPC的實現等等。我對此模塊截出了1些圖:
程序包下的主要模塊關系圖:
下面分模塊,做1下簡短的概述
1.org.apache.hadoop.conf,配置相干類,配置類在Hadoop中1直都是1個比較基本類,很多配置設置的數據都需要從配置文件中去讀取。Hadoop中配置文件還挺多的,HDFS和MapReduce各1個,還會用用戶自定義的配置文件。系統開放了許多的get/set方法來獲得和設置其中的屬性。
2.org.apache.hadoop.fs,Hadoop文件系統,從Hadoop的文件系統中,或許你會看到Linux文件系統的影子,里面包括了很多文件File的各種基本操作,還有很多在文件中特殊的操作實現,比如權限控制,目錄,文件通過甚么來組織,Hadoop文件系統弄了1個和VFS虛擬文件系統非常像的1個抽象文件系統,基于這個Hadoop抽象文件系統,派生了很多具體具有各個功能的文件子系統,比如內存文件系統,校驗和系統。
3.org.apache.hadoop.io,Hadoop I/O系統,輸入輸出系統在任何1個系統都是非常重要的設計,一樣在Hadoop中,在此上面實現了1個獨有的序列化系統,不同于java自帶的序列化實現,Hadoop的序列化機制具有快速,緊湊的特點,非常合適于Hadoop的使用處景。還有1個就是Hadoop的在I/O中的解緊縮的設計,里面還可以通過JNI的情勢調用第3方的比較優秀的緊縮算法,比如Google的Snappy框架。
4.org.apache.hadoop.ipc,Hadoop遠程進程調用的實現,這個模塊的設計是有很多值得學習的好地方,java的RPC最直接的體現就是RMI的實現,RMI的實現就是1個簡陋版本的遠程進程調用,但是由于JMI的不可定制性,所以Hadoop根據自己系統特點,重新設計了1套獨有的RPC體系,在java NIO的基礎上,用了java動態代理的思想,RPC的服務端和客戶端都是通過代理取得方式獲得。
其他包的1些內容我簡單的描寫,org.apache.hadoop.log,日志幫助類,實現估值的檢測和恢復,org.apache.hadoop.metrics,用于度量統計用的,主要用于分析的,至于具體怎樣做的,本人也不是特別了解,org.apache.hadoop.http和org.apache.hadoop.net是Hadoop對網絡層次相干的封裝,最后要提到的就是org.apache.hadoop.util就是在Common中的公共方法類,checkSum校驗和的驗證方法就包括于此。