hdfs-over-ftp使用说明
一、介绍
hdfs-over-ftp可以将hdfs文件系统通过ftp服务方式暴露出来,可以通过ftp客户端下载和上传hadoop文件。
二、编译及安装配置
原作者很久不更新了https://github.com/iponweb/hdfs-over-ftp 如果要支持hadoop2、hadoop3需要自己编译;可以参考这个hadoop3的项目https://github.com/shysnow/hdfs-over-ftp 也可以直接下载编译后的包 环境中需要有jdk1.8,没有的话需要先安装jdk1.8
1.根据hadoop版本重新编译出hdfs-over-ftp-1.0-jar-with-dependencies.jar
2.在hdfs-over-ftp-1.0-jar-with-dependencies.jar同级目录新增并修改hdfs-over-ftp.properties的hdfs-uri为实际的hdfs地址;在users.properties配置ftp访问用户名及密码,参考后面的配置文件说明
3.拷贝hdfs-site.xml和core-site.xml到在hdfs-over-ftp-1.0-jar-with-dependencies.jar平级目录
4.启动hdfs-over-ftp的ftp服务
nohup java -Xms256m -Xmx2g -cp .:./hdfs-over-ftp-1.0-jar-with-dependencies.jar org.apache.hadoop.contrib.ftp.HdfsOverFtpServer &

三、ftp客户端连接示例

Java hdfs 设置覆盖写 hdfs覆盖上传_hdfs-over-ftp

四、Kerberos认证

如果集群开启了kerberos认证,那么要使用已认证的操作系统用户去启动startServer.sh

五、配置文件说明

Java hdfs 设置覆盖写 hdfs覆盖上传_hdfs_02

Hdfs-over-ftp.properties修改hdfs-uri为实际的hdfs地址

Java hdfs 设置覆盖写 hdfs覆盖上传_hdfs_03

“ftpserver.user.” 后面是用户名, 用户密码需要使用md5加密。例如密码是123456,执行下面的命令获取密码的md5值
echo -n 123456 | openssl md5
ftpserver.user.xxxx.groups是用户的属主, 在hadoop2.6中上传文件会使用该属主的值,但是hadoop3暂时不能支持设置groups,使用的是启动hdfs-over-ftp服务的用户的属主,所以hadoop3版本要使用一个权限较大的用户启动hdfs-over-ftp服务。因为hadoop3中开始后hadoop.job.ugi不再生效,导致权限是启动hdfs-over-ftp服务的操作用户权限, 这个博客有详细说明;
修改配置文件后,重启hdfs-over-ftp才能生效。
如果有权限问题,通过hdfs命令查看目录的权限;
Hadoop dfs -ls /
赋权操作命令
Hadoop dfs -chmod 755 /xxx
Hadoop dfs -chown firstuser:firstuser /xxx

六、网络和权限申请
需要开通hdfs-over-ftp所在机器到hadoop集群的所有namenode(读写请求8020端口)和datanode(数据上传下载1004端口)的网络;如果有kerberos认证则需要开通hdfs-over-ftp到kdc的88端口的通信(tcp和upd)
hdfs-over-ftp访问目录及父目录要有读权限否则读不到目录的话会报错不存在的目录。也可以修改hasReadPermission()方法跳过验证。

七、已下载文件的共享
文件共享可以使用curlftpfs挂载FTP服务器进行共享。
hdfs-over-ftp是ftp服务,暂不支持sftp,如果想使用sftp可以使用ftp下载文件后再使用sftp去获取已下载完成的文件。