我正在编写一个在hadoop集群上运行的python代码,需要在一个文件中存储一些中间数据。因为我想在集群上运行代码,所以我想将中间数据写入 /tmp
hdfs上的目录。我将在下一步使用该文件后立即将其删除。我该怎么做?
我知道我可以用 subprocess.call()
但我该如何将数据写入文件?我要写的数据在一个列表中。
我尝试了以下语法:
for item in mylist:
subprocess.call(["echo '%s' | hadoop fs -put - /tmp/t"%item], shell=True)
它写得很好,但这里有一个问题:对于第二个记录,它抛出一个错误 /tmp/t
已经存在。
有办法吗?
2条答案
按热度按时间eivnm1vs1#
只需将“-put”更改为“-appendtofile”:
ev7lccsx2#
您正面临这个错误,因为hdfs在从shell写入时无法追加文件。每次要转储文件时,都需要创建新文件。
更好的方法是使用python hdfs客户机来完成转储。我可以推荐snakebite、pydoop和hdfs软件包。我还没有试过第三个,所以我不能评论他们,但其他两个工作的罚款。