大數據存儲結構
『壹』 大數據存儲的三種方式
大數據存儲的三種方式有:
1、不斷加密:任何類型的數據對於任何一個企業來說都是至關重要的,而且通常被認為是私有的,並且在他們自己掌控的范圍內是安全的。
然而,黑客攻擊經常被覆蓋在業務故障中,最新的網路攻擊活動在新聞報道不斷充斥。因此,許多公司感到很難感到安全,尤其是當一些行業巨頭經常成為攻擊目標時。隨著企業為保護資產全面開展工作,加密技術成為打擊網路威脅的可行途徑。
2、倉庫存儲:大數據似乎難以管理,就像一個永無休止統計數據的復雜的漩渦。因此,將信息精簡到單一的公司位置似乎是明智的,這是一個倉庫,其中所有的數據和伺服器都可以被充分地規劃指定。然而,有些報告指出了反對這種方法的論據,指出即使是最大的存儲中心,大數據的指數增長也不再能維持。
3、備份服務雲端:大數據管理和存儲正在迅速脫離物理機器的范疇,並迅速進入數字領域。除了所有技術的發展,大數據增長得更快,以這樣的速度,世界上所有的機器和倉庫都無法完全容納它。
由於雲存儲服務推動了數字化轉型,雲計算的應用越來越繁榮。數據在一個位置不再受到風險控制,並隨時隨地可以訪問,大型雲計算公司將會更多地訪問基本統計信息。數據可以在這些服務上進行備份,這意味著一次網路攻擊不會消除多年的業務增長和發展。
『貳』 大數據的存儲
⼤數據的存儲⽅式是結構化、半結構化和⾮結構化海量數據的存儲和管理,輕型資料庫⽆法滿⾜對其存儲以及復雜的數據挖掘和分析操作,通常使⽤分布式⽂件系統、No sql 資料庫、雲資料庫等。
結構化、半結構化和⾮結構化海量數據的存儲和管理,輕型資料庫⽆法滿⾜對其存儲以及復雜的數據挖掘和分析操作,通常使⽤分布式⽂件系統、No SQL 資料庫、雲資料庫等。
1 分布式系統:分布式系統包含多個⾃主的處理單元,通過計算機⽹絡互連來協作完成分配的任務,其分⽽治之的策略能夠更好的處理⼤規模數據分析問題。
主要包含以下兩類:
1)分布式⽂件系統:存儲管理需要多種技術的協同⼯作,其中⽂件系統為其提供最底層存儲能⼒的⽀持。分布式⽂件系統 HDFS 是⼀個⾼度容錯性系統,被設計成適⽤於批量處理,能夠提供⾼吞吐量的的數據訪問。
2)分布式鍵值系統:分布式鍵值系統⽤於存儲關系簡單的半結構化數據。典型的分布式鍵值系統有 Amazon Dynamo,以及獲得⼴泛應⽤和關注的對象存儲技術(Object Storage)也可以視為鍵值系統,其存儲和管理的是對象⽽不是數據塊。
2 Nosql 資料庫:關系資料庫已經⽆法滿⾜ Web2.0 的需求。主要表現為:⽆法滿⾜海量數據的管理需求、⽆法滿⾜數據⾼並發的需求、⾼可擴展性和⾼可⽤性的功能太低。No SQL 資料庫的優勢:可以⽀持超⼤規模數據存儲,靈活的數據模型可以很好地⽀持 Web2.0 應⽤,具有強⼤的橫向擴展能⼒等,典型的 No SQL 資料庫包含以下⼏種:
3 雲資料庫:雲資料庫是基於雲計算技術發展的⼀種共享基礎架構的⽅法,是部署和虛擬化在雲計算環境中的資料庫。
『叄』 大數據下的地質資料信息存儲架構設計
頡貴琴 胡曉琴
(甘肅省國土資源信息中心)
摘要 為推進我國地質資料信息服務集群化產業化工作,更大更好地發揮地質資料信息的價值,本文針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,基於現有系統的存儲架構,設計了一種大數據下的地質資料信息存儲架構,以便於我國地質資料信息服務集群化產業化工作能夠適應大數據時代的數據存儲。
關鍵詞 大數據 地質資料 存儲 NoSQL 雙資料庫
0 引言
新中國成立60多年來,我國形成了海量的地質資料信息,為國民經濟和社會發展提供了重要支撐。但在地質資料管理方面長期存在資料信息分散、綜合研究不夠、數字化信息化程度不高、服務渠道不暢、服務能力不強等問題,使地質資料信息的巨大潛在價值未能得到充分發揮。為進一步提高地質工作服務國民經濟和社會發展的能力,充分發揮地質資料信息的服務功能,擴大服務領域,國土資源部根據國內外地質工作的先進經驗,做出了全面推進地質資料信息服務集群化產業化工作的部署。
目前,全國各省地質資料館都在有條不紊地對本省成果、原始和實物地質資料進行清理,並對其中重要地質資料進行數字化和存儲工作。然而,由於我國地質資源豐富,經過幾十年的積累,已經形成了海量的地質資料,數據量早已經超過了幾百太位元組(TB)。在進行地質資料信息服務集群化工作中,隨著共享數據量的不斷增大,傳統的數據存儲方式和管理系統必然會展現出存儲和檢索方面的不足以及系統管理方面的缺陷。為了解決該問題,需要設計更加先進的數據存儲架構來實現海量地質資料的存儲。
而大數據(Big Data)作為近年來在雲計算領域中出現的一種新型數據,科技工作者在不斷的研究中,設計了適合大數據存儲管理的非關系型資料庫NoSQL進行大數據的存儲和管理。本文將針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,利用大數據存儲管理模式的思想,提出一種海量地質資料存儲架構,改進現有系統存儲架構,以便於我國全面推進地質資料信息服務集群化產業化工作。
1 工作現狀
1.1 國內外地質資料信息的存儲現狀
在美國,主要有兩大地質資料公共服務平台,分別是地球科學信息中心(ESIC)、地球資源觀測和科學中心(EROS),其目的是通過為社會和政府提供更加便利、快速的地質信息服務。20世紀90年代初,澳大利亞出台了國家地球科學填圖協議,採用先進的科學方法和技術進行數據存儲,從而形成了第二代澳大利亞陸地地質圖。
目前,我國地質資料信息服務集群化產業化工作剛剛起步,雖然國土資源部信息中心已經開發了地質資料信息集群化共享服務平台,並倡導各地方用戶使用該系統。但由於各個地方早期的工作背景不一致,因此各地方所使用的存儲系統也不盡相同,主要有Access、SQL Server、Oracle、MySQL等系統。本文以國土資源部信息中心開發的地質資料信息集群化共享服務平台的存儲系統MySQL為例說明。該系統是基於關系資料庫管理系統MySQL的一套分布式存儲檢索系統。該系統的部署使得我國地質資料信息服務集群化產業化工作取得了重大進展,同時也為我國建立標准統一的地質資料信息共享服務平台和互聯互通的網路服務體系奠定了堅實的基礎。然而,該系統的研發並沒有考慮到地質資料信息進一步集群化以及在未來地質資料信息進入大數據時代的信息共享和存儲管理問題,也沒有給出明確的解決方案。
1.2 大數據的存儲架構介紹
大數據是近年在雲計算領域中出現的一種新型數據,具有數據量大、數據結構不固定、類型多樣、查詢分析復雜等特點。傳統關系型資料庫管理系統在數據存儲規模、檢索效率等方面已不再適合大數據存儲。NoSQL(Not Only SQL)是與關系資料庫相對的一類資料庫的總稱。這些資料庫放棄了對關系資料庫的支持,轉而採用靈活的、分布式的數據存儲方式管理數據,從而可以滿足大數據存儲和處理的需求。NoSQL基於非關系型數據存儲的設計理念,以鍵值對進行存儲,採用的數據字的結構不固定,每一個元組可以有不一樣的欄位,且每個元組可以根據自己的需要增加一些自己的鍵值對,可以減少一些檢索時間和存儲空間。目前,應用廣泛的 NoSQL 資料庫有 Google BigTable、HBase、MongoDB、Neo4 j、Infinite Graph等。
2 大數據下的地質資料信息存儲架構設計
根據國土資源部做出的全面推進地質資料信息服務集群化產業化工作的部署,國土資源部倡導全國地質資料館使用國土資源部信息中心開發的地質資料信息集群化共享服務平台,實現地質資料信息的存儲和共享。該系統採用了資料庫管理系統MySQL作為數據存儲系統。
為了與現有系統和現有的工作進行對接,並為將來地質資料進入大數據時代後的存儲工作做准備,本文設計了一種能用於海量地質資料信息存儲並且兼容MySQL的分布式的數據存儲架構(圖1)。
整個系統可以根據不同的用戶等級分為不同的用戶管理層,由於圖幅限制,在圖1 中僅僅展示了3級:國家級管理層(即共享服務平台用戶層)、省級管理層以及市級管理層(可根據實際需要延伸至縣級)。
每級管理層的每個用戶可以單獨管理一個伺服器。如國土資源部信息中心可以單獨管理一個伺服器;甘肅省國土資源信息中心可以單獨管理一個伺服器,陝西省國土資源信息中心可以單獨管理一個伺服器;甘肅的若干個市級國土資源局可以根據需要分別管理各自的伺服器。
在伺服器上分別安裝兩套資料庫管理系統,一套是原有的MySQL資料庫管理系統,另一套是為大數據存儲而配備的NoSQL型資料庫管理系統。在伺服器上還專門開發一個資料庫管理器中間件,用於進行用戶層和資料庫的通信以及兩套資料庫之間的通信。
由於各個管理層都各自維護自己的資料庫和數據。當用戶需要進行數據存儲時,他所影響的資料庫僅僅是本地資料庫,存儲效率較高;當用戶需要從多個資料庫讀取數據時,頂層的共享服務平台會根據用戶需求進行任務分解,將任務分發給下層的管理層進行資料庫讀取,由於各個資料庫並行讀取,從而提高了資料庫讀取效率。
圖1 大數據下的地質資料信息存儲架構框圖
2.1 用戶管理層
用戶管理層根據許可權范圍,分為多層(本文以3層為例)。
位於頂層的國家級管理層(共享服務平台用戶層)負責用戶訪問許可權的分配、與其直接關聯的資料庫的訪問、下級管理層任務的分配等工作。
用戶訪問許可權的分配是指為訪問本共享服務平台的個人用戶和單位用戶分配數據的使用許可權、安全性的設計等。
與其直接關聯的資料庫訪問是指直接存儲在其本地資料庫上的數據的訪問。在該資料庫中不僅要存儲所需要的地質資料,還要存儲注冊用戶信息等數據。
下級管理層任務分配是指如果用戶需要訪問多個下層資料庫,用戶只需要輸入查詢這幾個下層資料庫的命令,而如何查找下層資料庫則由該功能來完成。例如某用戶要查找甘肅、陝西、上海、北京的鐵礦分布圖,則用戶只需要輸入這幾個地方及鐵礦等查詢條件,系統將自動把各個省的資料庫查詢任務分派到下級管理層。
同理,位於下層的省級管理層和市級管理層除了沒有用戶訪問許可權功能外,其餘功能與國家級管理層是相同的。各層之間的資料庫通過互聯網相互連接成分布式的資料庫系統。
2.2 MySQL和NoSQL的融合
MySQL是關系型資料庫,它支持SQL查詢語言,而NoSQL是非關系型資料庫,它不支持SQL查詢語言。用戶要想透明地訪問這兩套資料庫,必須要設計資料庫管理器中間件,作為用戶訪問資料庫的統一入口和兩套資料庫管理系統的通信平台。本文所設計的資料庫管理器簡單模型如圖2所示。
圖2 資料庫管理器模型
伺服器管理器通過用戶程序介面與應用程序進行通訊,通過MySQL資料庫介面與MySQL伺服器通訊,通過NoSQL資料庫介面與NoSQL資料庫介面通訊。當應用程序介面接收到一條資料庫訪問命令之後,交由資料庫訪問命令解析器進行命令解析,從而形成MySQL訪問命令或者NoSQL訪問命令,通過相應的資料庫介面訪問資料庫;資料庫返回訪問結果後經過匯總,由應用程序介面返回給應用程序。
兩套資料庫可以通過雙資料庫通信協議進行相互的通信和互訪。此通信協議的建立便於地質工作人員將已經存入MySQL資料庫的不適合結構化存儲的數據轉存到NoSQL資料庫中,從而便於系統的升級和優化。
2.3 系統的存儲和檢索模式
在本存儲框架設計中,系統採用分布式網路存儲模式,即採用可擴展的存儲結構,利用分散在全國各地的多台獨立的伺服器進行數據存儲。這種方式不僅分擔了伺服器的存儲壓力,提高了系統的可靠性和可用性,還易於進行系統擴展。另外,由於地質資料信息存儲的特殊性,各地方用戶的數據存儲工作基本都是在本地伺服器進行,很少通過網路進行遠程存儲,所以數據存儲效率較高。
在一台資料庫伺服器上安裝有MySQL和NoSQL型兩套資料庫管理系統,分別用於存儲地質資料信息中的結構化數據和非結構化數據。其中,NoSQL型資料庫作為主資料庫,用於存儲一部分結構化數據和全部的非結構化數據;而MySQL資料庫作為輔助資料庫,用於存儲一部分結構化的數據,以及舊系統中已經存儲的數據。使用兩套資料庫不僅可以存儲結構化數據而且還可以適用於大數據時代地質資料信息的存儲,因此系統具有很好的適應性和靈活性。
2.4 安全性設計
地質資料信息是國家的機密,地質工作人員必須要保證它的安全。地質資料信息進入數字化時代之後,地質資料常常在計算機以及網路上進行傳輸,地質資料信息的安全傳輸和保存更是地質工作人員必須關注和解決的問題。在本存儲架構的設計中設計的安全問題主要有資料庫存儲安全、數據傳輸安全、數據訪問安全等問題。
資料庫設計時採用多邊安全模型和多級安全模型阻止資料庫中信息和數據的泄露來提高資料庫的安全性能,以保障地質信息在資料庫中的存儲安全;當用戶登錄系統訪問資料庫時,必須進行用戶甄別和實名認證,這主要是對用戶的身份進行有效的識別,防止非法用戶訪問資料庫;在對地質資料進行網路傳輸時,應該首先將數據進行加密,然後再進行網路傳輸,以防止地質信息在傳輸過程中被竊取。
3 結語
提高地質資料數字化信息化水平,是國外地質工作強國的普遍做法。為推進我國地質資料信息服務集群化產業化工作,本文針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,利用大數據存儲管理模式的思想,基於現有系統的存儲架構,設計了一種大數據下的地質資料信息存儲架構,以便於我國地質資料信息服務集群化產業化工作能夠適應大數據時代的數據存儲。該存儲架構的設計只涉及了簡單模型的構建,具體詳細復雜的功能設計和軟體實現還需要在進一步的研究工作中完成。
參考文獻
[1]吳金朋.一種大數據存儲模型的研究與應用[D].北京:北京郵電大學計算機學院,2012.
[2]吳廣君,王樹鵬,陳明,等.海量結構化數據存儲檢索系統[J].計算機研究與發展,2012,49(Suppl):1~5.
[3]黃
『肆』 傳統大數據存儲的架構有哪些各有什麼特點
數據源:所有大數據架構都從源代碼開始。這可以包含來源於資料庫的數據、來自實時源(如物聯網設備)的數據,及其從應用程序(如Windows日誌)生成的靜態文件。
實時消息接收:假如有實時源,則需要在架構中構建一種機制來攝入數據。
數據存儲:公司需要存儲將通過大數據架構處理的數據。一般而言,數據將存儲在數據湖中,這是一個可以輕松擴展的大型非結構化資料庫。
批處理和實時處理的組合:公司需要同時處理實時數據和靜態數據,因而應在大數據架構中內置批量和實時處理的組合。這是由於能夠應用批處理有效地處理大批量數據,而實時數據需要立刻處理才能夠帶來價值。批處理涉及到長期運轉的作業,用於篩選、聚合和准備數據開展分析。
分析數據存儲:准備好要分析的數據後,需要將它們放到一個位置,便於對整個數據集開展分析。分析數據儲存的必要性在於,公司的全部數據都聚集在一個位置,因而其分析將是全面的,而且針對分析而非事務進行了優化。
這可能採用基於雲計算的數據倉庫或關系資料庫的形式,具體取決於公司的需求。
分析或報告工具:在攝入和處理各類數據源之後,公司需要包含一個分析數據的工具。一般而言,公司將使用BI(商業智能)工具來完成這項工作,而且或者需要數據科學家來探索數據。
「大數據」 通常指的是那些數量巨大、難於收集、處理、分析的數據集,亦指那些在傳統基礎設施中長期保存的數據。大數據存儲是將這些數據集持久化到計算機中。
『伍』 第三章 大數據存儲
一,HDFS的基本特徵與構架
1.基本特徵
(1)大規模數據分布存儲能力:以分布式存儲能力和良好的可擴展性。(基於大量分布節點上的本地文件系統,構建一個邏輯上具有巨大容量的分布式文件系統,並且整個文件系統的容量可隨集群中節點的增加而線性擴展)
(2)高並發訪問能力:提供很高的數據訪問寬頻(高數據吞吐率),並且可以把帶寬的大小等比例擴展到集群中的全部節點上
(3)強大的容錯能力:(設計理念中硬體故障被視作常態)保證在經常有節點發生硬體故障的情況下正確檢測硬體故障,並且能自動從故障中快速恢復,確保數據不丟失(採用多副本數據塊形式存儲)
(4)順序式文件訪問:(大數據批處理都是大量簡單數據記錄的順序處理)對順序讀進行了優化,支持大量數據的快速順序讀出,代價是對於隨機的訪問負載較高
(5)簡單的一致性模型(一次寫多次讀):支持大量數據的一次寫入,多次讀取;不支持已寫入數據的更新操作,但允許在文件尾部添加新的數據
(6)數據塊存儲模式:默認的塊大小是64MB。好處:減少元數據的數量,允許這些數據塊通過隨機方式選擇節點,分布存儲在不同地方
2.基本框架與工作過程
(1)基本組成結構與文件訪問過程
[1]HDFS;一個建立在一組分布式伺服器節點的本地文件系統之上的分布式文件系統(採用經典主-從結構)
[2]主控節點NameNode:
1)是一個主伺服器,用來管理整個文件系統的命名空間和元數據,以及處理來自外界的文件訪問請求
2)保存了文件系統的三中元數據
命名空間:整個分布式文件系統的目錄結構
數據塊與文件名的映射表
每個數據塊副本的位置信息,每一個數據塊默認有3個副本
[3]從節點DataNode:
1)用來實際存儲和管理文件的數據塊
2)為了防止數據丟失,每個數據塊默認有3個副本,且3個副本會分別復制在不同節點上,以避免一個節點失效造成一個數據塊的徹底丟失
[4]程序訪問文件時,實際文件數據流並不會通過NameNode傳送,而是從NameNode獲得所需訪問數據塊的存儲位置信息後,直接去訪問對應的DataNode獲取數據
[5]設計好處:
1)可以允許一個文件的數據能同時在不同DataNode上並發訪問,提高數據訪問的速度
2)減少NameNode的負擔,避免使NameNode成為數據訪問瓶頸
[6]基本訪問過程:
1)首先,用戶的應用程序通過HDFS的客戶端程序將文件名發送至NameNode
2)NameNode接收到文件名之後,在HDFS目錄中檢索文件名對應的數據塊,再根據數據塊信息找到保存數據塊的DataNode地址,講這些地址回送到客戶端
3)客戶端接收到這些DataNode地址之後,與這些DataNode並行的進行數據傳輸操作,同時將操作結果的相關日誌提交到NameNode
2.數據塊
(1)為了提高硬碟的效率,文件系統中最小的數據讀寫單元是數據塊
(2)HDFS數據塊的默認大小是64MB,實際部署中,可能會更多
(3)將數據塊設置大的原因是減少定址開銷的時間
(4)當應用發起數據傳輸請求:
[1]NameNode首先檢索文件對應的數據塊信息,找到數據塊對應的DataNode
[2]DataNode根據數據塊信息在自身的存儲中尋找相應的文件,進而與應用程序之間交換數據
[3]因為檢索過程是但進行,所以要增加數據塊大小,這樣就可以減少定址的頻度和時間開銷
3.命名空間
(1)文件命名遵循「目錄/子目錄/文件」格式
(2)通過命令行或者是API可以創建目錄,並且將文件保存在目錄中。可以對文件進行創建,刪除,重命名操作
(3)命令空間由NameNode管理。所有對命名空間的改動都會被記錄
(4)允許用戶配置文件在HDFS上保存的副本數量,保存的副本數稱作「副本因子」
4.通信協議
(1)採用TCP協議作為底層的支撐協議
(2)應用協議
[1]應用可以向NameNode主動發起TCP連接
[2]應用和NameNode交互協議稱為Client協議
[3]NameNode和DataNode交互的協議稱為DataNode協議
(3)用戶和DataNode的交互是通過發起遠程調用(RPC),並由NameNode響應來完成的。另外,NameNode不會主動發起遠程過程調用請求
5.客戶端:是用戶和HDFS通信最常見的渠道,部署的HDFS都會提供客戶端
二,HDFS可靠性設計
1.HDFS數據塊多副本存儲設計
(1)採用了在系統中保存多個副本的方式保存數據,且同一個數據塊的多個副本會存放在不同節點上
(2)優點:
[1]採用多副本,可以讓客戶從不同數據塊中讀取數據,加快傳輸速度
[2]HDFS的DataNode之間通過網路傳輸數據,如果採用多個副本可以判斷數據傳輸是否出錯
[3]多副本可以保證某個DataNode失效的情況下,不會丟失數據
2.可靠性的設計實現
(1)安全模式:
[1]HDFS啟動時,NameNode進入安全模式
[2]處於安全模式的NameNode不能做任何文本操作,甚至內部的副本創建不允許
[3]NameNode需要和各個DataNode通信,獲得其中保存的數據塊信息,並對數據塊信息進行檢查
[4]只有通過了NameNode檢查,一個數據塊被認為安全。當被認為安全的數據塊所佔比例達到某個閾值,NameNode退出
(2)SecondaryNmaeNode
[1]使用它來備份NameNode元數據,以便在其失效時能從中恢復出其上的元數據
[2]它充當NameNode的一個副本,本身並不處理任何請求。
[3]作用:周期性保存NameNode的元數據
(3)心跳包和副本重新創建
[1]心跳包:位於HDFS核心的NameNode,通過周期性的活動檢查DataNode的活動
[2]檢測到DataNode失效,保存在其上的數據不可用。則其上保存的副本需要重新創建這個副本,放到另外可用的地方
(4)數據一致性
[1]採用了數據校驗和機制
[2]創建文件時,HDFS會為這個文件生成一個校驗和,校驗和文件和文件本身保存在同一空間上,
[3]傳輸數據時會將數據與校驗和一起傳輸,應用收到數據後可以進行校驗
(5)租約
[1]防止同一個文件被多個人寫入數據
[2]NameNode保證同一個文件只會發放一個允許的租約,可以有效防止出現多人寫入的情況
(6)回滾
三,HDFS文件存儲組織與讀寫
1.文件數據的存儲組織
(1)NameNode目錄結構
[1]藉助本地文件系統來保存數據,保存文件夾位置由配置選項({dfs.name.dir}/{/tmp/dfs/name})決定
[2]在NameNode的${dfs.name.dir}之下有3個文件夾和1個文件:
1)current目錄:
文件VERSION:保存了當前運行的HDFS版本信息
FsImages:是整個系統的空間鏡像文件
Edit:EditLog編輯文件
Fstime:上一次檢查點時間
2)previous.checkpoint目錄:和上一個一致,但是保存的是上一次檢查點的內容
3)image目錄:舊版本的FsImage存儲位置
4)in_use.look:NameNode鎖,只在NameNode有效(啟動並且能和DataNode正常交互)時存在。
(2)DataNode目錄結構
[1]藉助本地文件系統來保存數據。保存文件夾位置由配置選項{dfs.data.dir}決定
[2]在其之下有4個子目錄和2個文件
1)current目錄:已經成功寫入的數據塊,以及一些系統需要的文件
a)文件VERSION:保存了當前運行的HDFS版本信息
b)subdirXX:當同一目錄下文件超過一定限制,新建一個目錄,保存多出來的數據塊和元數據
2)tmp目錄和blockBeingWritten目錄:正在寫入的數據塊,是HDFS系統內部副本創建時引發的寫入操作對應的數據塊
3)detach目錄:用於DataNode升級
4)Storage目錄:防止版本不同帶來風險
5)in_user.lock文件:DataNode鎖。只有在DataNode有效時存在。
(3)CheckPointNode目錄結構:和上一個基本一致
2.數據的讀寫過程
(1)數據讀取過程
[1]首先,客戶端調用FileSystem實例的open方法,獲得這個文件對應的輸入流,在HDFS中就是DFSInputStream
[2]構造第一步的輸入流時,通過RPC遠程調用NameNode可以獲得NameNode中此文件對應的數據塊保存位置,包括這個文件副本的保存位置(註:在輸入流中會按照網路拓撲結構,根據與客戶端距離對DataNode進行簡單排序)
[3]-[4]獲得此輸入流後,客戶端調用READ方法讀取數據。輸入流選擇最近的DFSInputStream會根據前面的排序結果,選擇最近的DataNode建立連接並讀取數據。
[5]如果已達到數據塊末端,關閉這個DataNode的連接,然後重新查找下一個數據塊
[6]客戶端調用close,關閉輸入流DFSInputStream
(2)數據輸入過程
[1]-[2]:客戶端調用FileSystem實例的create方法,創建文件。檢查後,在NameNode添加文件信息,創建結束之後,HDFS會返回一個輸出流DFSDataOutputStream給客戶端
[3]調用輸出流的write方法向HDFS中對應的文件寫入數據。
數據首先會被分包,這些分包會寫入一個輸出流的內部隊列Data隊列中,接收完整數據分包,輸出流回想NameNode申請保存文件和副本數據塊的若干個DataNode
[4]DFSDataOutputStream會(根據網路拓撲結構排序)將數據傳輸給距離上最短的DataNode,這個節點接收到數據包後傳給下一個。數據在各節點之間通過管道流通,減少傳輸開銷
[5]數據節點位於不同機器上,數據需要通過網路發送。(為保證數據節點數據正確,接收到數據的節點要向發送者發送確認包)
[6]執行3-5知道數據全部寫完,DFSDataInputStream繼續等待知道所有數據寫入完畢並確認,調用complete方法通知NameNode文件寫入完成
[7]NameNode接收到complete消息之後,等待相應數量的副本寫入完畢後,告知客戶端
傳輸過程,當某個DataNode失效,HDFS執行:
1)關閉數據傳輸的管道
2)將等待ACK隊列的數據放到Data隊列頭部
3)更新正常DataNode中所有數據塊版本。當失效的DataNode重啟,之前的數據塊會因為版本不對被清除
4)在傳輸管道中刪除失效的DataNode,重新建立管道並發送數據包
4.HDFS文件系統操作命令
(1)HDFS啟動與關閉
[1]啟動過程:
1)進入到NameNode對應節點的Hadoop安裝目錄
2)執行啟動腳本:bin/start-dfs.sh
[2]關閉過程:bin/stop-dfs.sh
(2)文件操作命令格式與注意事項
[1]基本命令格式:
1)bin/hadoop dfs-cmd <args> args-> scheme://authority/path
2)args參數基本格式前面是scheme,authority是機器地址和對應埠
a)本地文件,scheme是file
b)HDFS上文件,scheme是hdfs
(3)文件操作基本格式
[1]hadoop dfs-cat URL [URL ...]
[2]作用:將參數所指示文件內容輸出到stdout