使用NFSv3将HDFS挂载到本地

来源:互联网 发布:合肥市行知学校怎么样 编辑:程序博客网 时间:2024/05/16 09:26

版本环境:hadoop-2.6.0,jdk 1.7.0_79,centOS 7

教程参考英文网址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html

这里需注意的是,此教程中的一些命令针对的是 hadoop-2.6 和 2.7 版本,与英文教程上 hadoop-2.5.2 的命令不一样的(混合使用不能成功挂载)

首先搭建一个HDFS文件系统,成功搭建的结果如下:




接下来是再次对HDFS的配置文件core-site.xml和hdfs-site.xml进行增加内容:

首先是在core-site.xml文件中增加的配置项:

<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>


这里根据实际情况需要做一些更改,更改内容自行比对,以下更改的内容是能成功挂载的:

<property>  <name>hadoop.proxyuser.root.groups</name>  <value>*</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.root.hosts</name>  <value>*</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>

其中 value 中的两个* 号,第一个是允许所有用户组对此 HDFS 文件系统进行挂载,第二个 * 号为允许任何用户做 HDFS 的代理,因为暂时做简单的挂载教程,所以这样设置了,读者可根据自己的实际情况自行设置用户组和代理用户,注意这里的代理用户指的是 localhost 也就是代理用户的网络IP地址。


一下是hdfs-site.xml 配置文件的增加选项:

<property>  <name>nfs.superuser</name>  <value>the_name_of_hdfs_superuser</value></property><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><property>    <name>nfs.dump.dir</name>    <value>/tmp/.hdfs-nfs</value></property><property>  <name>nfs.exports.allowed.hosts</name>  <value>* rw</value></property>

更改之后的内容如下,变化自己比对:

<property>  <name>nfs.superuser</name>  <value>hou</value></property><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><property>    <name>nfs.dump.dir</name>    <value>/tmp/.hdfs-nfs</value></property><property>  <name>nfs.exports.allowed.hosts</name>  <value>10.19.155.* rw</value></property>

这里我自己的centos7用户是hou,然后网络环境是:

IP:10.19.155.41

netmask:255.255.255.0

gateway:10.19.155.254

DNS:10.16.5.88


然后是修改 log4j.properties 文件,有些hadoop 环境是 log4j.property,在此文件的最后增加两行:

log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG

log4j.logger.org.apache.hadoop.oncrpc=DEBUG
至于为何增加这两句,看原英文网址。
至此,需要增加的配置就全部完成了,保存文件后需要重启 namenode,保险起见最好全部重启。
然后开始在HDFS上启动 NFSv3,首先要关闭centos自带的 nfs 进程和 portmap 进程,这里需注意的是在centos 7中 portmap的功能被 rpcbind 取代,所以如果是 centos7 操作系统就关闭 rpcbind ,centos关闭命令如下:
[root]> service nfs stop[root]> service rpcbind stop
对于结果可以使用一下命令来查看是否还存在rpc进程:

[root]> rpcinfo -p $nfs_server_ip


然后开启 hadoop自带的 portmap 进程:

[root]> $HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs start portmap
[hou]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs start nfs3
同样,停止命令如下:
[hou]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs stop nfs3[root]> $HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs stop portmap

然后再使用:
[root]> rpcinfo -p $nfs_server_ip
来查看现在的 rpc 挂载情况:
接下来是将HDFS 文件系统挂载到本地文件夹上,当然要新建一个本地文件夹用来挂载,这里用的是 /mnt/hdfs,centos 挂载命令如下:

[root]>mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync $server:/  $mount_point

对于我自己的网络环境,挂载命令是:
sudo mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync 10.19.155.41:/ /mnt/hdfs/
其中的三个选项,nolock是必须的。
成功挂载 NFSv3 后就可以在本地文件夹实现 HDFS 文件系统的同步了:
在挂载成功后也可以使用:showmount -e localhost 来查看所有有权限的挂载用户情况:
使用:showmount -a localhost 来查看已经挂载到 HDFS 文件系统上的用户情况:
在一个局域网内的windows 系统挂载 centos7 的 HDFS 文件系统使用命令:
net use X: \\10.19.155.41\!
结束挂载点:
net use X: /del
其中X:为在windows 磁盘上的挂载点。

这里暂时存在的问题是,可以通过复制或者拖拽的方式向windows上挂载成功的 HDFS 文件系统进行写操作,但是不能直接在 X:盘也就是挂载的 HDFS文件系统中直接修改文件内容,linux 客户端不存在此现象,因为在linux系统中存在的权限映射在 windows系统中是不存在的,因此 windows想要对运行在linux操作系统的文件进行写操作的时候会遇到写权限问题,问题待解决。

                                             
0 0
原创粉丝点击