namenode когда отдает список блоков файла указывала в адресе блока datanode по hostname, а не по IP?
Из конфига кластера:
dfs.client.use.datanode.hostname=true
dfs.datanode.use.datanode.hostname=true
P.S. читаю файл через Spark.
P.P.S. пытаюсь отладить кастомный ридер файла, HDFS в котором лежат тестовые файлы находится в закрытом контуре но я оттуда могу нужные порты пробросить через SSH. Hostname там всегда фиксированы и их я добавил в hosts, надеялся получится отладить и всплыла вот такая проблемка...
Вам нужно нормальное решение с гейтвеем, например через Knox
Так как у меня нет прав/разрешений, а дебажить всё же хочется я пошел немного другим путем, костыльным зато не требующим согласований. Т.к. получить список всех датанод с их hostname и IP мне было достаточно просто, я написал скрипт который для каждой датаноды создал на локальной машине сетевые интерфейсы локальной петли с IP этих датанод. В результате чтение с датанод проходило по пути например 172.1.0.10:50010 (fake, loopback) -> 127.0.0.1:50010 (ssh tunnel) -> 172.1.0.10:50010 (real host) и всё заработало.
Ну то есть вы сделали VPN наоборот, вместо того чтобы получить интерфейс в сети узлов, вы сделали интерфейс для каждого узла в вашей сети)
Обсуждают сегодня