120 likes | 294 Views
服務品質衡量. 林俊宏 參與研究生 :吳世麟、陳致毅. HDFS 的 QoS 參數. dfs.replication 每個資料區塊要複製的數量 dfs.replication.max 資料區塊複製數量的最大值 dfs.replication.min 資料區塊複製數量的最小值 dfs.block.size 預設資料區塊的大小 dfs.blockreport.intervalMsec DataNode 每隔多少毫秒 (milliseconds) 回報其擁有哪些資料區塊給 NameNode(block report).
E N D
服務品質衡量 林俊宏 參與研究生:吳世麟、陳致毅
HDFS的QoS參數 • dfs.replication • 每個資料區塊要複製的數量 • dfs.replication.max • 資料區塊複製數量的最大值 • dfs.replication.min • 資料區塊複製數量的最小值 • dfs.block.size • 預設資料區塊的大小 • dfs.blockreport.intervalMsec • DataNode每隔多少毫秒(milliseconds)回報其擁有哪些資料區塊給NameNode(block report)
dfs.blockreport.initialDelay • NameNode第一次收到來自DataNode的block report前的延遲秒數 • dfs.heartbeat.interval • NameNode每隔幾秒收到來自DataNode象徵其是否正常運作的心跳(heartbeat) • dfs.access.time.precision • 存取HDFS大約需要的毫秒數 • dfs.safemode.threshold.pct • 在HDFS檢查多少百分比的資料區塊的複製數量是否都有大於或等於dfs.replication.min • dfs.safemode.extension • 在HDFS檢查特定百分比的資料區塊的複製數量是否都有大於或等於dfs.replication.min後,再經過多少毫秒才能脫離只能讀取而不能寫入檔案的safemode
In Java API • package org.apache.hadoop.fs • class FileSystem • public FSDataOutputStreamcreate(Path f, boolean overwrite, int bufferSize, short replication, long blockSize) throws IOException • 在指定的路徑f下開啟或創立一個資料區塊複製數為replication,每個資料區塊大小為blockSizeMB的檔案。資料區塊大小只能在新檔案創立時指定,之後無法變更;資料區塊複製數量在檔案創建後,可透過另外的api方法動態調整。 • overwrite為true,當檔案存在時,則以目前的設定覆蓋並建立新檔案;其值若為false,則當檔案存在時,此方法會投直錯誤。 • bufferSize為buffer大小
public boolean setReplication(Path src, short replication) throws IOException • 將一個已經存在的檔案src之資料區塊複製數量改成replication。
HDFS使用者管控 • 利用RADIUS管理帳號 • RADIUS server具備AAA協議(兼顧Authentication、Authorization及Accounting),使用者在使用HDFS前必須完成RADIUS認證,才能與namenode進行互動,做資料的存取。 • 利用RADIUS設定使用者之權限與QoS參數。 • 可限制使用者之儲存資料空間。 • 每當使用者上傳一個檔案時,系統監視器檢驗該檔案和過去所上傳的檔案大小之總和是否有超過規定的空間容量,若超過則告知使用者該檔無法上傳。
File Transfer Finish Time Decreasing • Multiple datanodes involved for data retrieving (characteristic of Hadoop DFS: data fragmentation) • Bandwidth consideration for datanode selections • System modeling and performance analysis in progress.
應用:網路監控 • 高資料量 • HDFS需要提供高傳輸品質之服務 • 設計MapReduce做分析 • 以HTTP session還原為例 • 還原封包遇到的困難地方 • Transfer-Encoding: chunked (這種 response 可以動態增加回傳的長度,在這種情況底下不會出現 Content-Length) • Content-Encoding: gzip (這種 response 會將封包壓縮後再傳送,所以必須自行解壓縮) • 根據 clientIP:clientPort,serverIP:serverPort 為 key 來將封包作分配 • 會遇到 client 使用了一個 port 傳輸1到多個檔案
使用 Hadoop 還原 HTTP 封包 • 假設擷取的封包是根據 port 80 (不指定 port 80 也可以),並將擷取的封包儲存在 HDFS • Mapper 的部份將每個封包以 clientIP:clientPort,serverIP,serverPort 為 key;而封包本身為 value 的形式產生輸出給 reducer
使用 Hadoop 還原 HTTP 封包 (Cont.) • Reducer 的部份,相同的 key 會擁有多個 value 值 (屬於同一個 key 的輸出會以類似陣列的形式給 reducer) • 將 value 陣列裡面的值以時間做排序 (雖然在 mapper 以一般順序加入到輸出,但是在reducer 的順序不一定跟 mapper 加入的順序相同,所以要先做排序) • 接著以 HTTP conversation 的流程 • 遇到 request 包封就分析 request 要求的檔案為何 • 遇到 response 包封就分析 response 回傳的檔案大小、壓縮方式等等的方式是什麼來做還原 • 遇到不是 HTTP 格式的封包,但是 port 是80的封包,可能是 client 送 ack 給 server,或者 server 送 data chunk 給 client • 將 response 和 data chunk 的包封中 TCP data 部分加入到 hash 資料結構裡面,並以 sequence number 為 hash 的 key (這個地方要考慮到 duplicate packet 和 out-of-order packet 的問題) • 當所有包封街分析完畢以後,將 hash 裡面的資料還原成檔案
使用 Hadoop 還原 HTTP 封包 (Cont.) • 另一個問題是在一個 conversation 裡面,client 通常會使用一個 port 對 server 要求一個檔案,但是也可能遇到 client 使用一個 port 要求多個檔案,所以在還原封包時,一個 key 所伴隨的 value 陣列裡面,可能要還原一個以上的檔案 • 解決方式是當分析到的封包屬於 request,就將之前存入 hash 資料結構裡面的資料當成一個已經分析完畢的檔案來還原,然後重新一個新的檔案還原 • 最後 reducer 將還原的檔案儲存到 hadoop 的 HDFS 裡面