Веб-запрос через 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 секунд