HDFS是文件系統,就可以對其文件進行操作,比如說新建、刪除、讀取文件內容等操作。下面使用JAVA API對HDFS中的文件進行操作的過程。
對分HDFS中的文件操作主要涉及一下幾個類:
Configuration類:該類的對象封轉了客戶端或者服務器的配置。
FileSystem類:該類的對象是一個文件系統對象,可以用該對象的一些方法來對文件進行操作。
FileSystem fs = FileSystem.get(conf);通過FileSystem的靜態方法get獲得該對象,此類是抽象類得到的是DistributedFileSystem。
FSDataInputStream和FSDataOutputStream:這兩個類是HDFS中的輸入輸出流。分別通過FileSystem的open方法和create方法獲得。
簡單示例:
package com.test.hadoop.hdfs;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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;
import org.junit.Before;
import org.junit.Test;
public class HDFSDemo {
private FileSystem fs = null;
/**
* 首先創建filesystem的實現類,他是一個工具類,僞裝爲root用戶,否則沒有權限
*/
@Before
public void init(){
try {
URI uri = new URI("hdfs://hadoop:9000");
Configuration conf = new Configuration();
fs = FileSystem.get(uri, conf ,"root");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件上傳
*/
@Test
public void testUpload(){
try {
//讀取本地文件系統
InputStream in = new FileInputStream("G://scrt73-x64.exe");
//上傳到hdfs中的文件位置,名稱
Path path = new Path("/test.exe");
//返回輸出流
OutputStream out = fs.create(path);
//將輸入拷貝到輸出,
IOUtils.copyBytes(in, out, 4096, true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件下載,不適用輸入輸出流的形式
*/
@Test
public void testDownls(){
Path src = new Path("/test.exe");
Path dst = new Path("G://aa.ext");
try {
//將hdfs中的src拷貝到本地文件新dst,實現下載
fs.copyToLocalFile(src, dst);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 刪除文件
*/
@Test
public void delete(){
Path path = new Path("/jdkjdk");
try {
//false,true是否遞歸刪除
boolean status = fs.delete(path, false);
System.out.println(status);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 創建文件夾
*/
@Test
public void testMkdir(){
Path path = new Path("/temp");
try {
boolean status = fs.mkdirs(path);
System.out.println(status);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件下載
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
URI uri = new URI("hdfs://hadoop:9000");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(uri, conf);
Path path = new Path("/log");//hdfs中
InputStream in = fs.open(path);
//linux中--window
OutputStream out = new FileOutputStream("G://xx.xx");
IOUtils.copyBytes(in, out, 4096, true);
}
}