问题导读:
1.如何启停NFS网关服务?
2.如何有效挂载NFS?
概述
NFS网关支持NFSv3,并允许HFDS被当作客户端本地的文件系统一样被挂载。目前NFS网关支持/允许下面的使用模式:
-> 用户可以通过兼容操作系统的NFSv3客户端作为本地文件系统来浏览HDFS文件系统。
-> 用户可以从HDFS文件系统中下载文件到他们的本地文件系统。
-> 用户可以直接将他们本地文件系统的文件上传到HDFS文件系统。
-> 用户可以通过挂载点直接向HDFS输出流数据。文件追加操作被支持,但是不允许随机写。
NFS网关机器需要包含HDFS客户端(包括Hadoop Jar文件,HADOOP_CONF目录)。NFS网关在DataNode,NameNode和任意HDFS客户端上。 配置
NFS网关使用代理用户来代理所有访问NFS挂载点的用户。在非安全模式下,运行网关的用户即代理用户,而安全模式下,Kerberos keytab中的用户是代理用户。假定代理用户是nfsserver,并且使用NFS挂载点的用户属于组 ‘users-group1’和’users-group2’的用户。在NameNode 的core-site.xml中,必须设置下面两个属性后重启NameNode(DataNode不需要)。注意:替换nfsserver为你集群的代理用户。
- <property>
- <name>hadoop.proxyuser.nfsserver.groups</name>
- <value>root,users-group1,users-group2</value>
- <description>
- The 'nfsserver' user is allowed to proxy all members of the 'users-group1' and
- 'users-group2' groups. Note that in most cases you will need to include the
- group "root" because the user "root" (which usually belonges to "root" group) will
- generally be the user that initially executes the mount on the NFS client system.
- Set this to '*' to allow nfsserver user to proxy any group.
- </description>
- </property>
- <property>
- <name>hadoop.proxyuser.nfsserver.hosts</name>
- <value>nfs-client-host1.com</value>
- <description>
- This is the host where the nfs gateway is running. Set this to '*' to allow
- requests from any hosts to be proxied.
- </description>
- </property>
复制代码
在非安全模式下,上面是NFS网关唯一要配置的。而Kerberos化的hadoop集群中,需要为网关添加下面的配置到hdfs-site.xml中。注意:替换nfsserver为代理用户并确保在Kerberos keytab中的用户是相同的代理用户。
- <property>
- <name>nfs.keytab.file</name>
- <value>/etc/hadoop/conf/nfsserver.keytab</value> <!-- path to the nfs gateway keytab -->
- </property>
- <property>
- <name>nfs.kerberos.principal</name>
- <value>nfsserver/_HOST@YOUR-REALM.COM</value>
- </property>
复制代码
下面的NFS网关配置对于安全模式和非安全模式都是可选的。
AIX NFS客户端有一些已经的问题,可能导致HDFS NFS网关不能正常工作。如果你想要在AIX上访问HDFS NFS网关,你需要设置下面的选项来进行变通。 - <property>
- <name>nfs.aix.compatibility.mode.enabled</name>
- <value>true</value>
- </property>
复制代码
注意,正常的非AIX客户端不应该启用AIX兼容模式。这个由AIX兼容模式的变通实现有效的禁用了下面的保障:确保通过NFS返回一致性的目录信息列表,以及所有的发送给NFS服务器的数据都能确保被提交。 强烈建议用户根据他们的实际用例来更新一些配置属性。下面所有的配置属性都可以添加到hdfs-site.xml中。
{·} 如果客户端以允许更新访问时间(access time)的模式挂载了NFS导出目录(export),确保下面的属性在配置文件中未被禁用。修改下面参数后只重启NameNode即可,在一些Unix系统中,用户可以通过以”noatime”的方式挂载来禁用访问时间更新。如果导出目录(export)被以”noatime”的方式挂载,用户就不用改变下面的参数并重启NameNode。 - <property>
- <name>dfs.namenode.accesstime.precision</name>
- <value>3600000</value>
- <description>The access time for HDFS file is precise upto this value.
- The default value is 1 hour. Setting a value of 0 disables
- access times for HDFS.
- </description>
- </property>
复制代码
{·} 用户需要更新文件转储目录参数。NFS客户端经常重新安排写操作,顺序的写操作会以随机到达NFS网关。这个目录常用于临时存储无序的写操作。对于每个文件,无序的写操作会在他们积累在内存中超过一定阈值(如。1 mb)被转储。需要确保有足够的空间的目录。例如,如果应用上传10个100M,那么这个转储目录推荐有1GB左右的空间,以便每个文件都发生最坏的情况。只有NFS网关需要在设置该属性后重启。
- <property>
- <name>nfs.dump.dir</name>
- <value>/tmp/.hdfs-nfs</value>
- </property>
复制代码
{·} 默认情况下,export可以被任何客户端挂载。为了更好的控制访问,永固可以更新下面的属性。值字符串为机器名和访问策略,通过空格来分割。机器名的格式可以是单一的主机,Java的正则表达式或者IPv4地址。访问权限使用rw或ro来指定导出目录的读/写或机器只读访问。如果访问策略没被提供,默认为只读的。每个条目使用“;”来分割。例如:”192.168.0.0/22 rw ; host.*\.example\.com ; host1.test.org ro;”。在修改完该选项后,只重启NFS网关即可。
- <property>
- <name>nfs.exports.allowed.hosts</name>
- <value>* rw</value>
- </property>
复制代码
{·} JVM和日志设置。你可以在HADOOP_NFS3_OPTS中输出JVM设置(例如堆内存大小和GC日志)。更多NFS相关的设置可以在hadoop-env.sh中找到,你可以在log4j.property文件中添加下面的选项,来获得NFS的调试跟踪信息。注意,调试跟踪信息,特别是ONCRPC,会非常详尽。
-> 改变日志级别:
- log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG
复制代码
-> 获得ONCRPC请求的更多信息:
- log4j.logger.org.apache.hadoop.oncrpc=DEBUG
复制代码
启停NFS网关服务
NFS服务需要通过三个后台进程提供:rpcbind(or portmap),mountd和nfsd。NFS网关进程有nfsd和mountd,它只将HDFS root目录”/”作为导出目录。虽然大多数Linux发行版中提供的portmap/rpcbind也能和NFS网关一起工作,还是推荐使用NFS网关中包含的portmap包,例如在RHEL6.2的portmap就有一些BUG。
1. 停止Linux发行版中的nfs/rpcbind/portmap服务(该命令可能由Unix平台而不同)
- service nfs stop
- service rpcbind stop
复制代码
2. 启动包含portmap的包(需要root权限)
复制代码 或
- hadoop-daemon.sh start portmap
复制代码
3. 启动mountd和nfsd
执行这个命令不需要root权限。在非安全模式下,NFS网关应该由前面提到的代理用户启动。而在安全模式下,任何可以读在”nfs.keytab.file”中定义的Kerberos keytab文件的用户都可以启动NFS网关。
复制代码 或
- hadoop-daemon.sh start nfs3
复制代码
注意:如果hadoop-daemon.sh脚本启动了NFS网关,它的日志可以在Hadoop日志目录下找到。
4. 停止NFS服务
- hadoop-daemon.sh stop nfs3
- hadoop-daemon.sh stop portmap
复制代码
可选操作:你以root来启动NFS网关时,你可以放弃运行Hadoop-provided portmap守护进程,而在所有操作系统上使用系统的portmap NFS守护进程。这将允许HDFS NFS网关解决上述缺陷,仍然使用系统portmap守护进程来注册。如果这样做,就像平时一样网关启动NFS守护进程,但一定要以“root”用户启动,并为非特权用户设置“HADOOP_PRIVILEGED_NFS_USER”环境变量。在这种模式下NFS网关会以root用户启动系统portmap来完成它的初始注册,然后会在之后NFS网关的生存周期内回退特权用户(root)到HADOOP_PRIVILEGED_NFS_USER中指定的用户上。如果使用这个方法,则跳过上面的1和2步骤。
验证NFS相关服务的有效性
1. 执行下面命令来验证所有的服务运行状态
- rpcinfo -p $nfs_server_ip
复制代码
你可以看到类似下面的输出:
- program vers proto port
- 100005 1 tcp 4242 mountd
- 100005 2 udp 4242 mountd
- 100005 2 tcp 4242 mountd
- 100000 2 tcp 111 portmapper
- 100000 2 udp 111 portmapper
- 100005 3 udp 4242 mountd
- 100005 1 udp 4242 mountd
- 100003 3 tcp 2049 nfs
- 100005 3 tcp 4242 mountd
复制代码
2. 验证是否HDFS命名空间被导出并可用于挂载
- showmount -e $nfs_server_ip
复制代码
你可以看到类似下面的输出:
- Exports list on $nfs_server_ip :
- / (everyone)
复制代码
挂载导出目录 “/”
当前NFSv3只使用TCP来作为传输协议。NLM不被支持,所以需要挂载选项”nolock”。建议使用硬挂载(hard moun),因为即使客户机将所有数据发送给NFS网关,这会导致在写操作被NFS客户端内核保存后,NFS网关需要额外的时间来传输数据给HDFS。如果软挂载被使用,用户需要给一个相对比较上的timeout(最少不能少于主机上默认的timeout)。
用户可以通过下面的命令来挂载HDFS命名空间:
- mount -t nfs -o vers=3,proto=tcp,nolock,noacl $server:/ $mount_point
复制代码
接下来用户可以将HDFS作为本地文件系统的一部分来访问,除此之外,硬链接和随机写操作不支持。为了优化大文件I / O的性能,可以在挂载时增加NFS传输大小(rsize和wsize)。默认情况下,NFS网关支持1MB作为最大传输大小。可以通过修改hdfs-site.xml中的nfs.rtmax和nfs.rtmax来获得更大的数据传输大小。
允许非特权客户端的挂载
在客户端的root访问情形下通常不可用,一些安全措施,诸如可以通过确保只有来自特权端口的NFS客户端可以连接到NFS服务器上。这一特性称为“端口监控。”这个特性在默认情况下不启用在HDFS NFS网关,但是可以选择性地在NFS网关机器的hdfs-site.xml启用以下配置。 - <property>
- <name>nfs.port.monitoring.disabled</name>
- <value>false</value>
- </property>
复制代码
用户验证和映射 在当前版本的NFS网关使用AUTH_UNIX风格的验证。当NFS客户端上的用户访问挂载点时,NFS客户端将传递UID给NFS网关。NFS网关会通过UID来查找用户名,并通过HDFS请求将用户名传输到HDFS中。例如,如果NFS客户端当前用户“admin”,当该用户访问挂载目录时,NFS网关会以“admin”来访问HDFS。如果要以hfds用户来访问HDFS,就需要在客户端系统上将当前用户切换到”HDFS” 来访问挂载目录。
系统管理员必须保证NFS客户端和NFS网关主机上拥有相同的名称和UID。这在使用用户管理系统(例如:LDAP/NIS)来部署HDFS节点和NFS客户端节点时通常很好实现。
如果用户帐号在不同的主机上手工创建,可能要在NFS客户端或者NFS网关主机上需要修改UID(例如,执行​ “usermod -u 123 myusername”),来确保两边一致。更多的RPC AUTH_UNIX技术细节可以在RPC specification中找到。
可选操作:如果希望在一个完全独立的UID/GID集的环境下访问HDFS NFS网关,系统管理员可以配置一个自定义的静态映射文件。默认这个文件位于”/etc/nfs.map”,也可以通过设置”static.id.mapping.file”配置属性来配置一个静态映射文件的自定义路径,静态映射文件的格式类似于exports(5) 手册页(Linux Manual),大概如下: - # Mapping for clients accessing the NFS gateway
- uid 10 100 # Map the remote UID 10 the local UID 100
- gid 11 101 # Map the remote GID 11 to the local GID 101
复制代码
原文:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html 译文:http://debugo.com/hdfs-nfs/
|