使用hdfs-mount掛載HDFS

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

一、特性(計劃)簡介

如下翻譯自 hdfs-mount/README.mdgithub

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

二、構建程序

個人系統環境是CentOS 7.0 x86_64,如下全部操做都是基於此。golang

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

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),因此須要保持網絡通暢。bash

三、使用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秒)
相關文章
相關標籤/搜索