【注1:結尾有大福利!】
【注2:想寫一個大資料小白系列,介紹大資料生態系統中的主要成員,理解其原理,明白其用途,萬一有用呢,對不對。】
大資料是什麼?拋開那些高大上但籠統的說法,其實大資料說的是兩件事:一、怎麼儲存大資料,二、怎麼計算大資料。
我們先從儲存開始說,如果清晨起床,你的女僕給你呈上一塊牛排,牛排太大,一口吃不了,怎麼辦?拿刀切小。
同樣的,如果一份資料太大,一臺機器存不了,怎麼辦?切小了,存到幾臺機器上。
想要儲存海量資料,無限地提高單臺機器的儲存能力顯然是不現實,就好比我們不能把一棟樓蓋得無限高一樣(通常這也不是經濟的做法),增加機器數量是相對可持續的方案。
使用多臺機器,需要有配套的分散式儲存系統把這些機器組織成一個整體,由於Hadoop幾乎是目前大資料領域的事實標準,那麼這裡介紹的分散式儲存系統就是HDFS(Hadoop Distributed Filesystem)。
先來介紹幾個重要概念。
- 分片(shard)
就好比把牛排切成小塊,對大的檔案進行切分,顯然是進行分散式儲存的前提,例如,HDFS中預設將資料切分成128MB的塊(block)。
- 副本(replica)
三臺機器中,如果有一臺出現故障,如何保證資料不丟失,那麼就是使用冗餘的方式,為每一個資料塊都產生多個副本。
下面圖示中,任何單獨一個節點掉線,都不會造成資料丟失,仍然可以湊齊A、B、C三個資料塊。
當然,如果兩個節點同時掉線就不行了。
不過,如果每個資料塊都有兩個副本,那麼可以承受同時損失兩個節點。代價是,你的儲存成本上升了。
- Master/Slave架構
只有工人而沒有包工頭的工地肯定不能正常運轉,所以,除了上面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資料贈送,謝謝大家。