Ошибка httpfs Категория операций READ не поддерживается в состоянии ожидания
Я работаю над apoop 2.7.1 hadoop, и у меня есть кластер, который состоит из 3 узлов
nn1
NN2
dn1
nn1 - это имя dfs.default.name, поэтому это главный узел имени.
Я установил httpfs и запустил его, конечно, после перезапуска всех служб. Когда nn1 активен, а nn2 находится в режиме ожидания, я могу отправить этот запрос
http://nn1:14000/webhdfs/v1/aloosh/oula.txt?op=open&user.name=root
в моем браузере появляется диалоговое окно открытия или сохранения этого файла, но когда я уничтожаю узел имен, работающий на nn1, и снова запускаю его как обычно, тогда из-за высокой доступности nn1 переходит в режим ожидания, а nn2 становится активным.
Так что здесь httpfs должен работать, даже если nn1 переходит в режим ожидания, но отправляет тот же запрос сейчас
http://nn1:14000/webhdfs/v1/aloosh/oula.txt?op=open&user.name=root
дает мне ошибку
{"RemoteException":{"message":"Operation category READ is not supported in state standby","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}
Разве httpfs не должен преодолеть состояние ожидания nn1 и принести файл? Это из-за неправильной конфигурации или есть какая-то другая причина?
Мой основной сайт
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
2 ответа
Это выглядит как HttpFs
еще не известно о высокой доступности. Это может быть связано с отсутствием конфигураций, необходимых для подключения Клиентов к текущему активному Namenode.
Убедитесь, что fs.defaultFS
недвижимость в core-site.xml
настроен с правильным nameservice ID
,
Если у вас есть ниже в hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
затем в core-site.xml
, так должно быть
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
Также настройте имя класса Java, который будет использоваться клиентом DFS, чтобы определить, какой NameNode в данный момент является активным и обслуживает клиентские запросы.
Добавить эту недвижимость в hdfs-site.xml
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
Перезапустите Namenodes и HttpFs после добавления свойств во всех узлах.
Не уверен, решает ли он эту проблему, но решил мою, когда я обращался к HDFS через клиент HDFS, и он постоянно записывал предупреждение о чтении в режиме ожидания. Я изменил следующее свойство в hdfs-site.xml для клиента HDFS:
<property>
<name>dfs.client.failover.proxy.provider.uniza-hdfs-ha</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
к
<property>
<name>dfs.client.failover.proxy.provider.uniza-hdfs-ha</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.RequestHedgingProxyProvider</value>
</property>
Это также упоминается в официальной документации https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html .