我目前对Hadoop生态系统和HDFS架构有一些初学者的了解。
我想了解一些关于HDFS的以下更深层次的方面:
对上述问题的任何指示都会很棒。
提前感谢您的帮助
答案 0 :(得分:2)
有没有办法可以挂钩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代码库。