有没有办法使用 python 脚本将特定的平面文件(.txt 或 .csv)提取到 HDFS 中

Is there a way to ingest specific flat file(.txt or .csv) into HDFS using python script

我正在尝试将本地系统中的平面文件加载到 HDFS 存储。 实际上我们有 GB 的数据要上传到 hadoop 内部 table。 我们使用传统流程来加载数据,例如从文件中读取数据并拆分成小块,然后使用来自 python 的配置单元查询将每个块加载到内部 table。此过程需要数小时才能加载到 table。

我需要一种有效的方法来减少从文件加载数据到 hadoop 的时间 table。在 google 中搜索时,我发现我们可以将文件上传到 hdfs 存储,然后我们可以从那里将数据加载到 table。但我必须使用 python 上传文件,以便它可以自动化。

谁能帮我找出一个好的方法。

您需要将文件处理交给 hadoop FS 而不是在 python 上进行。为了将数据加载到 hadoop FS 中,您可以使用 hadoop shell

hadoop fs -copyFromLocal <local directory>/file.csv <hadoop directory>

您可以在 python 中使用 subprocess

触发此命令
import subprocess

proc = subprocess.Popen(['hdfs', 'dfs', '-copyFromLocal', '<local directory>/file.csv', '<hadoop directory>'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
s_output, s_err = proc.communicate()
s_return =  proc.returncode

一旦您的文件位于 hadoop 文件系统中,您就可以创建一个外部配置单元 table,在文件之上定义一个架构。

create external table table_name(
 col1 string,
 col2 string,
 ...
 ...
) row format delimited
fields terminated by ','
location '<hadoop directory>'

接下来从外部读取table,执行速度会快很多

参考: