京東大數據平臺部一直致力於優化基礎架構,爲用戶提供穩定、高可靠、高性能、高利用率的超大規模Hadoop集羣。本文與你們分享大規模分佈式存儲集羣的基石——本地存儲系統優化的點點滴滴。數據結構
在介紹主要內容前,先熟悉一下高可用Hadoop分佈式文件系統HDFS的核心架構,以下圖:架構
HDFS將大文件切分爲多個數據塊(Block)存儲到多個DataNode(如下簡稱DN)。NameNode(如下簡稱NN)主要用於儲存分佈式文件系統的元數據,元數據包括文件系統目錄樹、文件與數據塊的對應關係、數據塊與DN 的對應關係。NN除了存儲元數據外,還須要管理大量的DN,同時要對外提供元數據的服務接口。DN 是用於存儲數據塊的節點,HDFS上的全部文件的數據都存儲在DN上。HDFS上文件的訪問文件數據的流程,簡單來講,是Client先從NN獲取到文件數據所在DN位置,而後與DN通訊訪問實際的數據。爲了保證NN的高可用,衍生出Active NN和Standby NN,依託ZooKeeper(如下簡稱ZK)實現NN的狀態切換。ActiveNN對外提供服務,Standby NN在Active NN發生故障時切換爲Active NN繼續對外服務。Active NN響應Client的修改元數據請求,須要記錄元數據的操做日誌(如下稱爲EditLog),爲了提高EditLog的一致性和可靠性,HDFS設計了JournalNode(如下簡稱JN)集羣,每一次元數據的修改都要同步保存到JN中。Standby NN是Active NN的後備,他從JN持續拉取EditLog,並將其合併到本地的元數據結構中,隨時待命準備接收Active NN的工做。本地存儲系統優化是在分析HDFS的不一樣核心組件和組件之間的I/O模型的前提下,爲達到高吞吐或高ops的需求,而提出針對性的優化方案。共分爲四個部分:分佈式