大資料基礎知識集合(三)
一、Hadoop
1、MapReduce——Hadoop的核心
MapReduce是一個可以對大量資料進行分散式處理的軟體框架,MapReduce的重要創新是當處理一個大資料集查詢時會將其任務分解並在執行的多個節點中處理。
當資料量很大時就無法在一臺伺服器上解決問題,此時分散式計算優勢就體現出來。將這種技術與Linux伺服器結合可獲得性價比極高的替代大規模計算陣列的方法。
2、HDFS
對於分散式計算,每個伺服器必須具備對資料的訪問能力,這就是HDFS(Hadoop Distributed File System)所起到的作用。
HDFS與MapReduce的結合是強大的
(1)在處理大資料的過程中,當Hadoop叢集中的伺服器出現錯誤時,整個計算過程並不會終止。
(2)HFDS可保障在整個叢集中發生故障錯誤時的資料冗餘。當計算完成時將結果寫入HFDS的一個節點之中。
(3)HDFS對儲存的資料格式並無苛刻的要求,資料可以是非結構化或其它類別。相反關係資料庫在儲存資料之前需要將資料結構化並定義架構。
(4)開發人員編寫程式碼責任是使資料有意義。Hadoop MapReduce級的程式設計利用Java APIs,並可手動載入資料檔案到HDFS之中。
3、HDFS架構
(1)Namenode
Namenode是整個檔案系統的管理節點。它維護著整個檔案系統的檔案目錄樹,檔案/目錄的元資訊和每個檔案對應的資料塊列表, 接收使用者的操作請求。不可缺少。
(2)Datanode
提供真實檔案資料的儲存服務。 缺少一個可以由其他單位填補。
(3)block
檔案塊: 最基本的儲存單位。
二、元資料
1、什麼是元資料
任何檔案系統中的資料分為資料和元資料。資料是指普通檔案中的實際資料,而元資料指用來描述一個檔案的特徵的系統資料,諸如訪問許可權、檔案擁有者以及檔案資料塊的分佈資訊(inode...)等等。在叢集檔案系統中,分佈資訊包括檔案在磁碟上的位置以及磁碟在叢集中的位置。使用者需要操作一個檔案必須首先得到它的元資料,才能定位到檔案的位置並且得到檔案的內容或相關屬性。2、元資料管理方式
三、shell命令
四、讀寫策略
1、客戶端呼叫Fi leSystem 例項的create 方法,建立檔案。NameNode 通過一些檢查,比如檔案是否存在,客戶端是否擁有建立許可權等;通過檢查之後,在NameNode 新增檔案資訊。注意,因為此時檔案沒有資料,所以NameNode 上也沒有檔案資料塊的資訊。
2、建立結束之後, HDFS 會返回一個輸出流DFSDataOutputStream 給客戶端。
3、客戶端呼叫輸出流DFSDataOutputStream 的write 方法向HDFS 中對應的檔案寫入資料。
4、資料首先會被分包,這些分包會寫人一個輸出流的內部佇列Data 佇列中,接收完資料分包,輸出流DFSDataOutputStream 會向NameNode 申請儲存檔案和副本資料塊的若干個DataNode , 這若干個DataNode 會形成一個數據傳輸管道。DFSDataOutputStream 將資料傳輸給距離上最短的DataNode ,這個DataNode 接收到資料包之後會傳給下一個DataNode 。資料在各DataNode之間通過管道流動,而不是全部由輸出流分發,以減少傳輸開銷。
5、因為各DataNode 位於不同機器上,資料需要通過網路傳送,所以,為了保證所有DataNode 的資料都是準確的,接收到資料的DataNode 要向傳送者傳送確認包(ACK Packet ) 。對於某個資料塊,只有當DFSDataOutputStream 收到了所有DataNode 的正確ACK. 才能確認傳輸結束。DFSDataOutputStream 內部專門維護了一個等待ACK 佇列,這一佇列儲存已經進入管道傳輸資料、但是並未被完全確認的資料包。
6、不斷執行第3 - 5 步直到資料全部寫完,客戶端呼叫close 關閉檔案。
7、DFSDataInputStream 繼續等待直到所有資料寫人完畢並被確認,呼叫complete 方法通知NameNode 檔案寫入完成。NameNode 接收到complete 訊息之後,等待相應數量的副本寫入完畢後,告知客戶端。