问题:
我开始学习hadoop,但是,我需要使用python将很多文件保存到hadoop中。我似乎不知道我做错了什么。有人能帮我吗?
下面是我的代码。我认为 HDFS_PATH
是正确的,因为我在安装时没有在设置中更改它。这个 pythonfile.txt
在我的桌面上(通过命令行运行的python代码也是如此)。
代码:
import hadoopy
import os
hdfs_path ='hdfs://localhost:9000/python'
def main():
hadoopy.writetb(hdfs_path, [('pythonfile.txt',open('pythonfile.txt').read())])
main()
当我运行上面的代码时,我得到的只是python本身的一个目录。
iMac-van-Brian:desktop Brian$ $HADOOP_HOME/bin/hadoop dfs -ls /python
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
14/10/28 11:30:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
-rw-r--r-- 1 Brian supergroup 236 2014-10-28 11:30 /python
3条答案
按热度按时间vtwuwzda1#
我感觉您正在写入一个名为“/python”的文件,而您希望它是存储该文件的目录
是什么
给你看?
如果它显示文件内容,则只需编辑hdfs\u路径以包含文件名(应首先使用-rm删除/python),否则,请使用pydoop(pip install pydoop)并执行以下操作:
tag5nh1u2#
我在这里找到了答案:
2ledvvac3#
这是一个非常典型的任务
subprocess
模块。解决方案如下所示:完整示例
假设您在服务器上,并且与hdfs有一个经过验证的连接(例如,您已经调用了
.keytab
).您刚刚从一个
pandas.DataFrame
想把它放到hdfs里。然后可以按如下方式将文件上载到hdfs:
csv文件将存在于
/user/<your-user-name/saved_file.csv
.注意-如果您从一个在hadoop中调用的python脚本创建了这个文件,那么中间csv文件可能存储在一些随机节点上。因为这个文件(大概)不再需要了,所以最好删除它,以免每次调用脚本时污染节点。您只需添加
os.remove(file_name)
作为上面脚本的最后一行来解决这个问题。