Мне нужно получить данные на основе временного диапазона. Есть ли способ разделить таблицу hbase на основе временного диапазона. Пример: Я хочу, чтобы данные говорят с 9:00 до 9:05.Может ли таблица Hbase разбиваться по времени?
ответ
Вы можете сделать временную метку первой частью своего ключа. Очевидно, недостатком является то, что вы больше не можете напрямую запрашивать другие ключи. Если вам это тоже нужно, вы можете подумать о дублировании своих данных, если они важны для вас.
Для меня проблема состоит в дублировании записей. Я могу много событий, происходящих одновременно. Например: у меня может быть 10 событий, происходящих, например, в 10:05. Если я конвертирую его в эпоху и вставляю, они могут перезаписывать друг друга (или не писать) в hbase.
Я могу добавить идентификатор вместе с меткой времени, но могу ли я установить время начала и окончания задания mapreduce, если я добавлю этот идентификатор?
Вы можете создать составной ключ типа <timestamp><id>
, а затем все записи в hbase будут упорядочены по метке времени. Затем вы можете создать сканер, который начинается с начала диапазона и заканчивается в конце диапазона.
Одна из проблем, с которой вы можете столкнуться, заключается в том, что если у вас высокая скорость вставки, у вас будет единственный сервер, являющийся точкой доступа для всех новых записей. Один из способов - инвертировать ключ и обеспечить, чтобы первая часть была случайной: <sha1 of ID><timestamp>
. Преимущество этого заключается в распределении записей по всему кластеру, но недостатком является требование считывания всей таблицы для получения определенного диапазона.
Если вы используете первый метод <timestamp><id>
, то ваше задание карты не сможет разбить работу на столько фрагментов, сколько вам может понадобиться. По умолчанию таблица разметки разделяет работу на область. Если временной срез достаточно мал, у вас может быть один регион, обслуживающий данные, и вы не получите параллелизма в своем запросе. Возможно, у вас может быть собственный разделитель таблиц, который распараллеливает запрос на большее количество сопоставлений, чем регионы, но вы все равно будете читать все данные из одного региона, и это может иметь недостатки и для параллелизма.
Как настроить таблицу, зависит от вашего прогнозируемого сценария использования и пропорции чтения/записи, а также от того, насколько высока производительность, которая вам нужна для каждого.
Если вы добавляете идентификатор к своей временной отметке, чтобы обеспечить уникальность, вы можете получить сканер для возврата всех событий с заданной меткой времени. HBase сортирует ключи лессографически на основе представления байтов. Итак, если ваш ключ <timestamp>:<id>
, вы можете установить сканер для начала в строке <timestamp>
и остановить строку на <timestamp+1>
, чтобы получить все события на этой отметке времени