【问题标题】:Hadoop NameNode and DataNode plug-insHadoop NameNode 和 DataNode 插件
【发布时间】:2017-01-24 17:15:13
【问题描述】:

我目前对 Hadoop 生态系统和 HDFS 架构有一定程度的了解。

我想了解以下有关 HDFS 的一些更深层次的方面:

  • 有没有办法可以挂钩到 NameNode 执行以识别从 HDFS 添加/修改/删除的文件 - 类似于 Windows 中的文件系统事件?
  • 我能否编写插件,通过执行 NameNode 和 DataNode 中存在的自定义处理来扩展功能。
  • 数据节点通常会针对已在它们之间复制的所有块发送回一个块报告。有没有办法扩展此数据块报告以添加自定义字段或属性?

任何指向上述问题的指针都会很棒。

提前感谢您的帮助

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    有没有办法可以挂钩到 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 的代码并自己构建和部署,本质上是创建自己的 fork。这可能会创建一个不兼容的版本,该版本无法与 Hadoop 生态系统中的其他应用程序一起使用。 Hadoop RPC 使用 Protobuf 来定义消息格式,如果使用得当,它可以实现向前和向后兼容,但您的更改可能会与 Apache 上游的开发发生分歧。

    如果您认为自己有一个对所有 HDFS 用户普遍有用的块报告功能,那么您可以考虑提交 Apache JIRA 以将其作为一项功能提出并将其纳入 Apache Hadoop 代码库。

    【讨论】:

    • 优秀的参考资料 - 感谢您提及它们 :)。这确实有助于指导我的思考过程,牢记 HDFS 中的可用功能和当前限制
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多