2010-12-02 5 views

ответ

0

Вы можете сделать временную метку первой частью своего ключа. Очевидно, недостатком является то, что вы больше не можете напрямую запрашивать другие ключи. Если вам это тоже нужно, вы можете подумать о дублировании своих данных, если они важны для вас.

0

Для меня проблема состоит в дублировании записей. Я могу много событий, происходящих одновременно. Например: у меня может быть 10 событий, происходящих, например, в 10:05. Если я конвертирую его в эпоху и вставляю, они могут перезаписывать друг друга (или не писать) в hbase.

Я могу добавить идентификатор вместе с меткой времени, но могу ли я установить время начала и окончания задания mapreduce, если я добавлю этот идентификатор?

5

Вы можете создать составной ключ типа <timestamp><id>, а затем все записи в hbase будут упорядочены по метке времени. Затем вы можете создать сканер, который начинается с начала диапазона и заканчивается в конце диапазона.

Одна из проблем, с которой вы можете столкнуться, заключается в том, что если у вас высокая скорость вставки, у вас будет единственный сервер, являющийся точкой доступа для всех новых записей. Один из способов - инвертировать ключ и обеспечить, чтобы первая часть была случайной: <sha1 of ID><timestamp>. Преимущество этого заключается в распределении записей по всему кластеру, но недостатком является требование считывания всей таблицы для получения определенного диапазона.

Если вы используете первый метод <timestamp><id>, то ваше задание карты не сможет разбить работу на столько фрагментов, сколько вам может понадобиться. По умолчанию таблица разметки разделяет работу на область. Если временной срез достаточно мал, у вас может быть один регион, обслуживающий данные, и вы не получите параллелизма в своем запросе. Возможно, у вас может быть собственный разделитель таблиц, который распараллеливает запрос на большее количество сопоставлений, чем регионы, но вы все равно будете читать все данные из одного региона, и это может иметь недостатки и для параллелизма.

Как настроить таблицу, зависит от вашего прогнозируемого сценария использования и пропорции чтения/записи, а также от того, насколько высока производительность, которая вам нужна для каждого.

Если вы добавляете идентификатор к своей временной отметке, чтобы обеспечить уникальность, вы можете получить сканер для возврата всех событий с заданной меткой времени. HBase сортирует ключи лессографически на основе представления байтов. Итак, если ваш ключ <timestamp>:<id>, вы можете установить сканер для начала в строке <timestamp> и остановить строку на <timestamp+1>, чтобы получить все события на этой отметке времени