将HDFS挂载为NFS文件系统

说明

HDFS的访问除了通过API方式,HTTP Rest接口,也可以通过将HDFS以NFS的方式挂载为Linux或者Windows的“本地”文件系统,方便进行本地操作。如下图是通过HDFS Shell显示的HDFS根目录内容:

下图是通过Windows的NFS Client程序访问的HDFS:

步骤

配置HDFS NFS Gateway

在HDFS服务中添加对应的NFS Gateway角色即可,并启动NFS Gateway的服务(假设NFS服务启动在172.31.4.158节点上),通过

rpcinfo -p <NFS_SERVER_ADDRESS>

查看NFS是否监听在一些端口上,如下表所示:

    program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp   4242  mountd
    100005    2   udp   4242  mountd
    100005    3   udp   4242  mountd
    100005    1   tcp   4242  mountd
    100005    2   tcp   4242  mountd
    100005    3   tcp   4242  mountd
    100003    3   tcp   2049  nfs

在集群节点上验证NFS

可以选择一台Linux服务器来验证NFS的访问,在本地创建一个目录(/hdfs_nfs_mount)用来挂载HDFS NFS,然后执行下面的命令:

mount -t nfs -o vers=3,proto=tcp,nolock <NFS_SERVER_HOST>:/ /hdfs_nfs_mount

注:默认情况下NFS Gateway只提供‘/’用于共享,如果要修改这个路径,可以在高级配置中设置nfs.export.point参数。

为确保用户有正确的操作权限,使用NFS客户端的用户必须有NFS(HDFS)上对应目录的权限:

[root@ip-172-31-4-158 hdfs_nfs_mount]# ll                                     # 以root用户进行操作
total 3
drwxrwxrwx  3 usera 2584148964  96 Jan 31 14:18 benchmarks
drwx------ 11 hbase hbase      352 Feb  4 01:21 hbase
drwxr-xr-x  6 usera 2584148964 192 Jan 31 14:18 HiBench
drwxr-xr-x  4 root  root       128 Feb  4 13:50 test_root                    # test_root有root用户的操作权限
drwxrwxrwt 10 hdfs  2584148964 320 Jan 29 05:06 tmp
drwxr-xr-x 13 hdfs  2584148964 416 Jan 11 03:56 user

在Windows Server上配置NFS Client

添加服务

在Windows Server上挂载NFS,首先需要安装Windows的NFS Client Service,可以从”Administrative Tools” -> “Server Manager” -> “Roles” -> “Add Role” -> “File Service”添加NFS Client服务。

挂载目录

执行挂载命令,例:

mount -o nolock \\172.31.4.158\! G:

设置权限

挂载可以成功,但通常用户会发现没有权限操纵数据。因此执行mount命令,可以查看到一下信息:

默认情况下,UID和GID都是-2,说明客户端是以UID和GID为-2的用户去连接NFS Server (HDFS NFS Gateway),但NFS Gateway收到对应的UID/GID的请求后,会将其映射到NFS Gateway节点上对应的用户名,组名上;如果找不到对应,则会显示权限错误;所以在mount之前,需求修改默认的挂载UID和GID。

打开Windows注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default中增加两个注册项AnonymousUid和AnonymousGid,类型都是DWORD的,值应该和NFS Gateway节点上相应用户和组的id对应,重启Windows Server并重新挂载NFS即可。

results matching ""

    No results matching ""