Использование массовой загрузки HBase
Я пытаюсь импортировать некоторые данные HDFS в уже существующую таблицу HBase. Моя таблица была создана с двумя семействами столбцов и со всеми настройками по умолчанию, которые используются HBase при создании новой таблицы. Таблица уже заполнена большим объемом данных и насчитывает 98 онлайн-регионов. Тип имеющихся у него ключей строк представлен в виде (упрощенная версия): 2-CHARS_ID + 6-DIGIT-NUMBER + 3 X 32-CHAR-MD5-HASH.
Пример ключа: IP281113ec46d86301568200d510f47095d6c99db18630b0a23ea873988b0fb12597e05cc6b30c479dfb9e9d627ccfc4c5dd5fef.
Данные, которые я хочу импортировать, находятся в HDFS, и я использую процесс Map-Reduce для их чтения. Я испускаю объекты Put из моего картографа, которые соответствуют каждой строке, прочитанной из файлов HDFS. Существующие данные имеют ключи, которые начинаются с "XX181113". Работа настроена с:
HFileOutputFormat.configureIncrementalLoad(job, hTable)
Как только я запускаю процесс, я вижу, что он сконфигурирован с 98 редукторами (равными сетевым регионам, которые есть в таблице), но проблема в том, что 4 редуктора получили 100% разбитых данных между ними, а остальные ничего не сделали. В результате я вижу только 4 вывода папки, которые имеют очень большой размер. Эти файлы соответствуют 4 новым regions
который я могу затем импортировать в таблицу? И если так, то почему только 4, а 98 редукторов создаются? Чтение документов HBase
In order to function efficiently, HFileOutputFormat must be configured such that each output HFile fits within a single region. In order to do this, jobs whose output will be bulk loaded into HBase use Hadoop's TotalOrderPartitioner class to partition the map output into disjoint ranges of the key space, corresponding to the key ranges of the regions in the table.
еще больше сбило меня с толку, почему я так поступаю.
Спасибо!
1 ответ
Количество карт, которые вы получите, зависит не от количества регионов в таблице, а от того, как данные разбиты на регионы (каждый регион содержит диапазон ключей). поскольку вы упоминаете, что все ваши новые данные начинаются с одного и того же префикса, скорее всего, они вписываются только в несколько регионов. Вы можете предварительно разбить вашу таблицу так, чтобы новые данные были разделены между несколькими регионами