使用httr(在R上)将一个空主体放到webHDFS

使用httr(在R上)将一个空主体放到webHDFS,r,hadoop,curl,hdfs,webhdfs,R,Hadoop,Curl,Hdfs,Webhdfs,当试图将文件放入WebHDFS以创建并写入文件时(使用以下链接:),我在使用httr时遇到了问题 因为目标Hadoop集群是安全的,所以不可能使用RCurl或RWebHDFS 以下是我尝试使用的代码: library(httr) r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&p

当试图将文件放入WebHDFS以创建并写入文件时(使用以下链接:),我在使用
httr
时遇到了问题

因为目标Hadoop集群是安全的,所以不可能使用RCurl或RWebHDFS

以下是我尝试使用的代码:

library(httr)
r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&permission=755&user.name=testuser", 
          authenticate(":", "", type = "gssnegotiate"),
          verbose())
这个错误很容易解释,因此我尝试使用一个内容类型:

r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&permission=755&user.name=testuser", 
          authenticate(":", "", type = "gssnegotiate"),
          content_type("application/octet-stream"),
          verbose())
位置
标题之后,我们可以成功创建文件

我做错了什么


感谢您的出色工作,包括
curl
输出。我相信这就是答案

curl
命令使用
PUT
,而
httr
命令使用
POST
。试试看


未来参考提示:
POST
如果要指定确切位置,通常不使用命令。这就是
PUT
的目的。

httr
正在尝试遵循重定向,但失败。要解决此问题,请告诉
httr
停止跟踪位置
config(followlocation=0L)

PUT命令如下所示:

r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/
          loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&permission=755&user.name=testuser", 
          authenticate(":", "", type = "gssnegotiate"),
          body=NULL,
          config(followlocation = 0L),
          verbose())

r谢谢Jason,这就是问题所在,我已经更新了原始问题,以反映我最初遇到的问题。祝你在下一个障碍中好运!不幸的是,如果没有一个最小的可行示例,很难进一步提供帮助。有没有可能建立一个测试Hadoop集群,这里的人可以尝试帮助你?e、 g.一台小的Azure/数字海洋/AWS机器,你可以在完成后摧毁它?你有没有尝试过用Wireshark捕获会话?与成功的
curl
会话相比可能会有所帮助。
<- Date: Fri, 29 Nov 2019 16:04:52 GMT
<- Cache-Control: no-cache
<- Expires: Fri, 29 Nov 2019 16:04:52 GMT
<- Date: Fri, 29 Nov 2019 16:04:52 GMT
<- Pragma: no-cache
<- Content-Type: application/json;charset=utf-8
<- X-Content-Type-Options: nosniff
<- X-XSS-Protection: 1; mode=block
<- Content-Length: 0
<- HTTP/1.1 307 Temporary Redirect
<- Date: Fri, 29 Nov 2019 16:07:24 GMT
<- Cache-Control: no-cache
<- Expires: Fri, 29 Nov 2019 16:07:24 GMT
<- Date: Fri, 29 Nov 2019 16:07:24 GMT
<- Pragma: no-cache
<- Content-Type: application/json;charset=utf-8
<- X-Content-Type-Options: nosniff
<- X-XSS-Protection: 1; mode=block
Error in curl::curl_fetch_memory(url, handle = handle) : 
  necessary data rewind wasn't possible
library(httr)
temp_file <- httr::upload_file(lfs_temp_file, type = "text/plain")
r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&permission=755&user.name=testuser", 
          authenticate(":", "", type = "gssnegotiate"),
          body=temp_file,
          content_type("application/octet-stream"),
          verbose())
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0HTTP/1.1 307 Temporary Redirect
Date: Thu, 28 Nov 2019 23:27:16 GMT
Cache-Control: no-cache
Expires: Thu, 28 Nov 2019 23:27:16 GMT
Date: Thu, 28 Nov 2019 23:27:16 GMT
Pragma: no-cache
Content-Type: application/json;charset=utf-8
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
WWW-Authenticate: Negotiate <stuff>/
Set-Cookie: hadoop.auth="<stuff>"; Path=/; Secure; HttpOnly
Location: https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/loadfile_testuser_2019-11-28_15_28_4141?op=CREATE&data=true&user.name=testuser&permission=755
Content-Length: 0
r <- PUT("https://hadoopmgr1p.global.ad:14000/webhdfs/v1/user/testuser/temp/
          loadfile_testuser_2019-11-28_15_28_41411?op=CREATE&permission=755&user.name=testuser", 
          authenticate(":", "", type = "gssnegotiate"),
          body=NULL,
          config(followlocation = 0L),
          verbose())