Javaコードを使用してローカルシステムからHDFSにディレクトリをコピーしようとして問題が発生しました。個々のファイルを移動することはできますが、サブフォルダとファイルを使用してディレクトリ全体を移動する方法はわかりません。誰もそれで私を助けることができますか?前もって感謝します。ローカルシステムからhdfsにディレクトリをコピーするJavaコード
8
A
答えて
17
FileSystem
のcopyFromLocalFileメソッドを使用してください。ソースパスがローカルディレクトリの場合、HDFSの宛先にコピーされます。
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/user/directory/"),
new Path("/user/hadoop/dir"));
...
0
ここでは、HDFSに読み書きするための完全な作業コードを示します。それは私がClouderaのサンドボックスを使用
出力パス(HDFS)
入力パス(ローカル/ HDFS)の二つの引数
をとります。
package hdfsread; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; public class ReadingAFileFromHDFS { public static void main(String[] args) throws IOException { String uri = args[0]; InputStream in = null; Path pt = new Path(uri); Configuration myConf = new Configuration(); Path outputPath = new Path(args[1]); myConf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020"); FileSystem fSystem = FileSystem.get(URI.create(uri),myConf); OutputStream os = fSystem.create(outputPath); try{ InputStream is = new BufferedInputStream(new FileInputStream(uri)); IOUtils.copyBytes(is, os, 4096, false); } catch(IOException e){ e.printStackTrace(); } finally{ IOUtils.closeStream(in); } } }
+0
こんにちは、私はorg/apache/hadoop/fs/FSDataOutputStreamエラーを取得しています。 hadoop-common、hadoop-hdfsライブラリを私のpomに追加しました。私の設定にcore-site.xml、hdfs-site.xmlを追加しました。 – user4342532
関連する問題
- 1. PermissionファイルをローカルシステムからSTS javaプログラムからHDFSにコピーするときに犠牲にしました
- 2. 1つのHDFSディレクトリから別のHDFSディレクトリにデータを連続的にコピーする
- 3. oozieのdistcpアクションで別のHDFSディレクトリからファイルをコピーする
- 4. JAVAを使用してHDFSからローカルファイルシステムにファイルをコピーする
- 5. ファイルをHDFSからローカルマシンにコピーする
- 6. JAFSを使用してHDFSの1つのディレクトリからHDFSの別のディレクトリにコピー
- 7. hdfsからリモートマシンへのコピー
- 8. HDFSはDistcp S3に - S3バケットにHDFSからファイルをコピーするためのアクセスキー
- 9. JAFS APIを使用してHDFSのディレクトリをコピーする
- 10. ローカルシステムからサーバにディレクトリを置くFTPコマンド
- 11. jarからローカルフォルダにディレクトリをコピーする
- 12. JavaのHDFSから特定の名前で始まるディレクトリを削除する
- 13. Hadoop 2.7 - HDFSでディレクトリを作成するための簡単なJavaコード
- 14. C#(Windowsアプリ)でローカルシステムから他のシステムにファイルをコピーするには?
- 15. HDFS:ディレクトリを削除する
- 16. ubuntuスクリプトをあるディレクトリから別のディレクトリにコピーする
- 17. あるディレクトリから別のディレクトリにファイルをコピーする
- 18. あるディレクトリから別のディレクトリにファイルをコピーする
- 19. ファイルをHDFSにコピーするには?
- 20. ディレクトリからファイルを別のディレクトリにコピーする方法
- 21. ディレクトリから別のディレクトリにファイルをコピーする
- 22. S3からHDFSにコピーして解凍する
- 23. SFTPサーバーからJavaを使用してローカルシステムにファイルを転送
- 24. ファイルをHDFS Hadoopにコピー
- 25. HDFS-冗長コピー
- 26. アシスタント:新しいユーザを作成し、ローカルシステムからsshキーをコピーする
- 27. ディレクトリ構造をJavaで維持しながらリストからファイルをコピーする
- 28. ディレクトリをHDFSでファイル化する方法Hadoop(Cloudera)java
- 29. は、複数のディレクトリにファイルをコピーするのいずれかのコードのディレクトリ
- 30. アルファベット順にローカルからHDFSにファイルをコピー - ソート
どのバージョンのHadoopを使用していますか? 'bin/hadoop dfs -copyFromLocal folder'は' folder'をコピーして再帰的にすべてをコピーします。ディレクトリが 'ファイル'ではないため、 –
です。再帰的にディレクトリを作成し、ファイルを1つずつ移動する必要があります(必要に応じて並行して実行できます)。もちろん、この操作はアトミックではないことに注意してください。失敗すると、いくつかのファイルがhdfsで未処理のまま残されます。 – octo