1. 程式人生 > >Hadoop框架:DataNode工作機制詳解

Hadoop框架:DataNode工作機制詳解

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent) # 一、工作機制 ## 1、基礎描述 ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201020114730655-1016586239.png) DataNode上資料塊以檔案形式儲存在磁碟上,包括兩個檔案,一個是資料本身,一個是資料塊元資料包括長度、校驗、時間戳; DataNode啟動後向NameNode服務註冊,並週期性的向NameNode上報所有的資料塊元資料資訊; DataNode與NameNode之間存在心跳機制,每3秒一次,返回結果帶有NameNode給該DataNode的執行命令,例如資料複製刪除等,如果超過10分鐘沒有收到DataNode的心跳,則認為該節點不可用。 ## 2、自定義時長 通過hdfs-site.xml配置檔案,修改超時時長和心跳,其中中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒。 ```xml ``` ## 3、新節點上線 當前機器的節點為hop01、hop02、hop03,在此基礎上新增節點hop04。 **基本步驟** 基於當前一個服務節點克隆得到hop04環境; 修改Centos7相關基礎配置,並刪除data和log檔案; 啟動DataNode,即可關聯到叢集; ## 4、多目錄配置 該配置同步叢集下服務,格式化啟動hdfs及yarn,上傳檔案測試。 ```xml ``` # 二、黑白名單配置 ## 1、白名單設定 配置白名單,該配置分發到叢集服務下; ``` [root@hop01 hadoop]# pwd /opt/hadoop2.7/etc/hadoop [root@hop01 hadoop]# vim dfs.hosts hop01 hop02 hop03 ``` 配置hdfs-site.xml,該配置分發到叢集服務下; ```xml ``` 重新整理NameNode ``` [root@hop01 hadoop2.7]# hdfs dfsadmin -refreshNodes ``` 重新整理ResourceManager ``` [root@hop01 hadoop2.7]# yarn rmadmin -refreshNodes ``` ## 2、黑名單設定 配置黑名單,該配置分發到叢集服務下; ``` [root@hop01 hadoop]# pwd /opt/hadoop2.7/etc/hadoop [root@hop01 hadoop]# vim dfs.hosts.exclude hop04 ``` 配置hdfs-site.xml,該配置分發到叢集服務下; ```xml ``` 重新整理NameNode ``` [root@hop01 hadoop2.7]# hdfs dfsadmin -refreshNodes ``` 重新整理ResourceManager ``` [root@hop01 hadoop2.7]# yarn rmadmin -refreshNodes ``` # 三、檔案存檔 ## 1、基礎描述 HDFS儲存的特點,適合海量資料的大檔案,如果每個檔案都很小,會產生大量的元資料資訊,佔用過多的記憶體,並且在NaemNode和DataNode互動的時候變的緩慢。 ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201020114713048-375407745.png) HDFS可以對一些小的檔案進行歸檔儲存,這裡可以理解為壓縮儲存,即減少NameNode的消耗,也較少互動的負擔,同時還允許對歸檔的小檔案訪問,提高整體的效率。 ## 2、操作流程 **建立兩個目錄** ``` # 存放小檔案 [root@hop01 hadoop2.7]# hadoop fs -mkdir -p /hopdir/harinput # 存放歸檔檔案 [root@hop01 hadoop2.7]# hadoop fs -mkdir -p /hopdir/haroutput ``` **上傳測試檔案** ``` [root@hop01 hadoop2.7]# hadoop fs -moveFromLocal LICENSE.txt /hopdir/harinput [root@hop01 hadoop2.7]# hadoop fs -moveFromLocal README.txt /hopdir/harinput ``` **歸檔操作** ``` [root@hop01 hadoop2.7]# bin/hadoop archive -archiveName output.har -p /hopdir/harinput /hopdir/haroutput ``` **檢視歸檔檔案** ``` [root@hop01 hadoop2.7]# hadoop fs -lsr har:///hopdir/haroutput/output.har ``` ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201020114658371-348467609.png) 這樣就可以把原來的那些小檔案塊刪除即可。 **解除歸檔檔案** ``` # 執行解除 [root@hop01 hadoop2.7]# hadoop fs -cp har:///hopdir/haroutput/output.har/* /hopdir/haroutput # 檢視檔案 [root@hop01 hadoop2.7]# hadoop fs -ls /hopdir/haroutput ``` # 四、回收站機制 ## 1、基礎描述 如果開啟回收站功能,被刪除的檔案在指定的時間內,可以執行恢復操作,防止資料被誤刪除情況。HDFS內部的具體實現就是在NameNode中啟動一個後臺執行緒Emptier,這個執行緒專門管理和監控系統回收站下面的檔案,對於放進回收站的檔案且超過生命週期,就會自動刪除。 ## 2、開啟配置 該配置需要同步到叢集下的所有服務; ``` [root@hop01 hadoop]# vim /opt/hadoop2.7/etc/hadoop/core-site.xml # 新增內容 ``` fs.trash.interval=0,表示禁用回收站機制,=1表示開啟。 # 五、原始碼地址 ``` GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent ``` **推薦閱讀:程式設計體系整理** |序號|專案名稱|GitHub地址|GitEE地址|推薦指數| |:---|:---|:---|:---|:---| |01|Java描述設計模式,演算法,資料結構|[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆| |02|Java基礎、併發、面向物件、Web開發|[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆| |03|SpringCloud微服務基礎元件案例詳解|[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆| |04|SpringCloud微服務架構實戰綜合案例|[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆| |05|SpringBoot框架基礎應用入門到進階|[GitHub·點這裡](https://github.com/cicadasmile/spring-boot-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆| |06|SpringBoot框架整合開發常用中介軟體|[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆| |07|資料管理、分散式、架構設計基礎案例|[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆| |08|大資料系列、儲存、元件、計算等框架|[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)|☆☆