Разработка схемы Hbase для новой таблицы для рядов реального времени - PullRequest
1 голос
/ 30 сентября 2019

У меня есть некоторые данные доменов, например, страницы и т. Д., В таблице hbase. Я должен показывать его статистику в режиме реального времени, например, количество документов, недействительных / действительных документов и т. Д. На еженедельной основе. Для этой цели я собираюсь создать еще одну таблицу Hbase для этой статистики. Работа MR обновит эту новую таблицу для статистики новой недели после обработки исходной таблицы. Теперь какой должна быть схема моей новой таблицы. Это правильный подход? Я должен визуализировать топ-100 доменов в режиме реального времени (требуется некоторая сортировка).

Data format like
domain, week1-docs, week2-docs,week3-docs ...

Далее, также ожидается, что данные будут расти со временем.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

В зависимости от того, как вы хотите получить данные из HBase, у вас есть несколько возможностей. Фактически, поскольку HBase обеспечивает автоматическое лексикографическое упорядочение ключей строки, вы можете улучшить свои операции Get или Scan следующим образом:

1) Вас заинтересуют все домены данногоweek

[rowKey] -> [colName0] = [colValue0], ...
"2019-01" -> domain0 = "{data for domain0}", domain1 = "{data for domain1}"
...
"2019-52" -> ...

В этом случае вы можете использовать либо операцию Get, чтобы получить все данные доменов за данную неделю, либо операцию Scan, чтобы получить данные всех доменов за несколько недель.

2) Вы будете заинтересованы в одном домене одновременно, в течение нескольких недель

[rowKey] -> [colName0] = [colValue0], ...
"domain0_2019-01" -> data = "{data for domain0 on week 1}"
...
"domain0_2019-52" -> data = "{data for domain0 on week 52}"
"domain1_2019-01" -> data = "{data for domain1 on week 1}"
...

В этом случае вы можете получить данные одного домена за одну неделюпостроив Get соответственно, или вы можете получить данные за все (или подмножество) недель для данного домена, используя Scan с частичными START_ROW и END_ROW. Например, Scan с START_ROW = "domain0_2019" и STOP_ROW = "domain0_2020" даст вам данные за весь 2019 год для домена 0.

3) Вас заинтересует одна неделя и один домен ввремя

[rowKey] -> [colName0] = [colValue0], ...
"2019-01_domain0" -> data = "{data for domain0 on week 1}"
"2019-01_domain1" -> data = "{data for domain1 on week 1}"
...
"2019-52_domain0" -> data = "{data for domain0 on week 52}"
"2019-52_domain1" -> data = "{data for domain1 on week 52}"
...

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

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

1 голос
/ 30 сентября 2019
domain, week1-docs, week2-docs,week3-docs ...

Вы можете использовать этот подход для хранения данных, поскольку вы можете хранить практически неограниченные столбцы в HBase, но я предпочитаю следующее:

domain_week_id [row_key], week-docs 

в качестве примера

domainName_2019_24, {docs data}

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

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

...