Теперь я использую Hadoop для обработки данных, которые в итоге будут загружены в ту же таблицу.Мне нужен общий последовательный генератор чисел для генерации идентификатора для каждой строки.Теперь я использую следующий подход для генерации уникального номера:
1) Создайте текстовый файл, например test.seq, в HDFS для сохранения текущего порядкового номера.
2) Я использую файл блокировки ".lock" для управления параллелизмом.Предположим, у нас есть две задачи для параллельной обработки данных.Если task1 хочет получить номер, он проверит, существует ли файл блокировки.Если да, это означает, что task2 обращается к номеру из test.seq, тогда task1 должен ждать.Когда задача2 получила номер, она перезаписывает старый номер, увеличивая 1, когда возвращается, и удаляет файл блокировки «.lock».Когда task1 видит исчезновение .lock, task1 сначала создает файл ".lock", а затем делает то же самое, чтобы получить порядковый номер.
Однако я не уверен, что этот подход практичен.Поскольку я храню файлы .lock и test.seq в HDFS, даже задача test.seq была изменена задачей 1, она может быть не сразу обнаружена задачей 2.По мере того как другие задачи получают информацию о данных в HDFS через namenode.Итак, датодель сначала уведомит об изменении наменоде, затем другие задачи уведомят об изменениях.Это правильно?
Другая идея заключается в создании торжанской программы, работающей на Master.Итак, задание получить порядковый номер есть через RPC программу Torjan.Но как запустить программу Torjan на главной программе?
Кто-нибудь может дать мне совет?спасибо!