【发布时间】:2014-07-22 12:07:35
【问题描述】:
我正在尝试使用 C# 应用从 Hadoop 集群上传/下载文件,但我在文档中找不到用于上传和下载的 API。
那么您能告诉我如何使用 RestAPIs 从 Hadoop 上传和下载文件吗?
谢谢
【问题讨论】:
-
下载是打开/读取,上传是创建/写入/追加,它使用文件系统术语
我正在尝试使用 C# 应用从 Hadoop 集群上传/下载文件,但我在文档中找不到用于上传和下载的 API。
那么您能告诉我如何使用 RestAPIs 从 Hadoop 上传和下载文件吗?
谢谢
【问题讨论】:
您可以使用此处描述的 WebHDFS REST API http://hadoop.apache.org/docs/r1.0.4/webhdfs.html
编辑:
创建并写入文件
第 1 步:
提交一个 HTTP PUT 请求而不自动跟随重定向并且不发送文件数据。
curl -i -X PUT "http://:/webhdfs/v1/?op=CREATE [&overwrite=][&blocksize=][&replication=] [&permission=][&buffersize=]"
请求被重定向到要写入文件数据的数据节点: HTTP/1.1 307 TEMPORARY_REDIRECT 位置:http://:/webhdfs/v1/?op=CREATE... 内容长度:0
第 2 步:
使用 Location 标头中的 URL 提交另一个 HTTP PUT 请求以及要写入的文件数据。
curl -i -X PUT -T “http://:/webhdfs/v1/?op=CREATE...”
客户端收到 201 Created 响应,内容长度为零,并且 Location 标头中包含文件的 WebHDFS URI: HTTP/1.1 201 创建 位置:webhdfs://:/ 内容长度:0
请注意,有两步创建/追加的原因是为了防止客户端在重定向之前发送数据。 HTTP/1.1 中的“Expect: 100-continue”标头解决了这个问题;请参阅 RFC 2616,第 8.2.3 节。不幸的是,存在软件库错误(例如 Jetty 6 HTTP 服务器和 Java 6 HTTP 客户端),它们没有正确实现“Expect: 100-continue”。两步创建/追加是软件库错误的临时解决方法。
【讨论】: