1

JavaプログラムからHDFSへの接続をテストするには、FileSystem.get(configuration)に依存するだけで十分ですか、それとも追加の健全性チェックを実行する必要がありますか?(例:list、copy、消去)

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))、サーバーとクライアントの両方が同じ「バージョン」を話すように呼び出しが行われるため、この確認により、NameNodeが構成されたアドレスで実行されていることが確認されます。

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 に答える