Hadoop 2.6 wprowadził DFSInotifyEventInputStream
, którego można użyć do tego. Możesz pobrać jego instancję od HdfsAdmin
, a następnie zadzwoń pod numer .take()
lub .poll()
, aby uzyskać wszystkie zdarzenia. Typy zdarzeń obejmują usuwanie, dołączanie i tworzenie, które powinny obejmować to, czego szukasz.
Oto podstawowy przykład. Upewnij się, że uruchamiasz go jako użytkownik hdfs
, ponieważ interfejs administratora wymaga rootu HDFS.
public static void main(String[] args) throws IOException, InterruptedException, MissingEventsException
{
HdfsAdmin admin = new HdfsAdmin(URI.create(args[0]), new Configuration());
DFSInotifyEventInputStream eventStream = admin.getInotifyEventStream();
while(true) {
EventBatch events = eventStream.take();
for(Event event : events.getEvents()) {
System.out.println("event type = " + event.getEventType());
switch(event.getEventType()) {
case CREATE:
CreateEvent createEvent = (CreateEvent) event;
System.out.println(" path = " + createEvent.getPath());
break;
default:
break;
}
}
}
}
Oto blogu, że obejmuje ją bardziej szczegółowo:
http://johnjianfang.blogspot.com/2015/03/hdfs-6634-inotify-in-hdfs.html?m=1
Funkcja Spark Streaming ma podobną funkcję: w [FileInputDStream] (https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apaver/spark/streaming/dstream/FileInputDStream .scala # 172-172) –
Prosta rzecz, jaką mogę sobie wyobrazić, możesz użyć polecenia unix w ten sposób: hadoop fs -ls | wc -l – user3484461
@YijieShen Czy możesz go jeszcze bardziej rozwinąć? –