Hadoop NameNode和DataNode插件

Hadoop NameNode和DataNode插件,hadoop,Hadoop,我目前对Hadoop生态系统和HDFS体系结构有一些初级的理解 然而,我想了解以下关于HDFS的更深层次的方面: 是否有一种方法可以挂接到NameNode执行中,以识别从HDFS添加/修改/删除的文件-类似于Windows中的文件系统事件 我可以编写插件,通过执行NameNode和DataNode中的自定义处理来扩展功能吗 数据节点通常会传回已在其上复制的所有块的块报告。是否有方法扩展此数据块报告以添加自定义字段或属性 任何针对上述问题的建议都会很好 提前谢谢你的帮助 是否有一种方法可以挂接

我目前对Hadoop生态系统和HDFS体系结构有一些初级的理解

然而,我想了解以下关于HDFS的更深层次的方面:

  • 是否有一种方法可以挂接到NameNode执行中,以识别从HDFS添加/修改/删除的文件-类似于Windows中的文件系统事件
  • 我可以编写插件,通过执行NameNode和DataNode中的自定义处理来扩展功能吗
  • 数据节点通常会传回已在其上复制的所有块的块报告。是否有方法扩展此数据块报告以添加自定义字段或属性
任何针对上述问题的建议都会很好

提前谢谢你的帮助

是否有一种方法可以挂接到NameNode执行中,以识别从HDFS添加/修改/删除的文件-类似于Windows中的文件系统事件

对!!HDFS的最新版本包含类似的功能,该功能允许HDFS客户端侦听NameNode发布的各种文件系统事件。不幸的是,我们目前在ApacheHadoop站点上没有关于该特性的清晰文档。如果您想了解有关此功能的更多信息,那么我建议您查看ApacheJira,这是跟踪此功能开发的主要问题。随附的设计文档和补丁将让您了解其工作原理。另外,如果您在web上搜索“HDFS inotify”,我希望您能找到一些有用的演示和示例

或者,如果您只需要客户端对HDFS执行的所有操作的记录,那么解析HDFS审核日志就足够了。这是一个与常规HDFS日志保存在同一目录中的文件,它记录了针对NameNode执行的大多数操作的行。Hadoop代码库中的示例演示了如何启用此功能。典型的商业发行版默认启用了它

我可以编写插件,通过执行NameNode和DataNode中的自定义处理来扩展功能吗

不,没有通用插件机制。这是一个有意的设计选择,以避免将可能较慢的自定义代码注入关键HDFS守护进程的风险,这些守护进程预计可以很好地扩展。有几个特定的点可以通过实现一个特定的Java类来定制,比如权限检查,但它并不是用来作为一个通用插件机制来连接任何可能的事件

上面提到的inotify特性涉及一个连接到NameNode并接收事件的客户端,然后客户端可以根据自己的需要对这些事件做出响应。但是,这并不涉及在NameNode进程中执行自定义客户端代码

数据节点通常会传回已在其上复制的所有块的块报告。是否有方法扩展此数据块报告以添加自定义字段或属性

实现这一点的唯一方法是更改HDFS的代码,自己构建和部署它,本质上是创建自己的fork。这将有可能创建一个不兼容的版本,无法与Hadoop生态系统中的其他应用程序一起工作。Hadoop RPC使用Protobuf来定义消息传递格式,如果使用正确,它可以实现向前和向后兼容性,但是您的更改可能与Apache中上游的开发有所不同


如果你认为你对块报告有一个特点,通常对所有的HDFS用户都是有用的,那么你可以考虑提交一个Apache JIRA来把它作为一个特性,并把它放到Apache Hadoop代码库中。

优秀的参考文献-谢谢你提到它们。这确实有助于指导我的思考过程,同时牢记HDFS中可用的特性和当前的限制