Веб-запрос через webhdfs с отказоустойчивостью узла данных

У меня есть кластер hadoop с Apache версии 2.7.1

высокая доступность и состоит из пяти узлов

mn1,mn2,dn1,dn2,dn3

если мы обращаемся к wbhdfs из браузера, чтобы открыть файл с именем myfile, который имеет коэффициент репликации = 3 и выходит на dn1, dn2 и dn3

мы выдаем следующую команду из браузера

http://mn1:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN 

поэтому mn1 перенаправляет этот запрос в результате на dn1 или dn2 или dn3, и мы получаем файл

и мы тоже можем получить файл из hadoop с помощью следующей команды

hdfs dfs -cat /hadoophome/myfile 

но в случае отказа узлов данных (предположим, что dn1 и dn3 сейчас не работают)

если мы выпустим комнаду

hdfs dfs -cat /hadoophome/myfile 

мы можем получить файл

но если мы введем команду webhdfs из браузера, и это мое состояние

http://mn1:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN 

mn1 перенаправит запрос на dn1 или dn3, которые мертвы, и иногда он перенаправляет запрос на dn2, и я могу получить файл

не должен ли mn1 перенаправлять запрос webhdfs на живые узлы данных только как обработать эту ошибку, если она будет обработана из приложения?

1 ответ

Редактировать hdfs-site.xml

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>10000</value>
</property>

где это свойство измеряется в миллисекундах

и вы получите тайм-аут 50 секунд

потому что значение по умолчанию для heartbeat.interval составляет 3 секунды

и время ожидания, чтобы считать узел данных мертвым

 2 * heartbeat.recheck.interval + 10 * heartbeat.interval

поэтому время ожидания = 2 * (10 секунд) + 10 * 3 секунды = 50 секунд

Другие вопросы по тегам