Как получить уведомление, когда в каталоге hdfs создан файл - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть каталог hdfs, где файлы будут создаваться периодически. Мне нужно получать уведомление, когда в его подкаталоге создается файл, чтобы я мог начать чтение файла из этого местоположения hdfs и отправить содержимое в kafka topi c. Я обнаружил, что это можно сделать с помощью HDFS iNotify. Но есть несколько недостатков, например, вместо hdfsdirectory, он уведомляет, когда файл создается в любом месте hdfs. Он фиксирует все события, происходящие в hdfs.

public class HdfsINotifyExample {

public static void main(String[] args) throws IOException, InterruptedException, MissingEventsException {

    long lastReadTxid = 0;

    if (args.length > 1) {
        lastReadTxid = Long.parseLong(args[1]);
    }

    System.out.println("lastReadTxid = " + lastReadTxid);

    HdfsAdmin admin = new HdfsAdmin(URI.create(args[0]), new Configuration());

    DFSInotifyEventInputStream eventStream = admin.getInotifyEventStream(lastReadTxid);

    while (true) {
        EventBatch batch = eventStream.take();
        System.out.println("TxId = " + batch.getTxid());

        for (Event event : batch.getEvents()) {
            System.out.println("event type = " + event.getEventType());
            switch (event.getEventType()) {
            case CREATE:
                CreateEvent createEvent = (CreateEvent) event;
                System.out.println("  path = " + createEvent.getPath());
                System.out.println("  owner = " + createEvent.getOwnerName());
                System.out.println("  ctime = " + createEvent.getCtime());
                break;
            default:
                break;
            }
          }
       }
      }
     }

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

1 Ответ

0 голосов
/ 09 февраля 2020

Вы можете использовать HSFAdmin API и отслеживать Event.create (hdfs.inotify.event.type) вместе с путем просмотра HDFS (hdfs.inotify.event.path)

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-hadoop-nar/1.5.0/org.apache.nifi.processors.hadoop.inotify.GetHDFSEvents/

...