Можно ли разделить таблицу Hbase по времени? - PullRequest
2 голосов
/ 02 декабря 2010

Мне нужно получить данные на основе временного диапазона. Есть ли способ разбить таблицу hbase на основе временного диапазона.Пример: я хочу, чтобы данные говорили с 9:00 до 9:05.

Ответы [ 3 ]

5 голосов
/ 12 января 2011

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

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

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

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

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

0 голосов
/ 20 декабря 2010

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

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

0 голосов
/ 19 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...