大數據基礎知識集合(三)

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