Как Hbase обрабатывает повторяющиеся записи?

#hadoop #hive #hbase

#hadoop #улей #hbase

Вопрос:

Я хочу понять, как Hbase внутренне обрабатывает дубликаты записей из файла. Чтобы поэкспериментировать с этим, я создал ВНЕШНЮЮ таблицу в hive со специфичными для HBase свойствами конфигурации, такими как свойства таблицы, SERDE, семейство столбцов. Я также должен создать таблицу в HBase с семейством столбцов, что я и сделал.

Я выполнил перезапись вставки в эту таблицу HIVE из исходной таблицы, в которой есть повторяющиеся записи. Под повторяющимися записями я подразумеваю следующее,

 ID | Name        | Surname
 1 | Ritesh      | Rai
 1 | RiteshKumar | Rai
  

Теперь, после выполнения перезаписи вставки, я запросил свою таблицу HIVE с идентификатором 1, я получил вывод как (второй)

  1        RiteshKumar         Rai
  

Я хотел узнать, как HBase решает, какой из них обновляется? Это просто то, что он просто записывает данные последовательно. Последняя запись будет перезаписана и будет считаться последней? Или как это?

Заранее спасибо.

С уважением, Говинд

Ответ №1:

Вы на правильном пути!

HBase модель данных можно рассматривать как «многомерную карту», и каждое значение ячейки связано с меткой времени (insertion_time по умолчанию):

 row:column_family:column_qualifier:timestamp:value
  

ПРИМЕЧАНИЕ: временная метка связана с каждым отдельным значением, а не со всей строкой (это позволяет использовать несколько приятных функций)!

Во время чтения вы получите последние версии по умолчанию, если не указано иное. По умолчанию должно храниться 3 версии. Hbase выполняет «чтение слиянием» и возвращает последнее значение ячейки для каждой строки.

Пожалуйста, попробуйте это из вашей hbase-оболочки (на самом деле не проверялось перед публикацией):

 put ‘table_name’, ‘1’, ‘f:name’, ‘Ritesh’
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’
put ‘table_name’, ‘1’, ‘f:name’, ‘RiteshKumar’
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’
put ‘table_name’, ‘1’, ‘f:other’, ‘Some other stuff’

// Data on 'disk' (that might just be the memstore for now) will look like this:
// 1:f:name:1234567890:‘Ritesh’
// 1:f:surname:1234567891:‘Rai’
// 1:f:name:1234567892:‘RiteshKumar’
// 1:f:surname:1234567893:‘Rai’
// 1:f:other:1234567894:‘Some other stuff’

// Now try... And you will get ‘RiteshKumar’, ‘Rai’, ‘Some other stuff’
get ‘table_name’, ‘1’

// To get the previous versions of the data use the following:
get ‘table_name’, ‘1’, {COLUMN => ‘f’, VERSIONS => 2}
  

Не забудьте ознакомиться с лучшими практиками проектирования схем

Комментарии:

1. возможно ли в этом случае получить предыдущее значение?