【注1:結尾有大福利!】程序員
【注2:想寫一個大數據小白系列,介紹大數據生態系統中的主要成員,理解其原理,明白其用途,萬一有用呢,對不對。】架構
大數據是什麼?拋開那些高大上但籠統的說法,其實大數聽說的是兩件事:1、怎麼存儲大數據,2、怎麼計算大數據。分佈式
咱們先從存儲開始說,若是清晨起牀,你的女僕給你呈上一塊牛排,牛排太大,一口吃不了,怎麼辦?拿刀切小。oop
一樣的,若是一份數據太大,一臺機器存不了,怎麼辦?切小了,存到幾臺機器上。大數據
想要保存海量數據,無限地提升單臺機器的存儲能力顯然是不現實,就比如咱們不能把一棟樓蓋得無限高同樣(一般這也不是經濟的作法),增長機器數量是相對可持續的方案。spa
使用多臺機器,須要有配套的分佈式存儲系統把這些機器組織成一個總體,因爲Hadoop幾乎是目前大數據領域的事實標準,那麼這裏介紹的分佈式存儲系統就是HDFS(Hadoop Distributed Filesystem)。3d
先來介紹幾個重要概念。blog
就比如把牛排切成小塊,對大的文件進行切分,顯然是進行分佈式存儲的前提,例如,HDFS中默認將數據切分紅128MB的塊(block)。數據分析
三臺機器中,若是有一臺出現故障,如何保證數據不丟失,那麼就是使用冗餘的方式,爲每個數據塊都產生多個副本。io
下面圖示中,任何單獨一個節點掉線,都不會形成數據丟失,仍然能夠湊齊A、B、C三個數據塊。
固然,若是兩個節點同時掉線就不行了。
不過,若是每一個數據塊都有兩個副本,那麼能夠承受同時損失兩個節點。代價是,你的存儲成本上升了。
只有工人而沒有包工頭的工地確定不能正常運轉,因此,除了上面3臺負責存儲的機器,還須要至少一臺機器來領導它們,給它們分配工做,不然誰也沒辦法中的A、B、C具體應該存在哪一個機器上。
HDFS中採用Master/Slave架構,其中的NameNode就是Master,負責管理工做,而DataNode就是Slave,負責存儲具體的數據,NameNode上管理着元數據,簡單的講就是記錄哪一個數據塊存儲在哪臺機器上。同時,DataNode也會定時向NameNode彙報本身的工做狀態,以便後者監控節點狀態、是否故障。
說完上面幾個我以爲須要瞭解的基礎概念,咱們再把HDFS的讀、寫流程描述一下。
讀取數據的過程。在這個過程當中,NameNode負責提供數據的存儲位置,真正的數據讀取操做發生在用戶和DataNode之間。因爲數據有副本,一份數據在多個節點上存在,具體NameNode返回哪一個節點,遵循必定的原則(好比,就近原則)。
寫入數據的過程。和讀取流程相似,NameNode負責提供數據的存儲位置,真正的寫入操做發生在用戶和DataNode之間,而副本的製造,是在DataNode之間發生的,例如用戶先把數據寫入節點1,節點1再把數據複製到節點2等。
這篇文章就先到這裏,下一篇準備接受HDFS中的單點問題、HA、Federation等概念。
最後,福利來了,關注公衆號「程序員雜書館」,將免費送出大數據經典書籍《Spark快速大數據分析》,沒錯,就是下面這本,紙質書哦,不是什麼亂七八糟的其餘書哦!還猶豫什麼,抓緊掃碼關注吧。「程序員雜書館」之後將每週爲你們帶來經典書籍資料、原創乾貨分享,謝謝你們。
須要書的同窗請直接在公衆號留言哈,若是不想要紙質書的也能夠說明,我會選擇一些PDF數據贈送,謝謝你們。