2015-04-30 80 views
7

我可以有文件觀察器HDFSHDFS文件觀察器

方案: 文件被降落在HDFS continuously.I希望一旦文件的數量達到閾值開始星火工作(可以是文件的文件的數量和大小)。

是否可以在HDFS上實現文件觀察器來實現這一點。如果是的話,那麼任何人都可以提出實現的方法嗎?有哪些不同的選擇? Zookeeper或Oozie能做到嗎?

任何幫助將不勝感激。謝謝。

+0

Spark Streaming有一個類似的功能:在[FileInputDStream](https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream .scala#172-172) –

+2

我能想到的簡單事情就是可以使用像這樣的unix命令:hadoop fs -ls | wc -l – user3484461

+0

@YijieShen請你詳細說明一下嗎? –

回答

11

Hadoop 2.6介紹DFSInotifyEventInputStream,你可以使用它。您可以從HdfsAdmin得到它的一個實例,然後只需撥打.take().poll()即可獲取所有事件。事件類型包括刪除,附加和創建應該涵蓋你要找的東西。

下面是一個基本的例子。請確保您將其作爲hdfs用戶運行,因爲管理界面需要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; 
      } 
     } 
    } 
} 

這裏是一個覆蓋比較詳細一篇博客文章:

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

+1

警告:用戶必須是「超級用戶」才能訪問dfs事件。 – sureshsiva

0

是的,你可以用Inotification做到這一點。您只需要通過無意義的方式獲得HDFS交易的詳細信息,以便更好地理解,請閱讀link

+0

我會試一試。 –

+0

繼續,讓我知道你是否面臨任何問題。 – Bector

+0

如果包含主要細節,這個答案會更好,而不僅僅是連接到外部網站(目前看起來已經停止了!) – DNA

0

Oozie協調員可以做到這一點。 Oozie協調員操作可以基於數據可用性進行觸發。編寫一個數據觸發協調器。協調器動作根據完成標誌觸發。完成標誌只不過是一個空文件。所以,當達到你的閾值時,在目錄中寫入一個空文件。