Как использовать API REST на кластере HBase с помощью балансировки нагрузки
У меня есть пилотный кластер HBase с 1 ведущим и 5 подчиненными узлами. Я хочу получить доступ (в основном записывать данные показов рекламы через GET) к кластеру через его REST API. Я хочу иметь возможность позже запускать агрегированные отчеты, используя Hadoop/Hive?Pig (TBD), поэтому мне нужна одна картинка данных.
Должен ли я запустить REST-сервер на главном сервере и просто выполнить запись в эту единственную конечную точку, или я должен запустить экземпляр REST-сервера на каждом подчиненном узле и выполнить запись баланса нагрузки на подчиненных узлах?
(Последнее не кажется правильным, но я видел некоторые упоминания в документации об этом, поэтому я немного запутался).
2 ответа
Я использую остальные API с балансировкой нагрузки, предоставляемой через nginx. Ваш конфиг nginx будет выглядеть примерно так...
upstream cluster
{
server master:1234;
server slave1:1234;
server slave2:1234;
server slave3:1234;
server slave4:1234;
}
server
{
listen 4444;
server_name someserver.com;
location /
{
proxy_pass http://cluster;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
}
Вы будете работать на всех серверах в кластере
hbase rest -p 1234 start
Вы бы позвонили someserver.com:4444 для ваших остальных звонков.
Если вы не хотите, чтобы REST-сервер был узким местом, то вы должны запустить несколько из них и распределить нагрузку между ними.
Я не уверен, что запустил бы их на самих датодадах или на другой группе ящиков. Разбор сообщений REST с высокой частотой может повлиять на производительность самого HBase.