有没有一种方法,我可以挂接到NameNode的执行来识别被添加/修改的文件/删除从HDFS - 类似的东西到文件系统事件在Windows?
是的!最近版本的HDFS包含一个类似于Linux inotify的功能,它允许HDFS客户端监听由NameNode发布的各种文件系统事件。不幸的是,我们现在没有关于Apache Hadoop站点上的功能的明确文档。如果您想了解更多关于此功能的信息,我建议您查看Apache JIRA HDFS-6634,这是跟踪功能开发的主要问题。附件中的设计文档和补丁将让您了解它的工作原理。此外,如果您对“HDFS inotify”进行网络搜索,我希望您会发现一些有用的演示和示例。或者,如果您只需要客户端针对HDFS执行的所有操作的记录,那么解析HDFS审核日志可能就足够了。这是一个与普通HDFS日志保持在同一目录中的文件,它记录了针对NameNode执行的大多数操作的一行。 Hadoop代码库中的log4j.properties sample显示了如何启用此功能。典型的商业发行版默认启用它。
我可以编写插件,通过在NameNode和DataNode中执行自定义处理来扩展功能。
没有,没有通用的插件机制。这是一个有意的设计选择,以避免将可能较慢的自定义代码注入关键HDFS守护进程中的风险,这些守护进程预计可以很好地扩展。有几个特定的地方可以通过实现特定的Java类来进行定制,比如权限检查,但它并不是作为一种通用插件机制来挂钩任何可能的事件。
上面提到的inotify特性涉及客户端连接到NameNode和接收事件,然后,客户端可以向然而其认为合适的那些事件。但是,这不涉及在NameNode进程内执行的自定义客户端代码。
数据节点通常会为所有已复制的块发回块报告。有没有办法扩展这个数据块报告来添加自定义字段或属性?
实现这一目标的唯一方法是更改HDFS的代码并构建它并自行部署它,从本质上创建您自己的分支。这可能会导致创建不兼容的版本,而这些版本不会与Hadoop生态系统中的其他应用程序一起使用。 Hadoop RPC使用Protobuf来定义消息传递格式,如果使用正确,它可以实现前向和后向兼容性,但是您的更改可能与Apache中上游发生的发展不同。
如果您认为自己有一项功能可以让所有HDFS用户都能使用,那么您可以考虑提交一份Apache JIRA,将其作为一项功能提交给Apache Hadoop代码库。
优秀的参考文献 - 感谢提及他们:)。这确实有助于指导我的思维过程,同时牢记HDFS中的可用功能和当前局限性 –