WebHDFS FileNotFoundException 其余 api
WebHDFS FileNotFoundException rest api
我 post 这个问题是 post webhdfs rest api throwing file not found exception
的延续
我有一个图像文件,我想通过 WebHDFS rest 打开 api。
- 该文件存在于 hdfs 中并具有适当的权限
- 我可以
LISTSTATUS
该文件并得到答案:
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=LISTSTATUS"
HTTP/1.1 200 OK
Date: Fri, 17 Jul 2020 22:47:29 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 22:47:29 GMT
Date: Fri, 17 Jul 2020 22:47:29 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
{"FileStatuses":{"FileStatus":[
{"accessTime":1594828591740,"blockSize":134217728,"childrenNum":0,"fileId":11393739,"group":"hdfs","length":104811,"modificationTime":1594828592000,"owner":"XXXX","pathSuffix":"XXXX","permission":"644","replication":3,"storagePolicy":0,"type":"FILE"}
]}}
Content-Type: application/octet-stream
Content-Length: 0
- 因此 api 可以正确读取元数据,但我无法打开该文件:
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=OPEN"
HTTP/1.1 307 Temporary Redirect
Date: Fri, 17 Jul 2020 22:23:17 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 22:23:17 GMT
Date: Fri, 17 Jul 2020 22:23:17 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Location: http://datanode1:50075/webhdfs/v1/tmp/file.png?op=OPEN&namenoderpcaddress=namenode:8020&offset=0
Content-Type: application/octet-stream
Content-Length: 0
{"RemoteException":{"exception":"FileNotFoundException","javaClassName":"java.io.FileNotFoundException","message":"Path is not a file: /tmp/file.png......
- 因此,根据 webhdfs rest api throwing file not found exception,我可以看到请求从名称节点传递到数据节点 1。
Datanode1 在我的主机文件中,我可以连接到它并从那里检查 webhdfs 的状态:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<final>true</final>
</property>
允许,在namenode上也是如此。
我也去看了/var/log/hadoop/hdfs/*.{log,out}
上的hdfs日志,看看能不能发现我卷曲时触发的错误,但似乎什么也没有发生。我没有看到与我的文件或 webhdfs 查询有关的条目。我在 namenode 和 datanode1 上试过了。
作为最后的努力,我尝试将权限(不理想)从 644(见第 2/ 点)增加到 666
hdfs dfs -chmod 666 /tmp/file.png
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=LISTSTATUS"
HTTP/1.1 403 Forbidden
Date: Fri, 17 Jul 2020 23:06:18 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 23:06:18 GMT
Date: Fri, 17 Jul 2020 23:06:18 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
{"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException","message":"Permission denied: user=XXXX, access=READ_EXECUTE, inode=\"/tmp/file.png\":XXXX:hdfs:drw-rw-rw-"}}
所以它似乎完成了切换,但不知何故我在放宽我以前没有获得的当前权限时遇到了权限问题?这不像是我删除了 X 标志,它一开始就不存在。 access=READ_EXECUTE 是否同时需要 R 和 X?
现在我很困惑为什么我可以看到但不能用HDFS读取这个文件。有人可以帮我解决这个问题吗?
仔细查看您的上一个错误,
... inode=\"/tmp/file.png\":XXXX:hdfs:drw-rw-rw-"}
,它似乎表明 file.png
实际上是一个目录(前导 d
符号)而不是文件。这与您在步骤 #3 *..."message":"Path is not a file: /tmp/file.png....
中遇到的错误一致
您可以通过 $ hdfs dfs -ls /tmp/file.png/
.
再次检查
回到您的访问错误,您确实需要“执行”(x
) 权限才能列出目录中的文件。
我 post 这个问题是 post webhdfs rest api throwing file not found exception
的延续我有一个图像文件,我想通过 WebHDFS rest 打开 api。
- 该文件存在于 hdfs 中并具有适当的权限
- 我可以
LISTSTATUS
该文件并得到答案:
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=LISTSTATUS"
HTTP/1.1 200 OK
Date: Fri, 17 Jul 2020 22:47:29 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 22:47:29 GMT
Date: Fri, 17 Jul 2020 22:47:29 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
{"FileStatuses":{"FileStatus":[
{"accessTime":1594828591740,"blockSize":134217728,"childrenNum":0,"fileId":11393739,"group":"hdfs","length":104811,"modificationTime":1594828592000,"owner":"XXXX","pathSuffix":"XXXX","permission":"644","replication":3,"storagePolicy":0,"type":"FILE"}
]}}
Content-Type: application/octet-stream
Content-Length: 0
- 因此 api 可以正确读取元数据,但我无法打开该文件:
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=OPEN"
HTTP/1.1 307 Temporary Redirect
Date: Fri, 17 Jul 2020 22:23:17 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 22:23:17 GMT
Date: Fri, 17 Jul 2020 22:23:17 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Location: http://datanode1:50075/webhdfs/v1/tmp/file.png?op=OPEN&namenoderpcaddress=namenode:8020&offset=0
Content-Type: application/octet-stream
Content-Length: 0
{"RemoteException":{"exception":"FileNotFoundException","javaClassName":"java.io.FileNotFoundException","message":"Path is not a file: /tmp/file.png......
- 因此,根据 webhdfs rest api throwing file not found exception,我可以看到请求从名称节点传递到数据节点 1。 Datanode1 在我的主机文件中,我可以连接到它并从那里检查 webhdfs 的状态:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<final>true</final>
</property>
允许,在namenode上也是如此。
我也去看了
/var/log/hadoop/hdfs/*.{log,out}
上的hdfs日志,看看能不能发现我卷曲时触发的错误,但似乎什么也没有发生。我没有看到与我的文件或 webhdfs 查询有关的条目。我在 namenode 和 datanode1 上试过了。作为最后的努力,我尝试将权限(不理想)从 644(见第 2/ 点)增加到 666
hdfs dfs -chmod 666 /tmp/file.png
curl -i "http://namenode:50070/webhdfs/v1/tmp/file.png?op=LISTSTATUS"
HTTP/1.1 403 Forbidden
Date: Fri, 17 Jul 2020 23:06:18 GMT
Cache-Control: no-cache
Expires: Fri, 17 Jul 2020 23:06:18 GMT
Date: Fri, 17 Jul 2020 23:06:18 GMT
Pragma: no-cache
X-FRAME-OPTIONS: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
{"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException","message":"Permission denied: user=XXXX, access=READ_EXECUTE, inode=\"/tmp/file.png\":XXXX:hdfs:drw-rw-rw-"}}
所以它似乎完成了切换,但不知何故我在放宽我以前没有获得的当前权限时遇到了权限问题?这不像是我删除了 X 标志,它一开始就不存在。 access=READ_EXECUTE 是否同时需要 R 和 X?
现在我很困惑为什么我可以看到但不能用HDFS读取这个文件。有人可以帮我解决这个问题吗?
仔细查看您的上一个错误,
... inode=\"/tmp/file.png\":XXXX:hdfs:drw-rw-rw-"}
,它似乎表明 file.png
实际上是一个目录(前导 d
符号)而不是文件。这与您在步骤 #3 *..."message":"Path is not a file: /tmp/file.png....
您可以通过 $ hdfs dfs -ls /tmp/file.png/
.
回到您的访问错误,您确实需要“执行”(x
) 权限才能列出目录中的文件。