С этого сообщения в блоге,
Общий процесс заключается в том, что новый клиент сначала обращается к кворуму Zookeeper (отдельному кластеру узлов Zookeeper), чтобы найти конкретный ключ строки,Это делается путем получения имени сервера (т. Е. Имени хоста), на котором расположен регион -ROOT-, из Zookeeper.С этой информацией он может запросить этот сервер, чтобы получить сервер, на котором размещен .META.Таблица.Обе эти две детали кэшируются и просматриваются только один раз.Наконец он может запросить .META.сервер и получить сервер, на котором находится строка, которую ищет клиент.
Как только ему сообщают, где находится строка, то есть в каком регионе, он также кэширует эту информацию и связывается с HRegionServer, размещающим этот регион напрямую.,Таким образом, со временем у клиента появляется довольно полное представление о том, где можно получить строки без необходимости запрашивать .META.сервер снова.
Я предполагаю, что вы напрямую используете интерфейс Thrift.В этом случае, даже если вы вызываете какую-либо мутацию с определенного сервера региона, этот сервер региона действует только как клиент.Он свяжется с кворумом Zookeeper, затем свяжется с Мастером, чтобы получить регионы, в которые будут записываться данные, и будет действовать так же, как если бы они были записаны с другого сервера регионов.сервера или все должно пройти через мастер?
Оба одинаковы.Нет такой вещи, как запись напрямую в регион-сервер.С мастером необходимо связаться, чтобы определить, в какую область записывать вывод.
Если вы используете задание hadoop map-Reduce и используете Java API для задания mapreduce, то вы можете использовать TableOutputFormat
для прямой записи в HFiles без использования HBase API.Это примерно в 10 раз быстрее, чем при использовании API.