徐翔 張光亞



關鍵詞:Hadoop;HDFS;云盤;分布式存儲
中圖分類號:TP317 文獻標識碼:A
文章編號:1009-3044(2023)03-0078-04
1 引言
隨著目前互聯網產業的飛速發展,以及通訊設備應用的普及,計算機在人們日常生活中發揮著越來越重要的作用,信息的處理、傳輸和采集已然成為現代信息技術的三大基石[1]。在未來,隨著大數據、物聯網、人工智能、5G等技術的不斷突破與發展,全球的數據量將越來越大,信息的存儲和管理變得復雜,單機硬盤存儲已滿足不了用戶的文件存儲和管理需要。
為了適應目前信息化社會對于支持網絡和多種數據信息的應用軟件的要求,以網絡存儲為核心的個人云盤存儲系統應運而生。云盤存儲相對于傳統的實體磁盤來說更方便快捷,用戶不需要把儲存重要資料的實體磁盤帶在身上,而可以通過互聯網輕松地從云端讀取自己所存儲的信息,解決了單機硬盤存儲量少、管理效率低、網絡傳輸能力差等有關于文件存儲的問題。
在云存儲服務面向用戶使用之前,用戶數據的存儲存在一定的局限性,例如當用戶需要向個人存儲系統中存儲海量數據文件時,因系統本身沒有實現大數據文件優化存儲處理的方案,原本的系統存儲性能將會很大程度地降低。此時即使對存儲服務器進行擴展升級,存儲性能也不會有明顯的提升。因此,相對于傳統的存儲服務,云存儲無論是對于需要更大存儲空間的個人,還是對于尋求高效異地數據備份解決方案的企業都越來越受歡迎。云存儲提供了一種以安全可靠的方式存儲和遷移數據的方式,它允許個人和企業將他們的文件存儲在云服務提供商處,以便他們能夠在網絡設備上對個人文件進行訪問。
基于Hadoop[2-4]的HDFS是谷歌文件系統的開源實現項目,項目成立之后便逐漸成為各個企業或機構的云存儲系統解決方案,同時也是當前在云存儲領域最重要的研究對象。HDFS[5]在Hadoop集群中擔任著集群數據存儲重要角色,具有高穩定性與可擴展性等優點,并且能夠運行在廉價機器上,一定程度上降低了云存儲系統設計的成本。國內互聯網巨頭百度和阿里巴巴分別在2006年和2012年就對Hadoop進行關注并研發使用,解決了大數據云存儲的相關問題,為用戶提供了底層的模型計算以及存儲服務。
基于Hadoop的HDFS分布式文件系統是當前云存儲領域的研究熱點[6-8]。本課題研究并設計以Ha? doop為基礎的大數據云盤存儲系統具有重要意義。
2 云盤系統總體架構
本系統的總體架構分為三部分:客戶端、業務邏輯層及大數據存儲集群,具體如圖1所示。
用戶從客戶端中向后臺服務器發起用戶注冊與登錄請求,驗證通過后可以在個人云盤空間內管理自己的目錄與文件,可以對目錄或文件進行新增、刪除、重命名等操作。用戶向后臺服務器發起的所有請求都需經過安全性的處理,以防網絡攻擊者竊取用戶的個人隱私信息。
業務處理層則用于處理用戶發起的具體請求,若業務處理的過程中存在邏輯錯誤,則會向用戶彈出錯誤提示框,讓用戶規范自己的相關操作。對于用戶上傳的文件數據,后臺服務器負責將其轉化為流數據,并經過加密處理后存入大數據存儲集群中。用戶的文件存儲數據的相關記錄將存儲至MySQL數據庫內。
在大數據存儲集群中,由于HDFS集群具有副本機制,每個Hadoop節點都會分別存儲一個文件的副本,即一個文件有3個副本,這些副本可以根據特定的算法分配到三個Hadoop節點中,一定程度上避免了數據丟失的情況。故大數據存儲集群必須使用三個或三個以上的服務器,從而實現Hadoop全分布式的集群環境。
3 云盤系統實現
3.1 前端Web 頁面設計
云盤系統的前端界面采用基于Bootstrap的UI框架,實現用戶登錄注冊界面及云盤系統模板界面。Bootstrap是一個開源的、基于HTML5及CSS3和JS的響應式布局框架,因此它可以很好地兼容電腦端頁面與手機Web端頁面的布局。在本系統中,考慮同時設計電腦端頁面及手機端頁面,方便用戶在多種形式的設備上使用本系統。
用戶在前端對云盤進行的一系列操作將使用經過定制后的Ajax技術,用于異步請求后臺資源,并返回固定格式的用戶提示框。為了方便用戶能夠在線讀取特定格式的文件內容(如文本、圖片等),還引入了基于Bootstrap的文件讀取框架。對于數據分析模塊,為滿足數據可視化需求,引入了較為熱門的Echarts.js組件,用以生成數據圖表信息。
3.2 后臺Web 服務器設計
云盤系統采用SpringBoot作為后臺Web服務器基礎框架,并使用MVC模式將后臺服務器分為接口層(pCeor)nt三rol層ler架) 、構業,務完邏成輯整層個(Se系rv統ice的) 和數數據據傳鏈輸路和層交(M互ap。?MyBatis是一個持久層框架,用于建立數據庫的訪問鏈接,在此過程中開發者只需關注SQL語句的書寫邏輯,方便快捷,且能與SpringBoot完美集成。系統中還采用了Shiro用戶登錄安全驗證框架,它能夠輕松地與JavaSE和JavaEE進行集成,用于用戶登錄時的認證、授權、加密、會話管理等功能。
3.3 數據庫設計
數據庫概念設計如圖2所示,包含用戶、目錄和文件實體。每個用戶可以創建多個目錄及上傳多個文件,但是一個目錄或文件只能夠屬于一個用戶,因此用戶與目錄、文件之間都是屬于一對多關系。
為了統計用戶的相關操作信息以及操作云盤時所產生的流量數據,還需設計日志表實體與流量表實體,實體關系如圖3所示。日志實體主要的字段為所屬用戶ID和響應參數,用于統計用戶的相關操作參數,同時也包括用戶上傳與下載的流量使用參數,日志表為流量統計提供了相關的數據源。流量表實體則是用于記錄數據分析后的流量信息,主要字段有所屬用戶ID、當日上傳總流量以及當日下載總流量等。
3.4 基于MapFile 的小文件存儲
HDFS設計之初就是為了存儲大容量文件,并沒有對小文件的存儲進行相關的優化。在Hadoop2.0版本之后,HDFS中的每個文件存儲數據塊以128MB為單位,而用戶個人數據文件(以文檔、圖片等為主)的容量大小遠遠小于128MB的數據塊閾值,這些小文件額外占用了HDFS中更多的容量空間,造成存儲空間的浪費。當用戶數量增大時,HDFS便迎來了大量小文件存儲所造成的存儲效率問題。
為了解決HDFS不適合存儲小文件的問題,提出了使用基于MapFile的方案來優化小文件的存儲,提高存儲效率。MapFile基本上由兩大部分組成,分別是用于存儲數據的Data塊,以及存儲索引文件的In? dex塊。在使用MapFile方案存儲小文件時,文件數據將會被分為一個鍵值對,該鍵值對中的“鍵”指的是序列化后的文件名,“值”則是指文件本身的內容。多個文件數據的鍵值對數據會被合并為一個大文件存儲在Data塊中,與此同時建立每個文件數據的映射關系,在Index索引塊中記錄每個文件數據的鍵值對信息。這樣一來,在通過MapFile訪問小文件時,可以通過Index索引塊快速定位到相關的文件內存位置,提高小文件檢索效率。
4 系統測試
4.1 測試環境搭建
4.1.1 Hadoop 集群搭建
為了對系統進行測試,搭建了具有三臺服務的Ha? doop集群。服務器采用Linux系統,基本配置相同。為了快速搭建Hadoop集群,首先創建一個模板服務器,然后通過拷貝的方式復制另外兩個相同配置的服務器。
模板服務器名稱為Hadoop102,默認安裝有Java JDK8與Hadoop3.1.3兩個必要組件。另外兩臺服務器名稱分別為Hadoop103和Hadoop104。將Hadoop102 中的JDK與Hadoop組件復制給這兩個新服務器。為了實現跨服務器傳輸文件,采用shell語言的rsync命令,其具體作用是把服務器指定目錄的所有文件拷貝到另一個服務器。最后,把Hadoop的重要運行節點分配到三臺服務器中。在Hadoop全分布式環境中,為了保證集群正常運行,需要啟動五個基礎節點:Na? NmaemNeodNe(od管e(N理am節e點No)d、eD副at本aN節od點e()工、R作es節ou點rc)eM、Saencaognedr(ar資y?源管理節點)以及Nodemanager(監控資源節點)。其中,每個服務器都必須擁有一個DataNode 與一個Nodemanager節點,以保證每個服務器能夠正常運行相關程序。因此,對于另外三個重要節點NameNode、Sec? ondaryNameNode以及ResourceManager,需要分別分配到三個服務器中。服務器的節點分配情況如表1所示。
為了分配服務器節點,需要在各服務器的core- site.xml文件中配置NameNode節點的主機地址,并指定NameNode 啟動在Hadoop102 服務器的8020 端口上。NameNode節點關鍵屬性配置如下所示:
在每臺服務器的hdfs-site.xml 文件中配置Sec? oNnadmaeryNNoadme節eN點od啟e節動點在的H主ado機op地10址4服,并務指器定的S9e8c6o8nd端ar口y?上。關鍵屬性配置如下所示:
在每臺服務器的yarn-site.xml 文件中配置Re? saoguerrc節eM點an啟ag動er在節H點ad的oo主p1機03地服址務,器并上指。定關Re鍵so屬ur性ceM如a下n?所示:
經過以上合理配置的Hadoop集群即使有一臺服務器發生了故障,其他兩臺服務器仍然保留著重要的數據信息,最大程度上避免數據丟失。
4.1.2 后臺Web 服務器搭建
后臺服務器將以SpringBoot作為基礎框架,以Ma?ven作為項目管理工具。當一個基于Maven的項目創建完成后,需要使用Maven倉庫將相關依賴屬性添加到pom.xml 文件內。為了讓Maven 項目引入Spring? Boot框架,則需要向pom.xml文件中添加如下所示的基礎依賴。
引入成功后,使用Java開發工具啟動SpringBoot 項目,后臺服務器就已具備了基礎的Web服務器請求與響應的功能。為了使后臺服務器具備上文“技術架構設計”中所描述的相關技術,還需要添加Mybatis框架、shiro框架、Hadoop客戶端等依賴,具體的依賴屬性配置如下所示。
后臺服務器搭建還需要配置HTTPS請求協議,為此首先申請SSL證書。目前較為成熟的云計算服務器騰訊云或阿里云可進行免費申請。獲取證書后,將證書相關文件導入SpringBoot項目中,隨后通過向ap? plication.yml文件添加相關配置來完成協議的導入。具體導入代碼如下所示:
最后,為了解決HTTP協議兼容問題,設置HTTP 頁面重定向到HTTPS協議頁面中。
4.2 系統實現效果
設計了測試用例對系統登錄、新建目錄、上傳文件、刪除文件、下載文件、文件夾重命名等功能進行了測試,系統實現效果如圖4所示。
4.3 系統流量統計
為了測試系統的穩定性,對系統進行了為期8天的上線測試,測試用戶數量為2-10之間的隨機值,系統流量統計情況如圖5所示。用戶對云盤文件的操作記錄將會記錄到數據庫中的日志表內,當需要進行數據分析時,后臺服務器會對日志表的數據進行篩選整理并導出包含序號、用戶ID、日期、上傳流量和下載流量五列字段的數據集,隨后再將數據集上傳至HDFS集群中執行MapReduce數據合并分析。分析完畢后,輸出結果將自動寫入MySQL數據庫中的“流量統計表”內。
5 結束語
本文采用分布式文件系統Hadoop設計并實現了云盤存儲系統,可實現云端文件的管理和存儲功能,包括新建文件夾、刪除文件夾、上傳文件、下載文件、文件重命名等。本文詳細介紹了系統架構、前端頁面設計和后臺服務器搭建等設計與實現細節信息,為同類系統開發提供了參考。