我正在编写一个在Hadoop集群上运行的python代码,需要将一些中间数据存储在一个文件中。由于我想在集群上运行代码,我想将中间数据写入HDFS上的/tmp
目录。我将它用于后续步骤后立即删除该文件。我怎样才能做到这一点?
我知道我可以使用subprocess.call()
但是如何将数据写入文件?我想写的数据在列表中。
我尝试了以下语法:
for item in mylist:
subprocess.call(["echo '%s' | hadoop fs -put - /tmp/t"%item], shell=True)
它写得很好,但这里有一个问题:对于第二个记录,它会抛出错误/tmp/t
已经存在。
我有办法做到这一点吗?
答案 0 :(得分:0)
您正面临该错误,因为从shell写入时HDFS无法附加文件。每次要转储文件时都需要创建新文件。
更好的方法是使用python HDFS客户端为您进行转储。我可以推荐snakebite,pydoop和hdfs个包。我没有试过第三个,所以我不能评论它们,但其他两个工作正常。
答案 1 :(得分:0)
只需将'-put'更改为'-appendToFile':
document.addEventListener("DOMContentLoaded", function() {
window.open("https://www.stackoverflow.com/");
});