Ошибка 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 .

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