如何将both api中的传入文件保存到hdfs

时间:2017-09-08 21:34:37

标签: python hadoop hdfs bottle pyhdfs-client

我正在定义bottle api,我需要从客户端接受一个文件,然后将该文件保存到本地系统上的HDFS。

代码看起来像这样。

@route('/upload', method='POST')
def do_upload():
    import pdb; pdb.set_trace()
    upload = request.files.upload
    name, ext = os.path.splitext(upload.filename)

    save_path = "/data/{user}/{filename}".format(user=USER, filename=name)

    hadoopy.writetb(save_path, upload.file.read())
    return "File successfully saved to '{0}'.".format(save_path)

问题是,request.files.upload.filecStringIO.StringO类型的对象,可以使用str方法转换为.read()。但是hadoopy.writetb(path, content)期望内容是其他格式,服务器会坚持这一点。它不会给出异常,它不会给出错误或任何结果。就好像它处于无限循环中一样站在那里。

有谁知道如何将传入的文件写入瓶子API到HDFS?

1 个答案:

答案 0 :(得分:0)

hadoopy documentation开始,看起来int的第二个参数应该是可迭代的对;但你传递的是字节数。

  

... hadoopy.writetb命令,它接受键/值对的迭代器......

你试过传递一对吗?而不是你在做什么,

writetb

试试这个:

hadoopy.writetb(save_path, upload.file.read())  # 2nd param is wrong

(我不熟悉Hadoop,所以我不清楚hadoopy.writetb(save_path, (path, upload.file.read())) 的语义是什么,但可能对知道HDFS的人有意义。)