導航:首頁 > 文件處理 > hadoop解壓縮

hadoop解壓縮

發布時間:2025-08-23 12:35:49

① Hadoop 請教學習順序

雖然從事Hadoop方面工作,但是不是高手,畢竟只有一年經歷而已。
分享下本人的學習經歷吧。
了解Hadoop運行機制,可以學習Hadoop權威指南或者Hadoop實戰;
了解Hadoop運行流程,看懂HADOOP_HOME/bin/下面主要執行腳本。
查看core-default.xml/hdfs-default.xml/mapred-default.xml等默認配置
文件,及core-site.xml/hdfs-site.xml/mapred-site.xml等相關文件,學會
如何進行參數優化,以及掌握如何配置讀取壓縮文件,默認的gzip,及
自定義的lzo,學會自定義Combiner/Patitioner等,掌握各種輸入輸出
格式的區別及應用場景,學會自定義輸入輸出格式,其次學習MapRece演算法
比如In-Map-Combing,相對頻度計算,Pairs演算法,Strips演算法等。掌握好
maprece編程
在這其中,需要好好閱讀HADOOP_HOME/src/目錄下的Hadoop源碼
這個就是開源最大的好處。說的比較亂,但是就湊合著借鑒下吧

② HDFS文件

Hadoop支持的文件系統由很多(見下圖),HDFS只是其中一種實現。java抽象類 org.apache.hadoop.fs.FileSystem 定義了Hadoop中一個文件系統的客戶端介面,並且該抽象類有幾個具體實現。Hadoop一般使用URI(下圖)方案來選取合適的文件系統實例進行交互。

特別的,HDFS文件系統的操作可以使用 FsSystem shell 、客戶端(http rest api、Java api、C api等)。

FsSystem shell 的用法基本同本地shell類似,命令可參考 FsSystem shell

Hadoop是用Java寫的,通過Java Api( FileSystem 類)可以調用大部分Hadoop文件系統的交互操作。更詳細的介紹可參考 hadoop Filesystem 。

非Java開發的應用可以使用由WebHDFS協議提供的HTTP REST API,但是HTTP比原生的Java客戶端要慢,所以不到萬不得已盡量不要使用HTTP傳輸特大數據。通過HTTP來訪問HDFS有兩種方法:

兩種如圖

在第一種情況中,namenode和datanode內嵌的web服務作為WebHDFS的端節點運行(是否啟用WebHDFS可通過dfs.webhdfs.enabled設置,默認為true)。文件元數據在namenode上,文件讀寫操作首先被發往namenode,有namenode發送一個HTTP重定向至某個客戶端,指示以流的方式傳輸文件數據的目的或源datanode。

第二種方法依靠一個或多個獨立代理伺服器通過HTTP訪問HDFS。所有集群的網路通信都需要通過代理,因此客戶端從來不直接訪問namenode或datanode。使用代理後可以使用更嚴格的防火牆策略和帶寬策略。

HttpFs代理提供和WebHDFS相同的HTTP介面,這樣客戶端能夠通過webhdfs URI訪問介面。HttpFS代理啟動獨立於namenode和datanode的守護進程,使用httpfs.sh 腳本,默認在一個不同的埠上監聽(14000)。

下圖描述了

讀文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。

對上圖的解釋如下:

在讀取過程中, 如果 FSDataInputStream 在和一個 datanode 進行交流時出現了一個錯誤,他就去試一試下一個最接近的塊,他當然也會記住剛才發生錯誤的 datanode 以至於之後不會再在這個 datanode 上進行沒必要的嘗試。 DFSInputStream 也會在 datanode 上傳輸出的數據上核查檢查數(checknums).如果損壞的塊被發現了, DFSInputStream 就試圖從另一個擁有備份的 datanode 中去讀取備份塊中的數據。

在這個設計中一個重要的方面就是客戶端直接從 datanode 上檢索數據,並通過 namenode 指導來得到每一個塊的最佳 datanode。這種設計允許 HDFS 擴展大量的並發客戶端,因為數據傳輸只是集群上的所有 datanode 展開的。期間,namenode 僅僅只需要服務於獲取塊位置的請求(塊位置信息是存放在內存中,所以效率很高)。如果不這樣設計,隨著客戶端數據量的增長,數據服務就會很快成為一個瓶頸。

我們知道,相對於客戶端(之後就是 maprece task 了),塊的位置有以下可能性:

我們認為他們對於客戶端的帶寬遞減,距離遞增(括弧中表示距離)。示意圖如下:

如果集群中的機器都在同一個機架上,我們無需其他配置,若集群比較復雜,由於hadoop無法自動發現網路拓撲,所以需要額外配置網路拓撲。

基本讀取程序,將文件內容輸出到console

FileSystemCat

隨機讀取

展開原碼

下圖描述了寫文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。

對上圖的解釋如下:

如果在任何一個 datanode 在寫入數據的時候失敗了,接下來所做的一切對客戶端都是透明的:首先, pipeline 被關閉,在確認隊列中的剩下的包會被添加進數據隊列的起始位置上,以至於在失敗的節點下游的任 何節點都不會丟失任何的包。然後與 namenode 聯系後,當前在一個好的 datanode 會聯系 namenode, 給失敗節點上還未寫完的塊生成一個新的標識ID, 以至於如果這個失敗的 datanode 不久後恢復了,這個不完整的塊將會被刪除。失敗節點會從 pipeline 中移除,然後剩下兩個好的 datanode 會組成一個的新的 pipeline ,剩下的 這些塊的包(也就是剛才放在數據隊列隊首的包)會繼續寫進 pipeline 中好的 datanode 中。最後,namenode 注意到塊備份數小於規定的備份數,他就安排在另一個節點上創建完成備份,直接從已有的塊中復制就可以。然後一直到滿足了備份數( dfs.replication )。如果有多個節點的寫入失敗了,如果滿足了最小備份數的設置( dfs.namenode.repliction.min ),寫入也將會成功,然後剩下的備份會被集群非同步的執行備份,直到滿足了備份數( dfs.replication )。

創建目錄

文件壓縮有兩大好處:

Hadoop 對於壓縮格式的是自動識別。如果我們壓縮的文件有相應壓縮格式的擴展名(比如 lzo,gz,bzip2 等)。Hadoop 會根據壓縮格式的擴展名自動選擇相對應的解碼器來解壓數據,此過程完全是 Hadoop 自動處理,我們只需要確保輸入的壓縮文件有擴展名。

Hadoop中有多種壓縮格式、演算法和工具,下圖列出了常用的壓縮方法。

表中的「是否可切分」表示對應的壓縮演算法是否支持切分,也就是說是否可以搜索數據流的任意位置並進一步往下讀取數據,可切分的壓縮格式尤其適合MapRece。

所有的壓縮演算法都需要權衡空間/時間:壓縮和解壓縮速度更快,其代價通常是只能節省少量的空間。不同的壓縮工具有不同的特性:

更詳細的比較如下

1.壓縮性能比較

2.優缺點

另外使用hadoop原生(native)類庫比其他java實現有更快的壓縮和解壓縮速度。特徵比較如下:

使用容器文件格式結合壓縮演算法也能更好的提高效率。順序文件、Arvo文件、ORCFiles、Parqurt文件同時支持壓縮和切分。

壓縮舉例(Java)

壓縮

解壓縮

六、文件序列化

序列化是指將結構化數據轉換為位元組流以便在網路上傳輸或寫到磁碟進行永久存儲。反序列化獅子將位元組流轉換回結構化對象的逆過程。

序列化用於分布式數據處理的兩大領域:進程間通信和永久存儲。

對序列化的要求時是格式緊湊(高效使用存儲空間)、快速(讀寫效率高)、可擴展(可以透明地讀取老格式數據)且可以互操作(可以使用不同的語言讀寫數據)。

Hadoop使用的是自己的序列化格式 Writable ,它絕對緊湊、速度快,但不太容易用java以外的語言進行擴展或使用。

當然,用戶也可以使用其他序列化框架或者自定義序列化方式,如 Avro 框架。

Hadoop內部還使用了 Apache Thrift 和 Protocal Buffers 來實現RPC和數據交換。

③ 壓縮包在root用戶下解壓過了,怎麼才能把它刪除然後在hadoop用戶下再解壓

如果需要刪除在root用戶下解壓的壓縮包,再在hadoop用戶下解壓,可以按照以下步驟進行:

1. 以root身份登錄系統,找到需要刪除的壓縮包所在目錄,刪除該文件,可以使用命令:sudo rm -f 壓縮包名稱。

2. 切換至hadoop用戶,並切換至需要解壓的目錄。

3. 用hadoop用戶許可權再次下載需要解壓的壓縮包,可以使用cp或wget等命令。

4. 解壓該文件,可以使用unzip或tar等命令進行解壓操作。

需要注意的是,對於需要維護的高級操作,應該充分理解相關命令的用法,避免誤操作誤操作造成不必要的麻煩。

閱讀全文

與hadoop解壓縮相關的資料

熱點內容
有車以後app的活動在哪裡 瀏覽:145
乘積的n階如何編譯 瀏覽:103
手機音頻轉換app哪個好用 瀏覽:564
怎麼快速展開全部切割清單中文件夾 瀏覽:670
內網如何打開伺服器遠程桌面連接 瀏覽:979
如何使用單片機的蜂鳴器 瀏覽:369
圍棋初級教程pdf 瀏覽:861
不會誇人的程序員是什麼樣子 瀏覽:116
如何通過程序員調查背景 瀏覽:315
php判斷字元串是否在數組中 瀏覽:890
安卓手機卡發熱是什麼原因 瀏覽:152
命令提示符管理員指令 瀏覽:885
壓縮機的拆除 瀏覽:641
雲伺服器ip被攻擊 瀏覽:612
天山暴擊演算法 瀏覽:833
編譯實驗輸入某段程序C中 瀏覽:571
pdf閱讀進度 瀏覽:752
phppecl下載 瀏覽:653
顯控編程窗口轉換怎麼編輯 瀏覽:966
列印伺服器怎麼重置 瀏覽:532