通过Java程序对hdfs文件系统进行操作
1.创建文件夹
public class MkDir {
/**
* @param args
* @throws Exception
* 1.获取文件系统对象
* 1.1 获取配置信息
* 1.2 获取hdfs(文件系统)路径
* 1.3 得到文件系统对象
*2.创建文件夹
*3.关闭文件系统
*/
public static void main(String[] args) throws Exception {
// * 1.获取文件系统对象
// * 1.1 获取配置信息
Configuration configuration = new Configuration();
// * 1.2 获取hdfs(文件系统)路径
URI path = new URI("hdfs://192.168.56.100:9000");
// * 1.3 得到文件系统对象
FileSystem fileSystem = FileSystem.get(path, configuration);
// *2.创建文件夹
fileSystem.mkdirs(new Path("/park05"));
// *3.关闭文件系统
fileSystem.close();
}
}
可以看到想要通过java程序操纵文件系统只需要获取文件系统通过这个文件系统对象我们就可以对hdfs进行operation操作
因此我们可以对获取文件系统对象这一步进行一个简单封装
public class FilesysUtil {
//hdfs路径
private static final String path="hdfs://192.168.56.100:9000";
public static FileSystem getFileSys()
{
Configuration configuration = new Configuration();
FileSystem fileSystem=null;
try {
fileSystem = FileSystem.get(new URI(path), configuration);
} catch (IOException | URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileSystem;
}
}
2.文件的拷贝(本地->>hdfs )分别有流的方式
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
/**
* @author
*
* 通过流的方式实现文件的拷贝
*
*/
public class Uploadtxt {
public static void main(String[] args) throws Exception {
//1.获取文件系统
FileSystem fileSys = FilesysUtil.getFileSys();
//2.创建输出流
OutputStream fout = fileSys.create(new Path("/park05/a.txt"));
//3.创建输入流
FileInputStream fin = new FileInputStream("a.txt");
//4.进行拷贝
IOUtils.copy(fin, fout);
//资源关闭
fin.close();
fout.close();
fileSys.close();
}
}
3.文件下载(hdfs–》本地)流的方式
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class GetFiletxt {
public static void main(String[] args) throws Exception {
//1.获取文件系统
FileSystem fileSys = FilesysUtil.getFileSys();
//2.获取文件的输入流
InputStream open = fileSys.open(new Path("/park05/a.txt"));
//3.获取文件输出流
OutputStream fout = new FileOutputStream("locala.txt");
//4.流拷贝
IOUtils.copy(open,fout);
//关闭资源
open.close();
fout.close();
fileSys.close();
}
}
4.使用文件系统对象提供的方法进行一系列文件操作
import java.io.IOException;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FilesysMdsuse {
private FileSystem fileSys=null;
public FilesysMdsuse() {
fileSys =FilesysUtil.getFileSys();
}
//hdfs 和 本地文件的 复制
public void copyTest() throws Exception {
fileSys.copyFromLocalFile(new Path("src"), new Path("dst"));
fileSys.copyToLocalFile(new Path(""), new Path(""));
}
//文件的删除
public void deletefile() throws IllegalArgumentException, IOException {
fileSys.deleteOnExit(new Path(""));
}
//文件的重命名(文件移动) hdfs系统
public void renameFile() throws IllegalArgumentException, IOException {
fileSys.rename(new Path(""), new Path(""));
}
//文件 hdfs-本地之间的move
public void move() throws IllegalArgumentException, IOException
{
fileSys.moveFromLocalFile(new Path(""),new Path(""));
fileSys.moveToLocalFile(new Path(""),new Path(""));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}