Ubuntu server 14.04下搭建NFS并挂载HDFS到本地+Samba服务器共享这个本地文件到Windows端

引题:Hadoop中HDFS是做存储的,并且远程可以通过多种方式实现文件的上传和下载到HDFS(API,NFS,FTP,,,)。现在为了解决局域网内,实时简单操作(无脑点击粘贴复制那种),将HDFS系统挂载到Hadoop本地一个目录下,然后在将这个目录通过Samba共享到Windows端,或者将这个目录挂载到linux上的其他机器上。为什么用这种方法,大家查一下Windows 7 与NFS V3不兼容的问题(因为NFS系统是操作的linux系统级别的,在linux上可是牛逼哄哄的,但是到了Windows就完了),还有就是,我们在追求好的方法或者软件的时候,却忘了自己根本的老祖宗的玩意。想到这个方法的不是我,是我的导师,我只是一个实践者,所以对我的感触还是很深的。
需要的环境:

  1. Ubuntu server 实体机,至少三台(虚拟机会出现问题)
  2. Ubuntu server 下配置好Hadoop集群
  3. Windows 测试端

实验步骤

Hadoop的环境的搭建

这个就不说了,网上资料很多,我用的是Hadoop 2.6.0系类的,我想说的是大家做实现功能的时候,其实很简单,就是浪费在了过程中,这个过程需要找好多资料和走很多弯路。

Hadoop中配置NFS并挂载HDFS

Hadoop 2.6.0 官网详细配置NFS的步骤
参考博文1
参考博文2
进入到hdfs-site.xml文件下,配置NFS

root@master:~/u/etc/hadoop# pwd
/root/u/etc/hadoop
root@master:~/u/etc/hadoop# ls hdfs-site.xml 
hdfs-site.xml
root@master:~/u/etc/hadoop# vi hdfs-site.xml

添加如下配置信息

<property>
    <name>dfs.nfs.dump.dir</name>
    <value>/hadoop/tmp/nfs</value>
</property>
<property>
    <name>dfs.nfs.rtmax</name>
    <value>1048576</value>
</property>
<property>
    <name>dfs.nfs.wtmax</name>
    <value>65536</value>
</property>
<property>
    <name>dfs.nfs.exports.allowed.hosts</name>
    <value>* rw</value>
</property>
<property>
  <name>dfs.namenode.accesstime.precision</name>
  <value>3600000</value>
</property>

大致说一下这三个配置信息,第一个是我们往HDFS中写文件的时候,一个临时存储文件的配置目录。第二个参数是在由NFS网关支持一个READ请求的字节的最大大小,第三个参数是在由NFS网关支持的WRITE请求的字节的最大大小,第四个参数是允许所有挂载用拥有读写权限,第五个参数是提高IO的速度的。

进入到core-site.xml文件中

root@master:~/u/etc/hadoop# pwd
/root/u/etc/hadoop
root@master:~/u/etc/hadoop# ls core-site.xml 
core-site.xml
root@master:~/u/etc/hadoop# vim core-site.xml 

添加如下信息

<property>
  <name>hadoop.proxyuser.root.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.root.groups</name>
  <value>*</value>
</property>

解释一下这些配置信息,第一个参数允许root

配置log4j.properties

root@master:~/u/etc/hadoop# pwd 
/root/u/etc/hadoop
root@master:~/u/etc/hadoop# ls log4j.properties 
log4j.properties
root@master:~/u/etc/hadoop# vim log4j.properties 

填入以下信息

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

补充一下,配置这个是为了以后在运行服务的时候,来一下debug信息,方便我们查看日志

OK,配置好NFS后,我们开始启动Hadoop的NFS
启动portmap:

root@master:~/u/etc/hadoop# hadoop-daemon.sh start portmap
starting portmap, logging to /root/u/logs/hadoop-root-portmap-master.out
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
root@master:~/u/etc/hadoop# 

启动nfs3:

root@master:~/u/etc/hadoop# hadoop-daemon.sh start nfs3
starting nfs3, logging to /root/u/logs/hadoop-root-nfs3-master.out
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
root@master:~/u/etc/hadoop# 

查看一下:

root@master:~/u/etc/hadoop# jps
8096 JobHistoryServer
1937 SecondaryNameNode
1713 NameNode
9643 Nfs3
930 Bootstrap
9721 Jps
9539 Portmap
root@master:~/u/etc/hadoop# 

以上如果有Portmap和Nfs3的话,证明启动成功。

查看网关信息:

root@master:~/u/etc/hadoop# rpcinfo -p 192.168.61.201
   program vers proto   port  service
    100005    2   tcp   4242  mountd
    100000    2   udp    111  portmapper
    100000    2   tcp    111  portmapper
    100005    1   tcp   4242  mountd
    100003    3   tcp   2049  nfs
    100005    1   udp   4242  mountd
    100005    3   udp   4242  mountd
    100005    3   tcp   4242  mountd
    100005    2   udp   4242  mountd
root@master:~/u/etc/hadoop# 

查看我们的挂载点是否可以可以挂载:

root@master:~/u/etc# showmount -e 192.168.61.201
Export list for 192.168.61.201:
/ *
root@master:~/u/etc# 

以上如果出现“/*”则证明我们的根目录可以挂载了

挂载HDFS到本地目录,首先在我们的/opt/下,新建一个文件用来作为挂载点,方便后期Samba服务器挂载,加以权限,方便操作。

root@master:~/u/etc/hadoop# mkidr /opt/hdfsnfs
root@master:~/u/etc/hadoop# chmod 777 /opt/hdfsnfs
root@master:~/u/etc/hadoop# ll /opt/
total 17
drwxr-xr-x  3 root root       4096 May 29 10:16 ./
drwxr-xr-x 23 root root       4096 May 23 17:14 ../
drwxrwxrwx 15 root supergroup  480 May 29 12:17 hdfsnfs/
-rw-r--r--  1 root root          5 May 29 09:08 xxx.tx
-rw-r--r--  1 root root          5 May 29 10:16 xxx.txt
root@master:~/u/etc/hadoop# 

以下是挂载Hadoop到/opt/hdfsnfs目录下:

root@master:~/u/etc/hadoop# mount -t nfs -o vers=3,proto=tcp,nolock,noacl 192.168.61.201:/ /opt/hdfsnfs/

挂载成功后,查看一下:

root@master:~/u/etc/hadoop# clear
root@master:~/u/etc/hadoop# cd /opt/hdfsnfs/
root@master:/opt/hdfsnfs# pwd
/opt/hdfsnfs
root@master:/opt/hdfsnfs# ll
total 57900676
drwxrwxrwx 15 root      supergroup         480 May 29 12:17 ./
drwxr-xr-x  3 root      root              4096 May 29 10:16 ../
-rw-------  1 root      root       32212254720 May 24 16:09 d267f45c-f500-fc23-32c2-daa8909d8276
drwxr-xr-x  2 root      supergroup          64 May 24 09:49 data/
-rwxr--r--  1 root      supergroup   293297709 May 29 09:37 dreamweavercs6.zip*
-rwxr-xr-x  1 root      supergroup   272449361 May 24 15:20 girl.wmv*
-rwxr-xr-x  1 root      supergroup      842558 May 24 10:31 HadoopDrive_1.3.0.582.exe*
-rwxr--r--  1 sambauser supergroup       53472 May 29 09:41 HDFS用户指南(Hdfs_user_guide)0.21_中文版.doc*
drwxrwx---  4 root      supergroup         128 May 29 12:08 history/
-rwxr--r--  1 sambauser supergroup   396347126 Feb 11  2015 Office_Visio_Pro_2007.zip*
-rwxr--r--  1 sambauser supergroup   601886720 Mar 20 15:11 ubuntu-14.04.3-server-amd64.iso*
-rwxr--r--  1 sambauser supergroup 24462757888 May  9  2015 win7-juding.img*
-rw-r--r--  1 root      supergroup           5 May 29 09:19 xxx.tx
-rw-r--r--  1 root      supergroup           5 May 29 10:27 xxx.txt
-rwxr--r--  1 sambauser supergroup  1050394166 May 12 21:29 小象《Hadoop 2.X大数据平台V3》(价值499).rar*
root@master:/opt/hdfsnfs# 

ok出现以上信息,则证明把HDFS挂载到了本地,这时,可以进行上传,下载和下载的操作,以及其他Hadoop支持的操作。(注意:我以前在虚拟中配置成功后,我拷贝一个本地大文件(大约100M)到这个共享目录下,直接卡死,Hadoop直接崩了,只能重启机器,这个还是在服务器的虚拟机。后来问了网工的大神,才知道,在服务器上,机器被虚拟出来,但是进行一些操作的时候,还是访问的是同一个硬盘,CPU,内存,这样的话,来回真的开销太大,大文件当然卡死了,这就是我说为什么最好不要在虚拟中做这个实验。)

搭建Samba服务器

参考博文1
更新apt-get源:

root@master:/opt/hdfsnfs# apt-get update 

安装Samba:

root@master:/opt/hdfsnfs# apt-get update 

修改Samba配置文件smb.conf:

root@master:/opt/hdfsnfs# cd /etc/samba/
root@master:/etc/samba# pwd 
/etc/samba
root@master:/etc/samba# ls
gdbcommands  smb.conf  tls
root@master:/etc/samba# vim smb.conf 

在文件最后添加如下字段:

security = user
[myshare]
 comment = Xyj's samba test file .
 path = /opt/hdfsnfs
 browseable = yes
 writable = yes

简单描述一上以上配置,这个配置就是让我们的Samba用户在Windows共享访问的文件路径,同时也和我们挂载HDFS到本地的路径一样。这样才能实现Windows访问Hadoop的HDFS系统。
接下来添加Samba用户:

root@master:/etc/samba# useradd sambauser
root@master:/etc/samba# smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
root@master:/etc/samba# 

以上是添加一个sambauser用户,密码是123456,需要输入两遍,以便用户在Windows上登录Samba服务的验证。

Windows上测试效果

好了,终于到了激动人心的时刻了,我们开始测试了。
在Windows上,”运行”窗口中输入”\192.168.61.201”–>回车–>双击打开myshare–>回车–>输入用户名:sambauser和密码:123456–>回车–>访问成功。此时,我们见到的文件目录和/opt/hdfsnfs/目录下的文件应该是一样的。然后测试文件的上传和下载,还有其他各种测试,大家如果搭建成功,则可以happy的玩玩了。

大家注意
其实这个系统还是有bug的,我在上传一个20G的文件的时候,前期都是50M左右的速度,如果中间有其他上传文件,则网卡网速被均分。在传到最后的时候,出现卡顿现象,就是samba服务器一直处于接受Hadoop返回结束信息,但是接收不到,就一直卡到这,此时查看Ubuntu server的内存,IO,都是满载,内存是150%的超载,此时Hadoop服务器处于超卡状态,然后过了一会,就没事了,发现文件上传成功,大小不变。这个问题大家可以测试解决一下,我也开始测试解决,成功的话,见我的后续博文。

你可能感兴趣的:(hadoop,samba挂载,NFS挂载HDFS)