Hadoop核心组件之NFS网关配置(五)

原文链接: https://mp.csdn.net/mdeditor/102639325#

NFS配置

NFS网关

NFS网关用途

  • 用户可以通过才操作系统兼容的本地NFSv3客户端浏览HDFS文件系统
  • 用户可以从HDFS文件系统下载文档到本地文件系统
  • 永不可以通过挂载点直接刘华数据,支持文件附加,但不支持suiji写
  • NFS网管支持NFSv3和允许HDFS作为客户端文件系统的一部分被挂在

NFS网关特性

HDFS超级用户(就是启动NameNode的用户可以通过查看/usr/local/hadoop/logs/NameNode的日志文件名判断启动NameNode的用户)是与NameNode进程本身具有相同标示的用户,超级用户可以执行任何操作,因为权限检查永远不会认为超级用户失败.
注意事项:

  • 在非安全模式下,运行网管进程的用户是代理用户(不能与HDFS的超级用户相同)
  • 在安全模式下,Kerberos keytab中的用户是代理拥护
  • /usr/local/hadoop/logs/NameNode的日志文件名规则:
    hadoop-启动用户名-启动的服务-主机名.log

NFS网关的工作流程在这里插入图片描述

NFSGW上安装两个服务:HDFS-Client和NFS-server
1.客户端挂载NFSGW的NFS共享,客户端发出命令请求
2.NFSGW的NFS服务将客户端的请求转发给HDFS-Client
3.HDFS-Client通过HDFS的协议直接访问后端集群
4.后端集群返回的结果给HDFSclient
5.HDFSclient再将结果返回给NFS服务
6.NFSserver再通过共享服务讲结果返回给客户.
写数据时

  • NFSserver上先生成缓冲区,然后HDFSclient将缓冲区的数据传递给后端HDFS集群,传送完毕后,缓冲区消失.

配置用户

配置代理用户

  • 在NameNode和NFSGW上添加代理用户,确保代理用户的UID/GID,用户名完全相同
    ]# groupadd -g 800 nfsuser
    ]# useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
    注意:NFSGW 上执行时需要先创建//var/hadoop目录
  • 如果因为特殊原因客户端用户和NFS网管的用户UID不能保持一致,我们需要配置nfs.map的静态映射关系
    vim nfs.map
    uid 10 100 #Map the remote UID 10 the local UID 100
    gid 11 101 #Map the remote GID 11 the local GID 101

配置core-site.xml文件

NameNode节点修改core-site.xml,添加
hadoop.proxyuser.代理用户.groups
hadoop.proxyuser.代理用户.hosts
这里代理用户是主机上真实运行的nfs3的用户,在非安全模式下,运行nfs网管的用户代理用户,groups为挂在用户所使用的组,hosts为挂载点主机地址.
]# vim /usr/local/hadoop/etc/hadoop/core-site.xml

… …

hadoop.proxyuser.nfsuser.groups



hadoop.proxyuser.nfsuser.hosts


停止集群所有服务

NameNode节点上操作
]# ./sbin/stop-all.sh

同步NameNode配置文件到所有主机

NameNode节点上操作
]# for i in node{1…3};do rsync -aXSH /usr/local/hadoop/etc/hadoop $i:/usr/local/hadoop/etc/
\ >done

启动HDFS

NameNode节点上操作
]# ./sbin/start-hdfs.sh

NFSGW配置

配置步骤

  • 启动一个新的系统,卸载rpcbind和nfs-utils
  • 配置/etc/hosts,添加所有NameNode和DataNode的主机名对应的IP关系
  • 安装Java运行环境(java-1.8.0-openjdk-devel)
  • 同步NameNode的/usr/local/hadoop到本机
  • 配置hdfs-site.xml
  • 启动服务

配置hdfs-site.xml文件

在文件中添加nfs.exoprts.allowed.hosts

  • 默认情况下,export可以被任何客户端挂载.为了更好的控制访问,可以设置属性;值和字符串对应机器名和访问策略,通过空格来分割;机器名的格式可以是单一的主机,Java的正则表达式或者IPv4地址
  • 使用rw或ro可以指定导出目录的读写或只读权限.如果访问策略没有设置,默认为只读.每个条目使用";"来分割.
    ]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
    … …

    nfs.exoprts.allowed.hosts
    * rw

    … …

在文件中添加nfs.dump.dir

  • 用户需要更新文件转存目录参数.NFS客户端经常重新安排写操作,顺序的写操作会随机到达NFS网关.这个目录常用于临时存储无序的写操作.对于每个文件,无序的写操作会积累在他们的内存中,超过一定的阈值时被转存.需要确保有足够的空间的目录.
  • 例如,应用上传100M,南无这个转存目录推荐使用1GB左右的空间,一边每个文件都发生最坏情况.只有NFS网管需要在设置该属性后重启.
    ]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
    … …

    nfs.dump.dir
    /var/nfstmp

    … …

配置完文件后,需要创建转存目录/var/nfstmp

]# mkdir /var/nfstmp
]# chown nfsuser:nfsuser /var/nfstmp #这里需要把该文件的所有者和所属组改成代理拥护,否则用代理代理用户启动没法往/var/nfstmp中写入数据.

NFS启动与挂载

  • 设置/usr/local/hadoop/logs权限,为代理拥护赋予读写执行的权限,logs目录是由系统创建的,默认的所有者为root,代理用户没有权限写入日志记录.
    ]# setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs
  • 使用root用户启动portmap服务(这是centos6中的叫法,centos6中的叫rpcbind服务)
    ]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
  • 使用代理拥护启动nfs3
    ]# sudo -u nfsuser ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
    注意: portmap相当于CentOS中的rpcbind服务,它必须优先于nfs服务启动
  • 启动一台主机,并安装nfs-utils
    ]# yum -y install nfs-utils
  • 挂在nfs
    ]# mount -t nfs -o vers=3,proto=tcp,noatime,nolock,sync,noacl 192.168.1.65:/ /mnt/
    vers=3 目前nfs只能使用v3版本
    proto=tcp 仅适用TCP作为传输协议
    nolocl 不支持NLM
    notime 禁用access time的时间更新
    noacl 禁用acl扩展权限
    sync 它可以最小化避免重排序写入造成不可预测的吞吐量,未指定同步选项可能会导致上传大文件时出现不可靠行为

出现的问题

NFS挂载失败

分析原因: nfs3不是代理用户启动或是启动顺序出现错误
解决方案:

  • 使用代理用户启动nfs3
  • 先使用root用户启动portmap,在使用代理用户启动nfs3

猜你喜欢

转载自blog.csdn.net/yuan156941828/article/details/102639325