ローカルシステムからHDFSにファイルをコピーするための簡単なJavaコードを試しています。JavaコードからファイルをHadoop HDFSにコピーするときに、 "確立された接続がホストマシンのソフトウェアによって中止されました"
private static void copyFileToHDFS() throws IOException
{
config.set("fs.defaultFS","hdfs://127.0.0.1:9000");
FileSystem hdfs = FileSystem.get(config);
Path localfsSourceDir = new Path("D:\\file1");
Path hdfsTargetDir = new Path ("hdfs://127.0.0.1:9000/dir/");
hdfs.copyFromLocalFile(localfsSourceDir, hdfsTargetDir); //throws Exception
}
これが私の最後の行に次の例外与えている:これは私の簡単な方法はどのように見えるかである私のセットアップ
Exception in thread "main" java.io.IOException: Failed on local exception: java.io.IOException: An established connection was aborted by the software in your host machine; Host Details : local host is: "01hw713648/10.163.5.139"; destination host is: "127.0.0.1":9000;
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:773)
at org.apache.hadoop.ipc.Client.call(Client.java:1479)
at org.apache.hadoop.ipc.Client.call(Client.java:1412)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
at $Proxy9.getFileInfo(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:771)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
at $Proxy10.getFileInfo(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2108)
at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1305)
at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1301)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1301)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1424)
at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:496)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:348)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:338)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1965)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1933)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1898)
at HBaseImportTsvBulkLoader.copyFileToHDFS(HBaseImportTsvBulkLoader.java:64)
at HBaseImportTsvBulkLoader.main(HBaseImportTsvBulkLoader.java:37)
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.apache.hadoop.net.SocketInputStream$Reader.performIO(SocketInputStream.java:57)
at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:142)
at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:161)
at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:131)
at java.io.FilterInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at org.apache.hadoop.ipc.Client$Connection$PingInputStream.read(Client.java:520)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.DataInputStream.readInt(Unknown Source)
at org.apache.hadoop.ipc.Client$Connection.receiveRpcResponse(Client.java:1084)
at org.apache.hadoop.ipc.Client$Connection.run(Client.java:979)
を私はUbuntuのVMの実行中にHadoopクラスタを実行していますVirtualBox(これはWindows上で実行されている)上にある。私は完璧に走っています。私はWindows上でこのJavaコードを実行しています。私はパテまた
- を:私はVM上のさまざまなサービスに接続することができます
Name Protocol Host-ip Host-port Guest-Ip Guest-port datanode tcp <left empty> 50075 <guest-ip> 50075 dfs web ui tcp <left empty> 50070 <guest-ip> 50070 mapred apps tcp <left empty> 8088 <guest-ip> 8088 hbase web ui tcp <left empty> 16010 <guest-ip> 16010 hdfs tcp <left empty> 9000 <guest-ip> 9000 regionserver web ui tcp <left empty> 16301 <guest-ip> 16301 ssh tcp <left empty> 22 <guest-ip> 22
を次のように私はバーチャルボックスのポート転送ルールを設定していますWindowsの内部ブラウザで様々なHadoopのウェブUIを開くことができる:
を名前ノードのWeb UIを、HMASTERのWebUIの、リージョンサーバーのWebUIの更新
同様のエラーが発生するが、Hadoopのコンテキストではない一部のオンラインソリューションでは、eclipseを再起動することを推奨しています。だから、私はそれを試しました。もう少し違うエラーが発生する:
Exception in thread "main" java.io.IOException: Failed on local exception: java.io.IOException: An existing connection was forcibly closed by the remote host; Host Details : local host is: "01hw713648/10.163.5.139"; destination host is: "127.0.0.1":9000;
正確に同じスタックトレースを持つ。