可以使用FileSystem
類和FSDataInputStream
類來實現將HDFS文件下載到本地。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
public class DownloadHDFSFile {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:8020");
FileSystem fs = FileSystem.get(conf);
Path hdfsFilePath = new Path("/path/to/hdfs/file");
Path localFilePath = new Path("/path/to/local/file");
FSDataInputStream in = fs.open(hdfsFilePath);
FSDataOutputStream out = new FSDataOutputStream(new FileOutputStream(localFilePath), null);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
in.close();
out.close();
fs.close();
System.out.println("HDFS file downloaded successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上面的代碼中,首先創建了一個Configuration
對象,設置了HDFS的配置信息。然后通過FileSystem.get(conf)
方法獲取一個FileSystem
對象,用來操作HDFS文件系統。
接著指定需要下載的HDFS文件的路徑hdfsFilePath
和本地文件的路徑localFilePath
。使用fs.open(hdfsFilePath)
方法打開HDFS文件,并創建一個FSDataOutputStream
對象來寫入本地文件。
然后使用一個循環讀取HDFS文件的內容,并寫入本地文件,直到文件讀取完畢。最后關閉輸入流、輸出流和文件系統對象,完成文件下載操作。
請注意,需要在項目中引入Hadoop的相關依賴包,以便能夠正常編譯和運行上面的代碼。