当前位置: 首页 > 知识库问答 >
问题:

如何将文件从FTP服务器增量复制到Hadoop HDFS

郑狐若
2023-03-14

我们有一个FTP服务器,每天都有很多文件上传到FTP服务器,我需要在HDFS中复制所有这些文件。

每次只应下载增量文件,即首次下载10个文件后,FTP上载了5个新文件;在作业的下一次迭代中,它应该只下载HDFS中的新5个文件。

我们没有使用Nifi或Kafka连接。

我们有什么好的解决方案来完成这项任务吗?

共有1个答案

夏侯涵映
2023-03-14

您可以在LFTP作业中使用touch文件来实现这一点,下面是我的解释和代码。查看每个步骤的注释。

#!bin/bash
#SomeConfigs
TOUCHFILE='/somepath/inYourLocal/someFilename.touch'
RemoteSFTPserverPath='/Remote/Server/path/toTheFiles'
LocalPath='/Local/Path/toReceiveTheFiles'
FTP_Server_UserName='someUser'
FTP_Server_Password='SomePassword'
ServerIP='//127.12.11.35'

#Transfer files from FTP Server #This is the main command
ftp_command="lftp -e 'mirror --only-missing --newer-than=${TOUCHFILE} --older-than=now-2minutes --parallel=4 --no-recursion --include "SomeFileName*.csv"  ${RemoteSFTPserverPath}/ ${LocalPath}/;exit' -u ${FTP_Server_UserName},${FTP_Server_Password} sftp:${ServerIP}"

#CommandToexecute The Job
eval ${ftp_command}

#After finishing the lftp job You have to update the touch file for the next job
#This will update to current timestamp
touch /somepath/inYourLocal/someFilename.touch

#If you want to update with the last file received time
TchDate=$(stat -c %y "$(ls -1t ${LocalPath} | head -n1)" | date)
touch -d ${TchDate} /somepath/inYourLocal/someFilename.touch

#Stat on latest file in remote server #You can do this way also
TchDate=$(ssh -o StrictHostKeyChecking=no ${FTP_Server_UserName}@${FTP_Server_Password} "stat -c %y \"$(ls -1t ${RemoteSFTPserverPath}/ | head -n1)\" | date")
touch -d ${TchDate} /somepath/inYourLocal/someFilename.touch

#Once you have the files in your local you can copy them to hdfs

hdfs dfs -put -f /Local/Path/toReceiveTheFiles/*.csv /HDFS/PATH

#Remove the files in local so that you can accommodate for the upcoming files
rm -r -f /Local/Path/toReceiveTheFiles/*.csv

在LFTP作业中,您有很多选项man lftp将是您最好的来源

 类似资料:
  • 问题内容: 我创建了一个从有权访问的FTP服务器下载文件的功能。如何将文件上传回FTP服务器? 以下是我使用的download_files方法: 问题答案: 使用Apache Commons Net库中的FTPClient类。 这是一个带有示例的代码段: 摘录自http://www.kodejava.org/examples/356.html

  • 我正在尝试将文件上载到FTP服务器 正如我在这里发现的,如何将文件上传到FTP服务器?,我有以下代码:

  • 我试图从客户端复制文件到服务器,在Java,像这样: 客户: 服务器: 当我跑步时,我得到: 但什么都没发生。这是我第一次使用客户机服务器,我不确定自己出了什么问题。 请帮帮忙。谢谢你。

  • 问题内容: 是否可以使用ajax将文件从浏览器升级到FTP服务器? 问题答案: 不会。浏览器不提供允许从JavaScript写入FTP的API。 您可以将文件发布到HTTP端点,然后使用服务器端代码将其推送到FTP服务器。

  • 问题内容: 我们将Jenkins服务器用于日常构建过程,并通过SSH在远程主机上执行一些bash脚本。该脚本在远程主机上生成html日志文件。 我们正在使用“ 复制到从属”插件来复制从属计算机上的文件,并使用“ 通过ssh插件进行发布”来管理构建过程中的SSH会话。 现在的问题是,我们要将一些文件(脚本的日志文件)从远程ssh主机复制到Jenkins服务器。这将是可能的并且是相同的更好的选择(如果

  • 我使用Sabre DAV在PHP中实现了一个webdav目录,用于我的网站(Application Server Webinterface)。 对于这个网站,我现在使用C#编写了一个TCP套接字,它运行在另一个服务器上(实际上它在同一个数据中心,但从理论上讲,它在另一个半球上)。 我想连接我的网络Dav到我的套接字的FTP服务器,这意味着文件监听,下载,上传。用户只能连接到一个服务。想象一下,我的