JavaプログラムからHDFSへの接続をテストするには、FileSystem.get(configuration)に依存するだけで十分ですか、それとも追加の健全性チェックを実行する必要がありますか?(例:list、copy、消去)
1 に答える
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でいくつかのアクション(ファイルの作成/開くなど)を実行するのに十分なデータノードが実行されているかどうかは、このバージョン一致チェックでは報告されません。