Я публикую этот вопрос как продолжение сообщения webhdfs rest api бросает файл не найдено исключение
У меня есть файл изображения, который я хотел бы ОТКРЫТЬ через API отдыха WebHDFS.
- файл существует в 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 , я вижу, что запрос передается от namenode к datanode1. Datanode1 находится в моем файле hosts, я могу подключиться к нему и проверить оттуда статус webhdfs:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<final>true</final>
</property>
Это разрешено, то же самое на namenode.
Я также пошел посмотреть журналы hdfs на
/var/log/hadoop/hdfs/*.{log,out}
, чтобы узнать, могу ли я найти ошибки, вызванные скручиванием, но, похоже, ничего не происходит. Я не вижу записи, относящейся к моему файлу или запросу 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. Может кто-нибудь, пожалуйста, помогите мне устранить эту проблему?