HDFS进阶应用 配置NFS 网关java
• NFS 网关用途node
– 1.用户能够经过操做系统兼容的本地NFSv3客户端来阅览HDFS文件系统linux
– 2.用户能够从HDFS文件系统下载文档到本地文件系统正则表达式
– 3.用户能够经过挂载点直接流化数据。支持文件附加,可是不支持随机写apache
– NFS 网关支持NFSv3和容许HDFS 做为客户端文件系统的一部分被挂载vim
• 特性与注意事项安全
– 不支持随机写ssh
– 在非安全模式,运行网关的用户是代理用户tcp
– 在安全模式时,Kerberos keytab中的用户是代理用户ide
– AIX NFS有一些知道的问题,不能让默认的HDFS NFS网关正常工做,若是想在 AIX 访问 NFS 网关须要配置下面的参数
<property>
<name>nfs.aix.compatibility.mode.enabled</name>
<value>true</value>
</property>
• 特性与注意事项
– HDFS超级用户是与NameNode进程自己具备相同标识的用户,超级用户能够执行任何操做,由于权限检查永远不会为超级用户失败。
<property>
<name>nfs.superuser</name>
<value>the_name_of_hdfs_superuser</value>
</property>
– 若是客户端安装容许访问时间更新,在某些Unix系统上,用户能够经过使用“noatime”安装来禁用访问时间更新
<property>
<name>dfs.namenode.accesstime.precision</name>
<value>0</value>
</property>
– nfs.dump.dir
– 用户须要更新文件转储目录参数。NFS客户端常常从新安排写操做,顺序的写操做会以随机到达NFS网关。这个目录经常使用于临时存储无序的写操做。对于每一个文件,无序的写操做会在他们积累在内存中超过必定阈值(如。1 mb)被转储。须要确保有足够的空间的目录。例如,若是应用上传10个100M,那么这个转储目录推荐有1GB左右的空间,以便每一个文件都发生最坏的状况。只有NFS网关须要在设置该属性后重启。
– nfs.exports.allowed.hosts
– 默认状况下,export能够被任何客户端挂载。为了更好的控制访问,能够设置属性。值字符串为机器名和访问策略,经过空格来分割。机器名的格式能够是单一的主机,Java的正则表达式或者IPv4地址。访问权限使用rw或ro来指定导出目录的读/写或机器只读访问。若是访问策略没被提供,默认为只读的。每一个条目使用“;”来分割。
• 调试与日志排错
– 在配置 NFS 网关过程当中常常会碰到各类各样的错误,若是出现了错误,打开调试日志是一个不错的选择
• log4j.property
– log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG
– log4j.logger.org.apache.hadoop.oncrpc=DEBUG
• core-site.xml
– hadoop.proxyuser.{nfsuser}.groups
– hadoop.proxyuser.{nfsuser}.hosts
– 这里的 nfsuser 是你机器上真实运行 nfsgw 的用户
– 在非安全模式,运行nfs网关的用户为代理用户
– groups 为挂载点用户所使用的组
– hosts 为挂载点主机地址
• hdfs-site.xml
– nfs.exports.allowed.hosts
– 设置容许访问 NFS 主机列与权限,默认 “ro”
<property>
<name>nfs.exports.allowed.hosts</name>
<value>* rw</value>
</property>
– dfs.namenode.accesstime.precision
– 关闭 access time
<property>
<name>dfs.namenode.accesstime.precision</name>
<value>3600000</value>
</property>
– nfs.dump.dir
– 设置转储目录
<property>
<name>nfs.dump.dir</name>
<value>/tmp/.hdfs-nfs</value>
</property>
– nfs.rtmax & nfs.wtmax
– 用户能够像访问本地文件系统的一部分同样访问HDFS,但硬连接和随机写还不支持。对于大文件I/O的优化,能够在mount的时候增长NFS传输的大小(rsize和wsize)。在默认状况下,NFS网关支持1MB做为最大的传输大小。更大的数据传输大小,须要在hdfs-site.xml中设置“nfs.rtmax” 和“nfs.wtmax”
– nfs.rtmax & nfs.wtmax
<property>
<name>nfs.rtmax</name>
<value>4194304</value>
</property>
<property>
<name>nfs.wtmax</name>
<value>1048576</value>
</property>
– nfs.port.monitoring.disabled
– 容许从没有权限的客户端挂载 nfs
<property>
<name>nfs.port.monitoring.disabled</name>
<value>false</value>
</property>
• nfs.map
– 系统管理员必须确保在NFS客户端的用户和在HDFS网关主机上的用户有相同的名称和UID。不一样主机上建立的用户须要修改UID(例如使用“usermod -u 123myusername”),在NFS客户端或者NFS网关主机来进行。若是客户端的用户和NFS网关的用户 uid 不能保持一致须要咱们配置 nfs.map 的静态映射关系
实验环境准备参考 http://www.javashuo.com/article/p-untbjyga-cn.html
配置 NFS 网关
# cd /usr/local/hadoop/
# ./sbin/stop-all.sh
# jps
6598 Jps
# vim /etc/hosts
192.168.4.1 master
192.168.4.2 node1
192.168.4.3 node2
192.168.4.4 node3
192.168.4.5 nfsgw //添加新的主机
# for i in {1..5}
> do
> rsync -a /etc/hosts 192.168.4.${i}:/etc/hosts
> done
# scp /etc/yum.repos.d/yum.repo nfsgw:/etc/yum.repos.d/
yum.repo 100% 61 0.1KB/s 00:00
# ssh nfsgw
Last login: Wed Jan 31 08:20:55 2018 from master
# sed -ri "s/^(SELINUX=).*/\1disabled/" /etc/selinux/config ; yum -y remove firewalld
# reboot
// 添加用户
[root@nfsgw ~]# adduser -g 10 -u 1001 nfsuser
[root@nfsgw ~]# id nfsuser
uid=1001(nfsuser) gid=10(wheel) 组=10(wheel)
[root@master ~]# adduser -g 10 -u 1001 nfsuser
[root@master ~]# id nfsuser
[root@master ~]# cd /usr/local/hadoop/
[root@master hadoop]# cd etc/hadoop/
[root@master hadoop]# vim core-site.xml
<property>
<name>hadoop.proxyuser.nfsuser.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.hosts</name>
<value>*</value>
</property>
[root@master hadoop]# for i in node{1..3}
> do
> rsync -a /usr/local/hadoop/etc/hadoop/ ${i}:/usr/local/hadoop/etc/hadoop/ -e "ssh"
> done
[root@master ~]# ssh nfsgw
[root@nfsgw ~]# yum -y install java-1.8.0-openjdk-devel.x86_64
[root@nfsgw ~]# cd /usr/local/
[root@nfsgw ~]# rsync -azSH --delete master:/usr/local/hadoop ./ -e "ssh" //同步hadoop
[root@nfsgw ~]# yum -y remove rpcbind nfs-util
[root@master ~]# cd /usr/local/hadoop/
[root@master hadoop]# ./sbin/start-dfs.sh //启动集群
[root@master hadoop]# jps
6755 NameNode
7062 Jps
6953 SecondaryNameNode
[root@master hadoop]# ./bin/hdfs dfsadmin -report //检查节点
[root@master hadoop]# ssh nfsgw
Last login: Wed Jan 31 08:26:48 2018 from master
[root@nfsgw ~]# cd /usr/local/hadoop/
[root@nfsgw hadoop]# cd etc/hadoop/
[root@nfsgw hadoop]# vim hdfs-site.xml
...
<property>
<name>nfs.exports.allowed.hosts</name>
<value>* rw</value> //容许那些主机访问权限
</property>
<property>
<name>dfs.namenode.accesstime.precision</name>
<value>3600000</value> //accesstime 更新时间
</property>
<property>
<name>nfs.dump.dir</name>
<value>/var/nfstemp</value> //转储目录
</property>
<property>
<name>nfs.rtmax</name>
<value>4194304</value> // 读文件 传输大小
</property>
<property>
<name>nfs.wtmax</name>
<value>1048576</value> //写文件 传输大小
</property>
<property>
<name>nfs.port.monitoring.disabled</name>
<value>false</value> // 容许客户端挂载
</property>
...
[root@nfsgw ~]# mkdir /var/nfstemp
[root@nfsgw ~]# chown 1001.10 /var/nfstemp/
[root@nfsgw ~]# setfacl -m u:nfsuser:rwx /usr/local/hadoop/logs/
[root@nfsgw ~]# cd /usr/local/hadoop/
– 启动 portmap 服务
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
starting portmap, logging to /usr/local/hadoop/logs/hadoop-root-portmap-nfsgw.out
[root@nfsgw hadoop]# su nfsuser
– 启动 nfs3
[nfsuser@nfsgw hadoop]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
starting nfs3, logging to /usr/local/hadoop/logs/hadoop-nfsuser-nfs3-nfsgw.out
[nfsuser@nfsgw hadoop]$ jps
2728 Jps
2671 Nfs3
[nfsuser@nfsgw hadoop]$ exit
exit
[root@nfsgw hadoop]# jps
2738 Jps
2588 Portmap
2671 -- process information unavailable
– 这里要特别注意:
– 启动 portmap 须要使用 root 用户
– 启动 nfs3 须要使用 core-site 里面设置的用户
挂载 nfs
– 目前NFS v3仅使用TCP做为传输协议。 不支持NLM,所以须要安装选项“nolock”。 强烈建议使用安装选项“sync”,由于它能够最小化或避免从新排序写入,这将致使更可预测的吞吐量。 未指定同步选项可能会致使上传大文件时出现不可靠的行为
– 若是必须使用软安装,用户应该给它一个相对较长的超时(至少不小于主机上的默认超时)
# mount -t nfs -o vers=3,proto=tcp,nolock,sync,noatime,noacl 192.168.4.5:/ /mnt/
# ls /mnt/
input output tmp