HDFS 文件上传
编写源代码
@TestpublicvoidtestCopyFromLocalFile()throwsIOException, InterruptedException, URISyntaxException { // 1 获取文件系统 Configuration configuration = new Configuration(); configuration.set("dfs.replication", "2"); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 上传文件 fs.copyFromLocalFile(new Path("e:/ceshi.txt"), new Path("/ceshi.txt")); // 3 关闭资源 fs.close(); System.out.println("over");}
将hdfs-site.xml 拷贝到项目的根目录下
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>dfs.replication1
参数优先级
参数优先级排序:
(1)客户端代码中设置的值。
(2)ClassPath 下的用户自定义配置文件 。
(3)然后是服务器的默认配置。
HDFS 文件下载
@Testpublic void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{ // 1 获取文件系统 Configuration configuration = new Configuration(); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 执行下载操作 // boolean delSrc 指是否将原文件删除 // Path src 指要下载的文件路径 // Path dst 指将文件下载到的路径 // boolean useRawLocalFileSystem fs.copyToLocalFile(false, new Path("/ceshi.txt"), new Path("e:/ceshi.txt"), true); // 3 关闭资源 fs.close(); }
是否开启 crc 文件校验,true为本地文件方式,表示不开启 crc 校验,如果是 false,会下载一个.crc 文件,Crc 在数据完整性的时候会涉及。
HDFS 文件夹删除
@Testpublic void testDelete() throws IOException, InterruptedException, URISyntaxException{ // 1 获取文件系统 Configuration configuration = new Configuration(); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 执行删除 fs.delete(new Path("/ceshi/"), true); // 3 关闭资源 fs.close();}
HDFS 文件名更改
@Testpublic void testRename() throws IOException, InterruptedException, URISyntaxException{ // 1 获取文件系统 Configuration configuration = new Configuration(); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 修改文件名称 fs.rename(new Path("/ceshi.txt"),new Path("/ceshi.txt")); // 3 关闭资源 fs.close();}
HDFS 文件详情查看
查看文件名称、权限、长度、块信息
@Testpublic void testListStatus() throws IOException, InterruptedException, URISyntaxException{ // 1 获取文件系统 Configuration configuration = new Configuration(); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 获取文件详情 RemoteIterator listFiles = fs.listFiles(new Path("/"), true); while(listFiles.hasNext()){ LocatedFileStatus status = listFiles.next(); // 输出详情 // 文件名称 System.out.println(status.getPath().getName()); // 长度 System.out.println(status.getLen()); // 权限 System.out.println(status.getPermission()); // 分组 System.out.println(status.getGroup()); // 获取存储的块信息 BlockLocation[] blockLocations = status.getBlockLocations(); for (BlockLocation blockLocation : blockLocations) { // 获取块存储的主机节点 String[] hosts = blockLocation.getHosts(); for (String host : hosts) { System.out.println(host);} } System.out.println("-----------班长的分割线"); }// 3 关闭资源fs.close();}
HDFS 文件和文件夹判断
@Testpublic void testListStatus() throws IOException, InterruptedException, URISyntaxException{ // 1 获取文件配置信息 Configuration configuration = new Configuration(); FileSystemfs=FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "hd"); // 2 判断是文件还是文件夹 FileStatus[] listStatus = fs.listStatus(new Path("/")); for (FileStatus fileStatus : listStatus) { // 如果是文件 if (fileStatus.isFile()) { System.out.println("f:"+fileStatus.getPath().getName()); }else { System.out.println("d:"+fileStatus.getPath().getName()); } } // 3 关闭资源 fs.close();}
通过源码查看 LocatedFileStatus 是 FileStatus 的子类,多了块信息