2015-04-30 9 views
7

dosya görüntüleyicisi varHDFS?HDFS dosya görüntüleyicisi

Senaryo: dosya sayısı bir eşiğe ulaşan bir kez Spark İşi başlatmak istiyor dosyaları HDF'ler continuously.I açılış edilmektedir (bu dosyaların dosya sayısı veya boyutu olabilir).

Bunu başarmak için HDFS'ye dosya izleyicisi uygulamak mümkün mü? Evet ise, o zaman herkes bunu yapmanın yolunu önerebilir mi? Farklı seçenekler nelerdir? Hayvan bekçisi veya Oozie bunu yapabilir mi?

Herhangi bir yardım için teşekkür ederiz. Teşekkürler.

+0

Spark Streaming'in benzer bir işlevi vardır: [FileInputDStream] içinde (https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream .scala # 172-172) –

+2

Unix komutunu şu şekilde kullanabileceğinizi düşündüğüm basit şey: hadoop fs -ls | wc -l – user3484461

+0

@YijieShen Daha fazla detaylandırır mısınız, lütfen? –

cevap

11

Hadoop 2.6, bunun için kullanabileceğiniz DFSInotifyEventInputStream'u kullanıma sunmuştur. Bir örneğini HdfsAdmin'dan alabilir ve tüm olayları almak için .take() veya .poll() numaralı telefonu arayın. Etkinlik türleri, aradığınız şeyi içermesi gereken silme, ekleme ve oluşturma işlemlerini içerir.

İşte temel bir örnek. Yönetici arayüzü HDFS kökü gerektirdiğinden, hdfs kullanıcısı olarak çalıştırdığınızdan emin olun.

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; 
      } 
     } 
    } 
} 

Burada daha ayrıntılı olarak kapsayan bir blog yazısı var:

http://johnjianfang.blogspot.com/2015/03/hdfs-6634-inotify-in-hdfs.html?m=1

+1

uyarı: kullanıcı dfs olaylarına erişmek için bir 'süper kullanıcı' olmalıdır .. – sureshsiva

0

Evet, Inotification ile yapabilirsiniz. Bu link'u daha iyi anlamak için HDFS işleminin ayrıntılarını inotifyier ile almanız yeterlidir.

+0

Denerim. –

+0

Devam edin, herhangi bir sorunla karşılaşırsanız bildirin. – Bector

+0

Bu yanıt, sadece bir dış siteye bağlanmaktan ziyade, ana ayrıntılar içeriyorsa daha iyi olurdu (ki bu şu anda düşüyor!) – DNA

0

Oozie koordinatörü bunu yapabilir. Oozie koordinatör eylemleri, veri kullanılabilirliğine bağlı olarak tetiklenebilir. Bir veri tetiklenen koordinatörü yazın. Koordinatör eylemleri, yapılan bayrağa göre tetiklenir. bitti-bayrak boş bir dosyadan başka bir şey değildir. Böylece eşiğinize ulaştığınızda dizine boş bir dosya yazın.