java - 在 hdfs 目录中创建文件时如何获得通知
问题描述
我有一个 hdfs 目录,其中将定期创建文件。当在其子目录中创建文件时,我需要得到通知,以便我可以开始从该 hdfs 位置读取文件并将内容发送到 kafka 主题。我发现这可以使用 HDFS iNotify 来完成。但也有一些缺点,比如它不是 hdfs 目录,而是在 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 目录中查找创建文件事件。
解决方案
您可以使用 HSFAdmin API 并监视 Event.create (hdfs.inotify.event.type) 以及要观看的 HDFS 路径 (hdfs.inotify.event.path)
推荐阅读
- swift - Xcode 中的 Swift 内存位置 - 字符串摘要
- django - 从 Django 中的表单数据读取 CSV 文件时出现“ValueError: I/O operation on closed file”
- java - 如何在无向图中获取从源到目的地的路径计数(基于非零)?
- swift - 为什么不工作 == 在两个相似的日期之间
- javascript - 有没有办法在带有反应的消息中添加文本
- monero - jtgrassie monero-pool 我的哈希率始终为 0
- javascript - 尝试显示隐藏文字,文字不断消失
- r - 具有间歇行变量的整齐数据
- java - 为什么更改二维数组中的一个条目会更改整个列?
- mysql - 在 MYSQL 8 中计算分层数据库中每个节点拥有的值