gpt4 book ai didi

python - 在 python 代码中使用 hadoop fs -put 命令将文件从本地文件系统传输到 hdfs 的问题

转载 作者:可可西里 更新时间:2023-11-01 16:08:54 31 4
gpt4 key购买 nike

我在 python 中使用这段代码,它从文件中读取记录,对它们进行一些处理,然后将结果写入一个新文件。然后我将文件从我的本地文件系统传输到 hdfs:

read = open('file_read.txt', 'r')

for line in read:
fields = line.split('|')
columns.append(fields)

category = [-1,1,2,3,4,5,6]
out = open('file_write.txt', 'w')

for line in columns:
out.write('{0}|{1}|{2}|{3}'.format(line[0], line[1], line[5], line[6].rstrip().replace('-','')))
for val in category:
if int(line[4]) == val:
out.write('|{0}'.format(line[2]))
else:
out.write('|')
for val in category:
if int(line[4]) == val:
out.write('|{0}'.format(line[3]))
else:
out.write('|')
out.write('\n')
str = "HADOOP_USER_NAME=hdfs hadoop fs -put file_write.txt /folder1/folder2/"
result = system(str)

问题是在传输过程中,最后几条记录中的一些从文件中丢失了。移动到 hdfs 的文件比我本地文件系统上的文件少了大约 10 条记录。我也尝试过 -moveFromLocal 但结果相同。虽然如果我从终端执行上述任何命令然后完整的文件被移动但是当我从 python 脚本中执行它时问题就来了。

为什么会出现这个问题,我该如何解决?

更新:只有当我执行 hadoop fs - put 命令上面的部分时,才会出现丢失记录的问题。如果我不执行它而只是移动简单文件,则不会发生数据丢失。我试图查看是否有任何特殊字符被插入并且可能导致最后几条记录丢失但找不到(我试图通过文件查找它们)。

最佳答案

我无法重现该问题。

$ < /dev/urandom tr -dc "\n [:alnum:]" | head -c10000000 > test.txt
$ cat python_hdfs.py
from os import system

str = "HADOOP_USER_NAME=hdfs hadoop fs -put test.txt /tmp/"
print system(str)
$ cat test.txt | wc -l
155682
$ python python_hdfs.py
0
$ hadoop fs -cat /tmp/test.txt | wc -l
155682

也许配置相关?

  • 系统调用的退出状态是0吗?您使用的是 Linux 还是 Windows?
  • 文件有多大?它只发生在这个特定的文件上,还是其他文件也发生?

关于python - 在 python 代码中使用 hadoop fs -put 命令将文件从本地文件系统传输到 hdfs 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33007761/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com