Адаптер Apache ozone для клиента Hadoop не разрешает ведущие узлы HA при смене лидера в kubernetes

Я запускаю Apache Ozone с узлами диспетчера высокой доступности в kubernetes. Мне удалось заставить работать автоматическое избрание лидера, но клиент Hadoop, работающий на моем модуле Accumulo, не разрешит нового лидера. Прямо сейчас у меня есть одна служба, которая используется двумя модулями менеджера.

Согласно документации для Hadoop, вы можете указать собственный провайдер отказоустойчивости прокси в hdfs-site.xml с помощью ключа:

dfs.client.failover.proxy.provider.[имя-кластера]

Я предполагаю, что это устарело в адаптере Ozone для Hadoop, потому что даже если я добавлю случайные символы для этого ключа, связанных ошибок не будет. Это облом, потому что я знаю, что отказоустойчивый API работает по-другому в Ozone, и нашел несколько классов, которые выглядели так, как будто они там будут работать:

HadoopRpcOMFailoverProxyProvider, GrpcOMFailoverProxyProvider и OMFailoverProxyProvider.

Я периодически получаю эту ошибку, потому что у меня работают два узла менеджера и одна служба kubernetes маршрутизируется к ним обоим:

      root@accumulo-monitor-0:/opt/hadoop/etc/hadoop# hdfs dfs -ls /

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/ozone/share/ozone/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2022-09-30 21:17:22,892 INFO retry.RetryInvocationHandler: com.google.protobuf.ServiceException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ozone.om.exceptions.OMNotLeaderException): OM:ozone-om-1 is not the leader. Could not determine the leader node.
    at org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.createNotLeaderException(OzoneManagerProtocolServerSideTranslatorPB.java:187)
    at org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.createLeaderErrorException(OzoneManagerProtocolServerSideTranslatorPB.java:174)
    at org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitReadRequestToOM(OzoneManagerProtocolServerSideTranslatorPB.java:167)
    at org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.processRequest(OzoneManagerProtocolServerSideTranslatorPB.java:133)
    at org.apache.hadoop.hdds.server.OzoneProtocolMessageDispatcher.processRequest(OzoneProtocolMessageDispatcher.java:87)
    at org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitRequest(OzoneManagerProtocolServerSideTranslatorPB.java:123)
    at org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos$OzoneManagerService$2.callBlockingMethod(OzoneManagerProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server.processCall(ProtobufRpcEngine.java:466)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:574)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:552)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1093)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1035)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:963)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/javax.security.auth.Subject.doAs(Subject.java:423)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2966)
, while invoking $Proxy14.submitRequest over nodeId=null,nodeAddress=ozone-om.equitus:9862 after 1 failover attempts. Trying to failover after sleeping for 4000ms.

После небольшого поиска в Интернете я заметил, что прокси-запрос не разрешает nodeId или какие-либо другие узлы. Это должно выглядеть примерно так:

      org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:528)
 at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1070)
 at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:985)
 at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:913)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAs(Subject.java:422)
 at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1898)
 at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2882)
, while invoking $Proxy10.submitRequest over 
{om1=nodeId=om1,nodeAddress=uma-1.uma.root.hwx.site:9862, 
om3=nodeId=om3,nodeAddress=uma-3.uma.root.hwx.site:9862, 
om2=nodeId=om2,nodeAddress=uma-2.uma.root.hwx.site:9862} after 1 failover 
attempts. Trying to failover immediately.{code}

Другая ошибка, которую я получаю при использовании командной строки hdfs:

      root@accumulo-monitor-0:/opt/hadoop/etc/hadoop# hdfs haadmin -ns ozone-om -getAllServiceState
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/ozone/share/ozone/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
ozone-om-0.ozone-om.equitus:9862                   Failed to connect: Unknown protocol: org.apache.hadoop.ha.HAServiceProtocol
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.getProtocolImpl(ProtobufRpcEngine2.java:498)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:565)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:552)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1093)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1035)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:963)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/javax.security.auth.Subject.doAs(Subject.java:423)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2966)

ozone-om-1.ozone-om.equitus:9862                   Failed to connect: Unknown protocol: org.apache.hadoop.ha.HAServiceProtocol
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.getProtocolImpl(ProtobufRpcEngine2.java:498)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:565)
    at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:552)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1093)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1035)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:963)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/javax.security.auth.Subject.doAs(Subject.java:423)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2966)

Вот мои конфиги для Hadoop на модуле Accumulo:

основной-сайт.xml:

      <configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>ofs://ozone-om.equitus/</value>
    </property>
    <property>
        <name>fs.ofs.impl</name>
        <value>org.apache.hadoop.fs.ozone.RootedOzoneFileSystem</value>
    </property>
</configuration>

hdfs-сайт.xml:

(установка ключа dfs.client.failover.proxy.provider.ozone-om ничего не дает)

      <configuration>
    <property>
      <name>dfs.client.failover.proxy.provider.ozone-om</name>
      <value>org.apache.hadoop.ozone.om.ha.HadoopRpcOMFailoverProxyProvider</value>
    </property>
    <property>
      <name>dfs.client.failover.proxy.provider</name>
      <value>org.apache.hadoop.ozone.om.ha.HadoopRpcOMFailoverProxyProvider</value>
    </property>
     <property>
       <name>dfs.client.retry.policy.enabled</name>
       <value>true</value>
     </property>
    <property>
      <name>dfs.ha.automatic-failover.enabled.ozone-om</name>
      <value>true</value>
    </property>
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>dfs.nameservices</name>
      <value>ozone-om</value>
    </property>
    <property>
      <name>dfs.ha.namenodes.ozone-om</name>
      <value>ozone-om-0,ozone-om-1</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.ozone-om.ozone-om-0</name>
      <value>ozone-om-0.ozone-om.equitus:9862</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.ozone-om.ozone-om-1</name>
      <value>ozone-om-1.ozone-om.equitus:9862</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.ozone-om.ozone-om-0</name>
      <value>ozone-om-0.ozone-om.equitus:9874</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.ozone-om.ozone-om-1</name>
      <value>ozone-om-1.ozone-om.equitus:9874</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.datanode.use.datanode.hostname</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.datanode.synconclose</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

У кого-нибудь есть идеи? Я чувствую, что мне либо не хватает конфигурации прокси, либо Ozone еще не поддерживает это. Я очень глубоко искал в репо и в Интернете и ничего не нашел о добавлении ключа конфигурации прокси для этого.

0 ответов

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