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秒)

最新文章

  1. 【GOF23设计模式】单例模式
  2. pypy的virtualenv安装mysql的问题解决
  3. 网络同步带来的bug
  4. 跨域http头
  5. [tp3.2.1]查询(2)
  6. There has been an error processing your request magento
  7. HTTP协议(转自:小坦克博客)
  8. UIApplication及UIWindow
  9. 四则运算2扩展---c++
  10. Struts2的struts.properties文件在哪儿啊?
  11. 轻量级数据库sqlite的接口说明
  12. 快速实现python c扩展模块
  13. Spring源码情操陶冶-AbstractApplicationContext#invokeBeanFactoryPostProcessors
  14. ASP.NET MVC5+EF6+EasyUI 后台管理系统(999)-如何使用这个系统来开发?
  15. 你有没有忽略TextField的leftView这个属性
  16. shell的追踪与调试选项
  17. CCF CSP 201609-2 火车购票
  18. Android Studio项目引入外部库注意事项(zxing)
  19. [Tensorflow] Cookbook - Retraining Existing CNNs models - Inception Model
  20. 路由器DMZ功能

热门文章

  1. android.view.ViewRoot$CalledFromWrongThreadException 异常的解决方案
  2. CDA数据分析【第一章:数据分析概述】
  3. Java开发环境之Svn
  4. free - 显示系统内存信息
  5. 模型融合---为什么说bagging是减少variance,而boosting是减少bias?
  6. thrift rpc通信
  7. springMVC中的日期格式的转化
  8. new.target元属性 | 分别用es5、es6 判断一个函数是否使用new操作符
  9. 笨方法学python3
  10. windows使用 xxx.bat运行相关指令