分散式檔案儲存hdfs簡介及常用命令

蔚藍色天空sky發表於2020-10-21

1、hdfs簡介

1.1 什麼是HDFS?

HDFS(Hadoop Distributed File System)是hadoop生態系統的一個重要組成部分,是hadoop中的的儲存元件,是最基礎的一部分,MapReduce等計算模型都要依賴於儲存在HDFS中的資料。HDFS是一個分散式檔案系統,以流式資料訪問模式儲存超大檔案,將資料分塊儲存到一個商業硬體叢集內的不同機器上。

1.2 HDFS的設計目標

  • 儲存超大檔案 HDFS適合儲存大檔案,單個檔案大小通常在百MB以上 HDFS適合儲存海量檔案,總儲存量可達PB,EB級
  • 流式資料訪問 為資料批處理而設計,關注資料訪問的高吞吐量
  • 硬體容錯 基於普通機器搭建,硬體錯誤是常態而不是異常,因此錯誤檢測和快速、自 動的恢復是HDFS最核心的架構目標
  • 簡單的一致性模型 一次寫入,多次讀取 一個檔案經過建立、寫入和關閉之後就不需要改變
  • 不支援低時間延遲的資料訪問 hdfs關心的是高資料吞吐量,不適合那些要求低時間延遲資料訪問的應用。
  • 本地計算 將計算移動到資料附近

1.3 HDFS的構成

資料塊

  • 檔案以塊為單位進行切分儲存,塊通常設定的比較大(最小6M,預設 128M)
  • 塊越大,定址越快,讀取效率越高,但同時由於MapReduce任務也是以 塊為最小單位來處理,所以太大的塊不利於於對資料的並行處理
  • 一個檔案至少佔用一個塊(邏輯概念)
  • 冗餘備份 資料塊非常適合用於資料備份,進而可以提供資料容錯能力和提高可用性。每個塊可以有多個備份(預設為三個),分別儲存到相互獨立的機器上去,這樣就可以保證單點故障不會導致資料丟失。

Namenode

  • namenode 負責維護整個檔案系統的資訊,包括:整個檔案樹,檔案的塊 分佈資訊,檔案系統的後設資料,資料複製策略等

Datanode

  • datanode 儲存檔案內容,負責檔案實際的讀寫操作,保持與namenode的 通訊,同步檔案塊資訊

Secondary NameNode

  • Secondary NameNode是合併NameNode的edit logs到fsimage檔案中。Secondary NameNode的整個目的是在HDFS中提供一個檢查點。它只是NameNode的一個助手節點,來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份。這也是它在社群內被認為是檢查點節點的原因。

1.4 HDFS支援的儲存檔案格式

HDFS 支援任意檔案格式

常用的格式有如下幾種:

1、sequencefile:k-v格式,比源文字格式佔用磁碟更多
2、textfile:行式文字檔案,生產中用得較多
3、rcfile:行列混合儲存
4、orc:列式儲存,生產用的較多
5、parquet:列式儲存,生產中用得較多
6、avro:幾乎不用,略
7、jsonfile:json格式,幾乎不用,略
8、inputformat:幾乎不用,略
大資料儲存資料,99%以上的場景都是使用的是列式儲存

1.5 HDFS小檔案問題及解決方案

  • 問題描述 大量大小小於塊大小的檔案
  • 背景:每個檔案的後設資料物件約佔150byte,所以如果有1千萬個小檔案, 每個檔案佔用一個block,則NameNode大約需要2G空間。如果儲存1億 個檔案,則NameNode需要20G空間;資料以塊為單位進行處理。
  • 影響:佔用資源,降低處理效率
  • 解決方案:
    •從源頭減少小檔案
    •使用archive打包
    •使用其他儲存方式,如Hbase,ES等

2、hdfs常用命令

# 檢視目錄下的檔案及目錄列表
hdfs dfs -ls /

# 建立目錄
hdfs dfs -mkdir -p /user/che/1021001

# 拷貝檔案到hdfs檔案系統中的
hdfs dfs -copyFromLocal /data/test.txt  /user/che/1021001/

# 檢視檔案內容
hdfs dfs -tail /user/che/1021001/test.txt
hdfs dfs -cat /user/che/1021001/test.txt

# 刪除檔案
hdfs dfs -rm /user/che/1021001/test.txt

# 刪除資料夾
hdfs dfs -rm -r /user/che

相關文章