我正在使用lftp和mget参数将文件从远程位置复制到本地计算机。那我就用 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)
1条答案
按热度按时间33qvvth11#
我建议您安装apachenifi、streamset或knime,它们允许您以图形方式将ftp内容传输到hdfs(以及其他更高级的etl工作负载)
streamset或knime将在幕后为您生成spark代码