Hadoop的資料寫入 備份 刪除操作

2021-10-11 07:24:15 字數 2466 閱讀 1775

google 為了應對快速增長的資料處理,開發了一套演算法。後來有人根據演算法的思想,開發出開源的軟體框架 ,就是hadoop, 隨著越來越多的組織和個人開發者在框架開發中不斷貢獻改進,hadoop 已經形成一套家族產品,成為當下最成功最流行的分布式大資料處理框架。

hadoop 受到很多組織青睞,是因為有兩大因素:

一、超大規模的資料處理, 通常 10tb 以上;

二、超複雜的計算工作,例如統計和模擬。

hadoop 在很多應用場景中發揮著主要功用,如大規模統計、etl資料探勘、大資料智慧型分析、機器學習等。

hadoop 和 傳統sql關係資料儲存 有什麼區別?

hadoop 讀時模式(schema on read),傳統sql是 寫時模式(schema on write).傳統資料庫儲存時對資料進行檢查,需要檢查表結構定義等必須匹配後才讓儲存(write),否則就報錯。hadoop 是你拿過任何資料格式我都給你儲存,只要你給我讀取這些資料的介面程式,在用到這些資料時(read),才會檢查。

左邊是schema on read ,右邊是schema on write。 右邊資料格式不對會報錯,左邊更關注讀資料的規則。hadoop 是分布式資料庫, 而大部分sql是集中儲存的。

假如我搜尋我的乙個聊天記錄,hadoop 會把搜尋任務分成多個均衡負載的搜尋任務執行在60個節點上。而傳統sql會逐個搜尋儲存空間,直到全部遍歷。如果沒有完全搜尋完,會返回搜尋結果嗎? hadoop的回答是yes,而傳統sql會是no。

hadoop 家族的產品 hive,可以讓不怎麼懂sql 的客戶開發出基本上和sql同樣功能的查詢

hadoop 的資料寫入、備份、刪除操作

一、資料寫入

在客戶端想hdfs寫資料的過程中,主要分為下面幾個過程:

客戶端將資料快取到本地的乙個臨時檔案中;

當這個本地的臨時檔案到達hdfs中的塊大小限制時,客戶端訪問namenode,namenode將檔案的名字插入到hdfs命名空間中,並且為其分配相應的儲存位置;

namenode與分配好的datanode進行溝通,確定儲存位置可用,然後將這些儲存位置資訊返回給客戶端;

客戶端將本地的臨時檔案傳輸到datanode中;

當寫檔案結束,臨時檔案關閉時,會將已有的臨時資料傳輸到datanode中,並告知namenode寫資料完成;

namenode將該檔案改變為持久的一致性狀態,也就事將該操作記錄到日誌editlog中。如果此時namenode宕掉,那麼檔案資訊丟失。

上面的過程主要特點是寫入資料先快取到本地,在達到塊大小限制時才與datanode通訊進行傳輸。這樣的好處在於避免在客戶寫資料的過程中持續占用網路頻寬,這對於處理多使用者大量資料的寫入是非常關鍵的。

二、資料備份

資料的寫入同時伴隨這資料塊的備份,過程如下:

在客戶端臨時資料達到乙個塊時,與namenode通訊,得到一組datanode位址,這些datanode就是用來儲存該資料塊的;

客戶端首先將該資料塊傳送到乙個datanode上,datanode在接受時是以4kb為單位進行,我們把這些小單位稱為快取頁(參考了linux管道檔案的說法);

對於第乙個接到資料的datanode,它把快取頁中的資料寫入自己的檔案系統,另一方面,它又將這些快取頁傳送給下乙個datanode;

重複3的過程,第二個datanode又將快取頁儲存在本地檔案系統,同時將它傳送給第三個datanode;

如果hdfs中的備份數目設定為3,那麼第三個datanode就只需要將快取頁儲存即可。

上面的過程中,資料塊從客戶端流向第乙個datanode,然後再流向第二個,從第二個再到第三個,整個是乙個流水線過程,中間不會有停頓。所以hdfs將它稱為replication pipelining。

為什麼不採取客戶端同時向多個datanode寫資料的方法呢?其實從pipelining這個稱呼上就可以猜到,客戶端和datanode採用的快取檔案都是管道檔案,即只支援一次讀取。

三、 資料刪除

hdfs中的資料刪除也是比較有特點的,並不是直接刪除,而是先放在乙個類似**站的地方(/trash),可供恢復。

對於使用者或者應用程式想要刪除的檔案,hdfs會將它重新命名並移動到/trash中,當過了一定的生命期限以後,hdfs才會將它從檔案系統中刪除,並由namenode修改相關的元資料資訊。並且只有到這個時候,datanode上相關的磁碟空間才能節省出來,也就是說,當使用者要求刪除某個檔案以後,並不能馬上看出hdfs儲存空間的增加,得等到一定的時間週期以後(現在預設為6小時)。

對於備份資料,有時候也會需要刪除,比如使用者根據需要下調了replicaion的個數,那麼多餘的資料備份就會在下次beatheart聯絡中完成刪除,對於接受到刪除操作的datanode來說,它要刪除的備份塊也是先放入/trash中,然後過一定時間後才刪除。因此在磁碟空間的檢視上,也會有一定的延時。

參考:

cookie的寫入,刪除。

下面是寫cookie的列子 1 httpcookie cookie new httpcookie info 定義cookie物件以及名為info的項 2 datetime dt datetime.now 定義時間物件 3 timespan ts new timespan 1,0,0,0 cookie...

PHP批量寫入資料 批量刪除資料

批量插入可以參考 sql insert into data id,ip,data values for i 0 i 100 i sql join sqls connect mysql query sql 批量刪除多條記錄,對於比較多的資訊,如果沒有批量刪除功能是非常麻煩的。可以加全選核取方塊 連線資...

cookie 的 寫入,讀取, 刪除

頁面跳轉,cookie儲存引數 1,設定cookie functionsetcookie name,value 如果需要設定自定義過期時間 function setcookie name,value,time function getsec str else if str2 h else if st...