环境说明

  • Ambari 2.6.1
  • HDP 2.6.4.0

前言

假如我们在命令行中访问HDFS路径的话,确实有点繁琐。那么有没有一种工具可以将HDFS上面的空间映射到linux本地磁盘上,然后再进行操作呢?答案是:当然有。HDFS服务中的NFS Gateway组件就可以解决我们的问题,一起往下看吧

一、HDFS NFS Gateway简介

HDFS的NFS网关允许客户端挂载HDFS并通过NFS与其进行交互,就像它是本地文件系统的一部分一样。网关支持NFSv3。

安装HDFS后,用户可以:

  • 在NFSv3客户端兼容的操作系统上通过其本地文件系统浏览HDFS文件系统。
  • 在HDFS文件系统和本地文件系统之间上载和下载文件。
  • 通过挂载点将数据直接传输到HDFS。 (支持文件追加,但不支持随机写入。)

先决条件

NFS网关机器必须运行“运行HDFS客户端所需的所有组件”,例如Hadoop核心JAR文件和HADOOP_CONF目录。NFS网关可以安装在任何DataNode,NameNode或HDP客户端计算机上。在该计算机上启动NFS服务器。

二、安装启动NFSGateway

HDFS NFS Gateway工作需要依附 rpcbind 服务,所以启动前需要确定rpcbind服务正常开启。

1
service rpcbind start

但是HDFS NFS 服务会与系统自带的NFS服务冲突,所以在启动前需要关闭系统自带的NFS服务。

1
service nfs stop

但是,上述的操作我们不需要手动执行,我们可以使用Ambari来安装NFSGateway组件,它会自动停止nfs服务和开启rpcbind服务。

在Ambari平台系统中进入要安装NFSGateway组件的机器,点击“添加”按钮,选择NFSGateway,如图所示:

安装完毕之后,需要我们再启动该组件,如图所示:

安装成功之后,在HDFS面板上就有了NFSGateway组件,如图所示:

三、HDFS NFS Gateway配置项说明

1. dfs.namenode.accesstime.precision

在Ambari平台系统中的HDFS配置项中搜索dfs.namenode.accesstime.precision,如图所示:

HDFS文件的访问时间精确到此值。默认值为0,禁用状态。将该值从“0”修改为“3600000”,访问时间为1小时。

注意:如果在允许访问时更新的情况下挂载导出,请确保未在配置文件中禁用此属性。更改此属性后,保存配置,在页面上重启依赖的服务。

2. nfs.file.dump.dir

在Ambari平台系统中的HDFS配置项中搜索nfs.file.dump.dir,如图所示:

NFS客户端经常重新排序写入。顺序写入可以随机顺序到达NFS网关。此目录用于在写入HDFS之前临时保存无序写入。需要确保目录有足够的空间。例如,如果应用程序上传了10个文件,每个文件都有100MB,则建议此目录有1GB空间,以防每个文件发生最坏情况的写入重新排序。

那么如何查看/tmp/.hdfs-nfs目录有足够的空间呢?

使用df -h目录就可以查看各挂载目录空间的大小,如图所示:

/tmp/.hdfs-nfs目录就在/目录下,由上图可知,还有75G的可用空间。

注意:不要将挂载点设置到该目录。如果挂载了,重启NFS Gateway组件就会被卡住。

3. nfs.exports.allowed.hosts

在Ambari平台系统中的HDFS配置项中搜索nfs.exports.allowed.hosts,如图所示:

默认情况下,导出可以由任何客户端装入。您必须更新此属性才能控制访问权限。值字符串包含机器名称和访问权限,由空格字符分隔。计算机名称可以是单主机,通配符或IPv4网络格式。访问权限使用rwro指定对导出的readwritereadonly访问。如果未指定访问权限,则只能读取对导出的默认计算机访问权限。更新此属性后重新启动NFS网关。

四、访问HDFS

1. 挂载

要访问HDFS,首先安装导出“/”。目前支持NFS v3。传输协议是TCP。

按如下方式挂载HDFS命名空间:

1
mount -t nfs -o vers=3,proto=tcp,nolock,sync,rsize=1048576,wsize=1048576 $server:/ $mount_point

将HDFS作为本地文件系统的一部分进行访问。其中$server是NFSGateway所在的主机,$mount_point代表挂载点。

注意:

由于不支持NLM,因此需要mount选项nolock。编写大文件时,请使用sync选项来提高性能。NFS客户端的sync mount选项提高了使用NFS网关将大文件写入HDFS的性能和可靠性。如果指定了sync选项,则NFS客户机计算机刷新会将操作写入NFS网关,然后再将控制权返回给客户端应用程序。同步的有用副作用是客户端不发出重新排序的写入。这减少了NFS网关的缓冲要求。在挂载NFS共享时,在客户端计算机上指定了sync。

示例:

1
2
3
4
# 创建挂载点
mkdir /opt/hdfs
# 将HDFS空间挂载到本地磁盘
mount -t nfs -o vers=3,proto=tcp,nolock,sync,rsize=1048576,wsize=1048576 10.6.6.72:/ /opt/hdfs
2. 解挂

使用umount命令来解挂挂载点:

1
umount /opt/hdfs

五、如何控制访问权限

1. 说明

默认情况下,导出可以由任何客户端装入。您必须更新此属性才能控制访问权限。

在Ambari平台系统中的HDFS配置项中搜索nfs.exports.allowed.hosts,如图所示:

值字符串包含机器名称和访问权限,由空格字符分隔。计算机名称可以是单主机,通配符或IPv4网络格式。访问权限使用rw或ro指定对导出的readwrite或readonly访问。

2. 示例

控制访问权限,允许liuyzh1.xdata主机拥有readwrite权限,liuyzh2.xdata主机拥有readonly权限,其余主机无权限。

修改nfs.exports.allowed.hosts,将该值修改为liuyzh1.xdata rw;liuyzh2.xdata ro,如图所示:

保存配置,重启依赖的服务即可。

查看挂载信息:

1
showmount -e $nfs_server

表示仅可以将hdfs空间挂载到liuyzh1.xdataliuyzh2.xdata主机上,其余主机不可以。

按照上述操作,就可以在liuyzh1.xdata主机上的挂载点操作hdfs文件;

liuyzh2.xdata主机上就只有“只读”权限,其余操作均报Permission denied提示,如图所示:

在其余主机上会挂载失败,报mount.nfs: Stale file handle的提示,如图所示: