WebHDFS FileNotFoundException остальные API

Я публикую этот вопрос как продолжение сообщения webhdfs rest api бросает файл не найдено исключение

У меня есть файл изображения, который я хотел бы ОТКРЫТЬ через API отдыха WebHDFS.

  1. файл существует в hdfs и имеет соответствующие разрешения
  2. Я могу 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
  1. Таким образом, 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......
  1. Итак, в соответствии с 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.

  1. Я также пошел посмотреть журналы hdfs на /var/log/hadoop/hdfs/*.{log,out}, чтобы узнать, могу ли я найти ошибки, вызванные скручиванием, но, похоже, ничего не происходит. Я не вижу записи, относящейся к моему файлу или запросу webhdfs. Я попробовал это на namenode и datanode1.

  2. в качестве последней попытки я попытался увеличить разрешения (не идеально) с 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. Может кто-нибудь, пожалуйста, помогите мне устранить эту проблему?


person user13950802    schedule 17.07.2020    source источник


Ответы (1)


Присмотревшись к вашей последней ошибке, ... 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) для вывода списка файлов в каталоге.

person mazaneicha    schedule 19.07.2020
comment
Действительно, я пропустил это. Спасибо за внешнюю точку зрения. Это произошло, когда я hdfs dfs -поместил свое изображение из локального в hdfs, фактический путь - hdfs dfs -ls /tmp/file.png/file.png. Я туннелирую через ssh и не имею окраски. Это помогло бы. Спасибо за помощь! - person user13950802; 19.07.2020