JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)
Hadoop的JAVAjar包在Hadoop2.7.7/share/hadoop里有如下几个文件夹。

common是Hadoop的核心类,它是下面其他核心类的依赖,使用其他类必须引入common包里的jar包。
所以使用HDFS的FileSystem包必须引入Common和hdfs两个文件夹里面所有jar包。

红色jar包为hadoop作者所写jar包,依赖在lib里面。都必须引入。hdfs同理。
@Test public void connectHDFS() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");//指定hadoop使用的文件系统和文件系统所在主机和端口 try { FileSystem fileSystem = FileSystem.get(conf); //FileSystem 连接 FileStatus fileStatus = fileSystem.getFileLinkStatus(new Path("/user")); System.out.println(fileStatus.isDirectory()); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void upload1() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000");//连接hdfs try { FileSystem fileSystem = FileSystem.get(conf); fileSystem.copyFromLocalFile(new Path("d:\\jdk-8u221-linux-x64.tar.gz"), new Path("/jdk-8u221-linux-x64.tar.gz"));//前一个path为本地路径 后一个path为hdfs保存路径 } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace();
@Test public void upload2() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); FSDataOutputStream create = fileSystem.create(new Path("/stud")); //hdfs输出流 FileInputStream f = new FileInputStream(new File("d:\\stud")); //文件输入流 int len = 0; byte[] b = new byte[1024]; while((len = f.read(b))!=-1) { create.write(b, 0, len); } f.close(); create.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void download1() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); fileSystem.copyToLocalFile(new Path("/stud"), new Path("E:\\stud")); //前者为hdfs路径 后者为本地保存路径 } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void download2() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); FSDataInputStream open = fileSystem.open(new Path("/stud")); FileOutputStream file = new FileOutputStream(new File("E:\\stud1")); byte [] b = new byte[1024]; int len = 0; while((len = open.read(b))!=-1) { file.write(b, 0, len); } open.close(); file.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void mkdir() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); boolean mkdirs = fileSystem.mkdirs(new Path("/user/ky1")); //输入单级或多级文件夹 System.out.println(mkdirs?"创建成功":"创建失败"); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void rename() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); fileSystem.rename(new Path("/hadoop01"), new Path("/hadoop02")); //前者为修改前,后者为修改后 } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
@Test public void lsr() { Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.100.2:9000"); try { FileSystem fileSystem = FileSystem.get(conf); FileStatus[] listStatus = fileSystem.listStatus(new Path("/")); for (FileStatus fileStatus : listStatus) { isDir(fileStatus, fileSystem); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public void isDir(FileStatus fileStatus,FileSystem fileSystem) { if(fileStatus.isDirectory()) { String dirname = fileStatus.getPath().getName();
; System.out.println("文件夹:"+dirname); FileStatus[] listStatus; try { listStatus = fileSystem.listStatus(new Path("/"+dirname)); for (FileStatus fileStatus2 : listStatus) { isDir(fileStatus2,fileSystem); } } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }else { String dirname = fileStatus.getPath().getName(); System.out.println("文件:"+dirname); } }

还有许多方法用法相似 不一一赘述。

浙公网安备 33010602011771号