2012-05-14 86 views
1

爲了測試從java程序到HDFS的連接,是否足夠依賴FileSystem.get(配置)或者應該執行額外的完整性檢查來完成此操作?(例如:某些文件 - 例如列表,複製,刪除)測試與HDFS的連接

回答

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是否有足夠的數據節點運行以執行某些操作(如創建/打開文件)。

+0

感謝您的詳細解釋克里斯。 因此,由於作爲創建FileSystem對象的一部分涉及對namenode的RPC調用,因此不會拋出IOException的此方法應該是一個很好的檢查,以確保我們可以與namenode進行通信。正確? – Swarnim

+0

我會這麼說 –