NameNode HA при использовании hdfs: // URI
Со схемой URI HDFS или HFTP (например,hdfs://namenode/path/to/file
) Я могу получить доступ к кластерам HDFS, не требуя их файлов конфигурации XML. Это очень удобно при запуске команд оболочки, таких какhdfs dfs -get
, hadoop distcp
или чтение файлов из Spark, какsc.hadoopFile()
потому что мне не нужно копировать и управлять XML-файлами для всех соответствующих кластеров HDFS на все узлы, которые могут потенциально выполняться этими кодами.
Одним из недостатков этого подхода является то, что я должен использовать имя хоста активного NameNode, в противном случае Hadoop выдаст исключение с жалобой на то, что NN находится в режиме ожидания.
Обычный обходной путь состоит в том, чтобы попробовать один, а затем попробовать другой, если обнаруживается какое-либо исключение, или подключиться к ZooKeeper напрямую и проанализировать двоичные данные с помощью protobuf.
Оба этих метода громоздки по сравнению с (например)URI нагрузки MySQL или жеСтрока подключения ZooKeeper где я могу просто разделить запятыми все хосты в URI, и драйвер автоматически найдет узел для связи.
Скажем, у меня есть активные и резервные хосты namenodenn1
а такжеnn2
, Какой самый простой способ указать конкретный путь HDFS, который:
hdfs
, hadoop
может использоваться в Hadoop Java API (и, следовательно, в зависимости от него, например, от Spark) с минимальной конфигурациейработает независимо от того, какой наменоде в данный момент активен.