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

使用hdfs-mount挂载HDFS的更多相关文章

  1. fuse挂载hdfs目录到linux本地

    1,安装fuse yum -y install hadoop-hdfs-fuse 2.修改环境变量 vi /etc/profile 增加如下配置: JAVA_HOME=/usr/jdk64/jdk1. ...

  2. fuse-dfs挂载hdfs实录

    部署安装了最新稳定版hadoop2.2.0.然后在网上找来fuse-dfs编译教程.可是最后失败了.至今原因未知--,错误描写叙述为:Transport endpoint is not connect ...

  3. hdfs文件系统挂载

    简要说明: 使用fuse将hdfs文件系统挂载远程服务器上,像使用nfs和glusterfs那样可以挂载共享存储 fuse安装 fuse可以编译安装或者通过CDH或ambari源yum安装 此处使用a ...

  4. [HDFS Manual] CH6 HDFS Federation

    HDFS Federation HDFS Federation 1 Background 2.多个namenode/namespace 2.1 关键好处 3 联合配置 3.1 配置 3.2 格式化na ...

  5. [HDFS Manual] CH2 HDFS Users Guide

    2 HDFS Users Guide 2 HDFS Users Guide 2.1目的 2.2.概述 2.3.先决条件 2.4. Web Interface 2.5. Shell Command 2. ...

  6. [HDFS Manual] CH1 HDFS体系结构

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. HDFS之四:HDFS原理解析(总体架构,读写操作流程)

    前言 HDFS 是一个能够面向大规模数据使用的,可进行扩展的文件存储与传递系统.是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和 存储空间.让实际上是通过网络来访问文件 ...

  8. linux mount挂载设备(u盘,光盘,iso等 )使用说明

    对于新手学习,mount 命令,一定会有很多疑问.其实我想疑问来源更多的是对linux系统本身特殊性了解问题. linux是基于文件系统,所有的设备都会对应于:/dev/下面的设备.如: [cheng ...

  9. mount挂载和交换分区swap

    目录 mount挂载 挂载方法 选项 查看设备 卸载命令 文件挂载配置文件fstab 交换文件与分区 swap优先级 三个工具free,df,du 扩展 移动介质 使用光盘 挂载USB设备 mount ...

随机推荐

  1. MySQL倒序索引测试2

    测试环境 MySQL Community Server 8.0.17 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AU ...

  2. 服务器架构前面加了防火墙,Nginx如何获取客户端真实ip???

    在大部分实际业务场景中,网站访问请求并不是简单地从用户(访问者)的浏览器直达网站的源站服务器,中间可能经过所部署的CDN.高防IP.WAF等代理服务器.例如,网站可能采用这样的部署架构:用户 > ...

  3. Centos 7 中的ulimit -n 65535 对进程的文件句柄限制不生效??

    今日闲来无事,就看群里大佬吹牛逼了,偶然一条技术疑问提出来了,神奇啊,作为广大老司机技术交流群体竟然还有这么深入的研究? 大佬问:这个文件句柄限制怎么设置了/etc/security/limits.c ...

  4. ElasticSearch(十四):Linux下设置ElasticSearch 开机自启

    一.创建脚本文件 在  /etc/init.d  目录下,创建脚本文件 elasticsearch # cd /etc/init.d/ # vim elasticsearch 将以下内容写入文件中(其 ...

  5. 使用awk格式化输出文本

    注意:本文并不是一篇awk入门文章,而是偏重实例讲解 awk借鉴了c语法,因此awk在许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于 ...

  6. Docker容器的简单使用

    1. docker的使用 1> 创建容器 创建并启动容器: docker run -it -name 容器名 镜像: 版本  /bin/sh(bash) 创建并不启动容器:docker crea ...

  7. SpringMVC使用@Valid注解进行数据验证

    SpringMVC使用@Valid注解进行数据验证   from:https://blog.csdn.net/zknxx/article/details/52426771 我们在做Form表单提交的时 ...

  8. 为什么要指定HashMap的容量?HashMap指定容量初始化后,底层Hash数组已经被分配内存了吗?

    为什么要指定HashMap的容量? 首先创建HashMap时,指定容量比如1024后,并不是HashMap的size不是1024,而是0,插入多少元素,size就是多少: 然后如果不指定HashMap ...

  9. ansible(三)

    setup ansible_all_ipv4_addresses # ipv4的所有地址 ansible_all_ipv6_addresses # ipv6的所有地址 ansible_date_tim ...

  10. utf8mb4版本设置django

    'OPTIONS':{ 'init_command':"SET sql_mode='STRICT_TRANS_TABLES'", 'charset':'utf8mb4',