У меня есть каталог 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.