我正在使用mget参数使用lftp从远程位置复制文件到本地计算机。然后,我正在使用hdfs dfs -cp localfolder/localfile to hdfsLocation
。我希望能够将这些文件复制到HDFS,而不必将其存储在本地计算机上。
我已经尝试了下面的代码,但我想通过本地计算机绕过该副本。我也尝试过这个
subprocess.Popen("""lftp sftp://login:password@adressLocal -e "lcd hdfs://serverHDFS:8020/projects/folder/child/tmp/;mget /var/projects/stockage/folder/child/.success/"""+fileName.ext+""";bye " """,
shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
但是它不起作用
感谢您的帮助
import os
import subprocess
s=subprocess.Popen("""lftp sftp://login:password!@adress-e "lcd /projects/folder/child/tmp/;mget /var/projects/stockage/folder/child/.success/"""+fileName.ext+""";bye " """,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
cmd = 'hdfs dfs -put /var/projects/folder/file.ext hdfs://server:8020/projects/folder/tmp/'
subprocess.call(cmd, shell=True)
我建议您安装Apache Nifi,Streamsets或KNIME,它们可以将FTP内容图形传输到HDFS(以及其他更高级的ETL工作负载)
Streamsets或KNIME将在幕后为您生成Spark代码