1

为了测试从 java 程序到 HDFS 的连接,依赖 FileSystem.get(configuration) 是否足够或应该进行额外的完整性检查?(例如:一些基于文件的操作,如列表、复制、删除)

4

1 回答 1

0

FileSystem.get(Configuration) 创建一个 DistrubutedFileSystem 对象,该对象又依赖于 DFSClient 与 NameNode 对话。在源代码的深处(1.0.2 是我正在查看的版本),是为 NameNode 创建一个 RPC 的调用,它反过来为 ClientProtocol 接口创建一个代理。

当这个代理被创建时,org.apache.hadoop.ipc.RPC.getProxy(Class<? extends VersionedProtocol>, long, InetSocketAddress, UserGroupInformation, Configuration, SocketFactory, int)

VersionedProtocol proxy =
    (VersionedProtocol) Proxy.newProxyInstance(
        protocol.getClassLoader(), new Class[] { protocol },
        new Invoker(protocol, addr, ticket, conf, factory, rpcTimeout));
long serverVersion = proxy.getProtocolVersion(protocol.getName(), 
                                              clientVersion);
if (serverVersion == clientVersion) {
  return proxy;
} else {
  throw new VersionMismatch(protocol.getName(), clientVersion, 
                            serverVersion);
}

当然,此版本匹配检查不会报告 NameNode 是否有足够的数据节点运行来执行某些操作(例如创建/打开文件)。

于 2012-05-14T14:56:55.293 回答