使用场景

Spark 需要在Driver和Executor之间共享一些Jar和File。比如在注册UDF时,需要让Jar能在集群之间共享。虽然可以通过http、https或者ftp的方式来拉取,但是有时候Jar和File会比较大。所以最好的方式是使用本地共享存储,也是官方所推荐的方式。当使用共享存储时,集群中每个工作节点都可以像读取本地文件一样的读取Jar和File。
NFS作为Centos 7自带的共享存储软件,配置起来比较简单,能满足使用需求。接下来是配置方法。


1、NFS服务端配置

1.1 选择NFS服务器并建立共享目录

在集群中随便选择一台节点作为NFS服务器。在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。

  1. [root@master ~]# mkdir /nfsFile
  2. [root@master ~]# chmod -Rf 777 /nfsFile
  3. [root@master ~]# echo "welcome to nfs area" > /nfsFile/readme

1.2 修改配置文件

NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。下面的示例为共享给slave1和slave2两个客户端。

  1. /nfsFile slave1(rw,sync,root_squash)
  2. /nfsFile slave2(rw,sync,root_squash)

参数含义:

参数 含义
rw 读写
sync 同时将数据写入到内存和磁盘,保证数据不丢失。
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户

1.3 启动NFS服务程序

由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。

  1. [root@master ~]# systemctl restart rpcbind
  2. [root@master ~]# systemctl enable rpcbind
  3. [root@master ~]# systemctl start nfs-server
  4. [root@master ~]# systemctl enable nfs-server

2、NFS客户端配置

NFS客户端的配置步骤也十分简单。先在NFS客户端使用showmount命令查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

  1. [root@slave1 ~]# showmount -e NFS服务端IP地址
  2. Export list for master:
  3. /nfsFile slave1,slave2

然后在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。

  1. [root@slave1 ~]# mkdir /nfsFile
  2. [root@slave1 ~]# mount -t nfs master:/nfsFile /nfsFile

挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:

  1. [root@slave1 ~]# cat /nfsFile/readme
  2. welcome to nfs area
  3. [root@slave1 ~]# vim /etc/fstab
  4. #
  5. # /etc/fstab
  6. # Created by anaconda on Wed May 4 19:26:23 2017
  7. #
  8. # Accessible filesystems, by reference, are maintained under '/dev/disk'
  9. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  10. #
  11. /dev/mapper/rhel-root / xfs defaults 1 1
  12. UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
  13. /dev/mapper/rhel-swap swap swap defaults 0 0
  14. /dev/cdrom /media/cdrom iso9660 defaults 0 0
  15. # 以下为追加的配置
  16. master:/nfsFile /nfsFile nfs defaults 0 0