Hadoop HA Namenode удаленного доступа
Я настраиваю стабильный выпуск Hadoop 2.2.0 с помощью HA namenode, но я не знаю, как настроить удаленный доступ к кластеру.
У меня есть HA namenode, настроенный с аварийным переключением вручную, и я определил dfs.nameservices
и я могу получить доступ к hdfs с помощью nameservice со всех узлов, входящих в кластер, но не извне.
Я могу выполнять операции с hdfs, напрямую связываясь с активным namenode, но я не хочу этого, я хочу связаться с кластером и затем быть перенаправлен на активный namenode. Я думаю, что это нормальная конфигурация для кластера высокой доступности.
Кто-нибудь сейчас как это сделать?
(заранее спасибо...)
4 ответа
Вам нужно связаться с одним из узлов Name (как вы это делаете в настоящее время) - нет кластерного узла для контакта.
Клиентский код hadoop знает адрес двух namenodes (в core-site.xml) и может идентифицировать, кто является активным, а какой - резервным. Возможно, существует способ опроса узла зоопарка в кворуме для определения активного / резервного (возможно, я не уверен), но вы также можете проверить один из наменодов - у вас есть шанс 50/50, что это активный.
Я должен был бы проверить, но вы могли бы запросить либо, если вы просто читаете из HDFS.
Вы должны добавить больше значений на сайт hdfs:
<property>
<name>dfs.ha.namenodes.myns</name>
<value>machine-98,machine-99</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myns.machine-98</name>
<value>machine-98:8100</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myns.machine-99</name>
<value>machine-145:8100</value>
</property>
<property>
<name>dfs.namenode.http-address.myns.machine-98</name>
<value>machine-98:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.myns.machine-99</name>
<value>machine-145:50070</value>
</property>
Для узла Active Name вы всегда можете спросить Zookeeper. Вы можете получить активное имя узла из приведенного ниже пути Zk.
/hadoop-ha/namenodelogicalname/ActiveStandbyElectorLock
Есть два способа разрешить эту ситуацию (код с Java)
используйте core-site.xml и hdfs-site.xml в своем коде
используйте conf.set в своем коде