class_docstr: HDFS connector class where failover logic is implemented.  Facilitates testing. 
docstr: Returns a wrapper HadoopFileSystem "high-availability client" object that enables
  name node failover.
  
  Raises a HdfsConnectError if no successful connection can be established.
  
  :param list_of_namenodes: a required list of name node URLs to connect to.
  :param user: String denoting username when connecting to HDFS. None implies login user.
  :return: the wrapped HDFS connection object
code: def connect_to_either_namenode(cls, list_of_namenodes, user=None):
      """
      Returns a wrapper HadoopFileSystem "high-availability client" object that enables
      name node failover.
  
      Raises a HdfsConnectError if no successful connection can be established.
  
      :param list_of_namenodes: a required list of name node URLs to connect to.
      :param user: String denoting username when connecting to HDFS. None implies login user.
      :return: the wrapped HDFS connection object
      """
      assert (
          list_of_namenodes is not None
      ), "Must supply a list of namenodes"
      return HAHdfsClient(cls, list_of_namenodes, user=user)
  
imports: import functools
  import inspect
  import logging
  import os
  from distutils.version import LooseVersion
  from xml.etree import ElementTree
  import pyarrow
  import six
  from pyarrow.hdfs import HadoopFileSystem
  from pyarrow.lib import ArrowIOError
  from six.moves.urllib.parse import urlparse
label_desc: Use image node_id 2 for calling the HdfsConnector obj's underlying member method code with example usage: obj.connect_to_either_namenode(cls, list_of_namenodes, user) and returns: HAHdfsClient