我可以有文件觀察器對HDFS?HDFS文件觀察器
方案: 文件被降落在HDFS continuously.I希望一旦文件的數量達到閾值開始星火工作(可以是文件的文件的數量和大小)。
是否可以在HDFS上實現文件觀察器來實現這一點。如果是的話,那麼任何人都可以提出實現的方法嗎?有哪些不同的選擇? Zookeeper或Oozie能做到嗎?
任何幫助將不勝感激。謝謝。
我可以有文件觀察器對HDFS?HDFS文件觀察器
方案: 文件被降落在HDFS continuously.I希望一旦文件的數量達到閾值開始星火工作(可以是文件的文件的數量和大小)。
是否可以在HDFS上實現文件觀察器來實現這一點。如果是的話,那麼任何人都可以提出實現的方法嗎?有哪些不同的選擇? Zookeeper或Oozie能做到嗎?
任何幫助將不勝感激。謝謝。
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
警告:用戶必須是「超級用戶」才能訪問dfs事件。 – sureshsiva
Oozie協調員可以做到這一點。 Oozie協調員操作可以基於數據可用性進行觸發。編寫一個數據觸發協調器。協調器動作根據完成標誌觸發。完成標誌只不過是一個空文件。所以,當達到你的閾值時,在目錄中寫入一個空文件。
Spark Streaming有一個類似的功能:在[FileInputDStream](https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream .scala#172-172) –
我能想到的簡單事情就是可以使用像這樣的unix命令:hadoop fs -ls | wc -l – user3484461
@YijieShen請你詳細說明一下嗎? –