使用hdfs-mount掛載HDFS


hdfs-mount是一個將HDFS掛載為本地Linux文件系統的工具,使用go語言開發,不依賴libdfs和java虛擬機。它允許將遠程HDFS作為本地Linux文件系統掛載,並允許任意應用程序或shell腳本以高效和安全的方式訪問HDFS作為普通文件和目錄。

1、特性(計划)簡介

以下翻譯自 hdfs-mount/README.md

  • 高性能
    • 使用protocol buffers協議直接連接HDFS和Linux內核FUSE接口(無需Java虛擬機)
    • 針對吞吐量密集型工作負載進行設計和優化(盡可能以延遲交換吞吐量)
    • 完全流式傳輸和自動預讀支持
    • 並發操作
    • 在內存中緩存元數據 (速度非常快 l!)
  • 高穩定性和強大的故障處理行為
    • 自動重試和故障轉移,全部可配置
    • 可選的延遲掛載, 在 HDFS 可用之前
  • 讀寫操作都支持
    • 支持隨機寫入[慢,但功能正確]
    • 支持文件截斷
  • (可選)擴展ZIP存檔,並根據需要提取內容
    • 這為”數百萬個小文件在HDFS上“(millions of small files on HDFS)問題提供了有效的解決方案
  • 對CoreOS和Docker友好
    • 可選擇打包為靜態鏈接的獨立可執行文件

2、構建程序

我的系統環境是CentOS 7.0 x86_64,以下所有操作都是基於此。

先安裝編譯所需的必要工具軟件:

yum install make golang

然后下載hdfs-mount的源碼回來,源碼倉庫地址:https://github.com/microsoft/hdfs-mount.git

git clone https://github.com/microsoft/hdfs-mount.git

然后就可以編譯了,先進入源碼目錄

# 進入源碼根目錄
cd hdfs-mount
# 執行構建
make

編譯的過程中因為要下載依賴(bazil/fusex/net/contextprotobuf/proto),所以需要保持網絡通暢。

3、使用hdfs-mount掛載HDFS

因為hdfs-mount基於FUSE(用戶空間文件系統)框架設計,所以需要先安裝fuse內核模塊,並加載(如果沒有加載fuse內核模塊,則無法hdfs-mount操作時候將失敗,並提示加載)。

# 安裝fuse模塊
sudo yum install fuse
# 加載fuse模塊
sudo modprobe fuse

然后就可以使用hdfs-mount進行HDFS的掛載了,掛載后可以使用dd命令進行一下讀寫速度測試。

# 掛載,因為hdfs-mount並不會后台運行,所以使用&放入后台
sudo ./hdfs-mount 192.168.0.32:9000 /mnt/hdfs &
# 測試一下讀取速度
dd bs=64k if=/mnt/hdfs/test.img of=/dev/null
記錄了24421+1 的讀入
記錄了24421+1 的寫出
1600485903字節(1.6 GB)已復制,9.56565 秒,167 MB/秒

hdfs-mount的一些命令行參數如下,更多細節可執行hdfs-mount --help查看。

 # 查看使用幫助信息
./hdfs-mount --help
# 掛載必要選項:  HDFS名字節點 端口  掛載位置
./hdfs-mount      NameNode:Port MountPoint 

# 下面是一些可選參數
-allowedPrefixes string
   # 允許的前綴字符串,以逗號分隔的遠程HDFS上允許訪問的路徑前綴列表,如果指定了,掛載點將僅公開對這些前綴路徑的訪問(默認*)
-expandZips
   # 實現zip文件的自動展開(訪問zip包內部文件)
-fuse.debug
   # 日志輸出FUSE處理的線性信息
-lazy
   # 延遲加載,允許在HDFS就緒前掛載HDFS文件系統
-logLevel int
   # 日志輸出級別控制。0:僅fatal/err日志;1:+warning日志;2:+info日志
-readOnly
   # 啟用只讀掛載
-retryMaxAttempts int
   # 失敗操作的最大重試次數(默認99999999)
-retryMaxDelay    duration
   # 兩次重試之間的最大延時(默認1分0秒)
-retryMinDelay    duration
   # 兩次重試之間的最小延時(注意,第一次重試總是立即進行)(默認為1秒)
-retryTimeLimit   duration
   # 失敗操作的所有重試嘗試的時間限制 (默認為 5分0秒)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM