1. 程式人生 > >大資料基礎知識集合(三)

大資料基礎知識集合(三)

一、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命令

常用命令 cat 檔名 輸出檔案內容到基本輸出(螢幕 or 加>fileName 到另一個檔案) cb 格式化原始碼 chmod //change mode,改變檔案的許可權 cp copy date 當前的時間和日期 echo $abc 在變數賦值之後,只需在變數前面加一個$去引用. lint 語法檢查程式 ls dir man help more type du 檢視磁碟空間狀況 ps 檢視當前程序狀況 who 你的使用者名稱和終端型別 定義變數 name=abc? (bash/pdksh) || set name = abc (tcsh) mkdir 建立目錄 rmdir 刪除目錄 cd 進入目錄 rm 刪除檔案 more 顯示檔案 echo 顯示指定文字 mv 改檔名 /移動檔案 pwd 顯示目錄路徑命令

四、讀寫策略

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 訊息之後,等待相應數量的副本寫入完畢後,告知客戶端。