通過IO流操作 HDFS程式碼實現
阿新 • • 發佈:2018-12-19
HDFS檔案上傳
@Test /** * HDFS檔案上傳 */ public void putFileToHDFS() throws URISyntaxException, IOException, InterruptedException { //1.獲取檔案系統 Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root"); //2.建立輸入流 FileInputStream fis = new FileInputStream(new File("e:/hostsmap.txt")); //3.獲取輸出流 FSDataOutputStream fos = fs.create(new Path("/114.txt")); //4.流對拷 IOUtils.copyBytes(fis,fos,configuration); //5.關閉資源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); }
HDFS檔案下載
/** * HDFS檔案的下載 */ @Test public void getFileFromHDFS() throws URISyntaxException, IOException, InterruptedException { //1 獲取檔案系統 Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root"); //2 獲取輸入流 FSDataInputStream fis = fs.open(new Path("/114.txt")); //3 獲取輸出流 FileOutputStream fos = new FileOutputStream(new File("e:/wo114.txt")); //4 流的對拷 IOUtils.copyBytes(fis,fos,configuration); //5 關閉資源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fs.close(); }
HDFS檔案的定位某一塊進行下載
下載第一塊
/** * 下載第一塊 */ @Test public void readFileSeek() throws InterruptedException, IOException, URISyntaxException { //1 獲取檔案系統 Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root"); //2 獲取輸入流 FSDataInputStream fis = fs.open(new Path("/user/hadoop-2.7.2.tar.gz")); //3 建立輸出流 FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part1")); //4 流的拷貝 byte[] buf = new byte[1024]; for (int i = 0; i < 1024*128; i++) { fis.read(buf); fos.write(buf); } //5 關閉資源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); }
下載第二塊
/**
* 下載第二塊
*/
@Test
public void readFileSeek2() throws URISyntaxException, IOException, InterruptedException {
//1 獲取檔案系統
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root");
//2 開啟輸入流
FSDataInputStream fis = fs.open(new Path("/user/hadoop-2.7.2.tar.gz"));
//3 定位輸入資料位置
fis.seek(1024*1024*128);
//4 建立輸出流
FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part2"));
//5 流的對拷
IOUtils.copyBytes(fis,fos,configuration);
//6 關閉資源
IOUtils.closeStream(fos);
IOUtils.closeStream(fis);
}
合併檔案
找到檔案所在位置,搜尋欄搜尋cmd 在 window 命令視窗中執行 type hadoop-2.7.2.tar.gz.part2 >> hadoop-2.7.2.tar.gz.part1 重新命名檔名:hadoop-2.7.2.tar.gz.part1為hadoop-2.7.2.tar.gz