HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件)。HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的。
通过Java API接口对HDFS进行操作,我将其整理成工具类,地址见底部
1、获取文件系统
1 /**
2 * 获取文件系统3 *4 *@returnFileSystem5 */
6 public staticFileSystem getFileSystem() {7 //读取配置文件
8 Configuration conf = newConfiguration();9 //文件系统
10 FileSystem fs = null;11
12 String hdfsUri =HDFSUri;13 if(StringUtils.isBlank(hdfsUri)){14 //返回默认文件系统 如果在 Hadoop集群下运行,使用此种方法可直接获取默认文件系统
15 try{16 fs =FileSystem.get(conf);17 } catch(IOException e) {18 logger.error("", e);19 }20 }else{21 //返回指定的文件系统,如果在本地测试,需要使用此种方法获取文件系统
22 try{23 URI uri = newURI(hdfsUri.trim());24 fs =FileSystem.get(uri,conf);25 } catch (URISyntaxException |IOException e) {26 logger.error("", e);27 }28 }29
30 returnfs;31 }
2、创建文件目录
1 /**
2 * 创建文件目录3 *4 *@parampath5 */
6 public static voidmkdir(String path) {7 try{8 //获取文件系统
9 FileSystem fs =getFileSystem();10
11 String hdfsUri =HDFSUri;12 if(StringUtils.isNotBlank(hdfsUri)){13 path = hdfsUri +path;14 }15
16 //创建目录
17 fs.mkdirs(newPath(path));18
19 //释放资源
20 fs.close();21 } catch (IllegalArgumentException |IOException e) {22 logger.error("", e);23 }24 }
3、