У меня есть таблица hbase (с именем Org) с несколькими строками и еще одна таблица (Org_Lookup), которая является своего рода поиском первой таблицы. Каждая строка в «Org_Lookup» имеет только один столбец со значением в виде набора ключей строки таблицы «Org».
Сказав это сейчас, у меня есть файл hdfs с содержанием каждой строки в качестве ключа строки таблицы: Org_Lookup. Теперь я хочу удалить все соответствующие строки из таблицы «Org», заглянув в таблицу «Org_Lookup» для каждого ключа строки из файла HDFS.
Любые предложения о том, как этого добиться оптимально
Думая о 2 подходах:
Иметь задание MR с маппером чтения ключа строки из HDFS и выполнить GET для таблицы hbase: "Org_Lookup", прочитать значение столбца, используя набор ключей строки, указывающих на 1-ю таблицу, и передать его в набор редукторов, отвечающих за ядро. от "HFileOutputFormat2.configureIncrementalLoad" для массового удаления.
Иметь работу MR с несколькими картографами. Один читает файл HDFS и выводит ключ строки в том виде, как он есть, в то время как другой читатель чтения из настройки таблицы «Org_lookup» использует «TableMapReduceUtil.initTableMapperJob».
Теперь редуктор получит Iterable от обоих преобразователей и решит испустить ключи строк, прочитанные tableMapper, только если входящий ключ является частью вывода обоих преобразователей. Теперь у нас есть выходной файл HDFS со всеми rowKeys таблицы "Org". Теперь есть еще одно задание MR для массового удаления.
В 1-м случае я делаю GET-вызов Hbase для каждой строки из файла HDFS, где, как и во 2-м случае, я читаю все записи, используя «TableMapReduceUtil.initTableMapperJob». Что было бы лучше по производительности, если предположить, что входной файл HDFS имеет записи около 100K