Как использовать 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.

Другие вопросы по тегам