HDFS学习之客户端API操作
2021-03-04 09:25
标签:mamicode dfs ati inux 系统 ons tst ring getname org.apache.hadoop.fs.FileSystem是Hadoop中一个相当通用的文件系统的抽象基类,它是一个面向最终用户的接口类。应该将所有可能使用Hadoop分布式文件系统的用户代码编写为使用一个FileSystem对象。Hadoop DFS是一种多机系统,显示为单个磁盘,由于其容错能力和潜在的超大容量而非常有用。 当使用Hadoop的API进行开发,使用HDFS文件系统的时候,必定会用到Hadoop中的FileSystem抽象类,通过FileSystem类的get的方法获取FileSystem的实例,并通过该实例来进行文件系统的操作。注意,该类是一个抽象类,并不能直接通过new关键字创建对象,而是通过静态工厂方法获取具体的对象。获取方式有以下两种: 这两种方法区别在于参数的数量不相同,第一种需要文件系统的访问地址,也就是这个文件系统对象是基于哪个filesystem的;第二个参数就是Configuration对象,该对象主要用于加载配置文件,第三个参数是作为哪个用户执行get方法。 第二种方法,参数只有一个,就是Configuration对象,如果Configuration对象事先没有指定文件系统的地址,那么就会默认访问本地的文件系统。 一、文件上传操作 二、文件下载 三、文件删除 四、文件重命名 五、查看文件的详细信息 输出结果: 六、判断所给的路径f是文件还是文件夹 当前路径下内容: 程序输出结果: HDFS学习之客户端API操作 标签:mamicode dfs ati inux 系统 ons tst ring getname 原文地址:https://www.cnblogs.com/yxym2016/p/12943600.html /**
* Get a filesystem instance based on the uri, the passed
* configuration and the user
* @param uri of the filesystem
* @param conf the configuration to use
* @param user to perform the get as
* @return the filesystem instance
* @throws IOException
* @throws InterruptedException
*/ public static FileSystem get(final URI uri, final Configuration conf,
final String user) throws IOException, InterruptedException {
……
}
/**
* Returns the configured filesystem implementation.
* @param conf the configuration to use
*/
public static FileSystem get(Configuration conf) throws IOException {
return get(getDefaultUri(conf), conf);
} public void testClient() throws IOException, URISyntaxException, InterruptedException {
// 1.获取文件系统
Configuration conf = new Configuration();
// 配置在集群上运行// get方法的三个参数final URI uri, final Configuration conf,final String user
// 根据给定的URI、传递的配置信息以及用户名,获取文件系统实例
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"), conf, "fym000");
fs.copyFromLocalFile(new Path("F:/jdk/jdk-8u144-linux-x64.tar.gz"),new Path("/fym/pyx/kak/jdk-8u144-linux-x64.tar.gz"));
// 关闭资源
fs.close();
}
@Test
public void downloadFile() throws URISyntaxException, IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"),conf,"fym000");
// boolean delSrc, 是否在下载完成后将源文件删除
// Path src, 要下载的文件路径
// Path dst, 文件下载后要保存的路径
// boolean useRawLocalFileSystem 是否使用本地文件系统,因为本地文件系统并不是CRC文件系统,
// 所以使用本地文件系统不会产生crc文件
fs.copyToLocalFile(false,new Path("/fym/pyx/lll/520.txt"),new Path("./"),true);
fs.close();
}
@Test
public void deleteFile() throws URISyntaxException, IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"),conf,"fym000");
// Path f, boolean recursive
// 第一个参数是在HDFS上要删除的文件的路径;第二个参数是如果给定的路径是一个文件夹,则设置为true进行递归删除,否则会报出异常
fs.delete(new Path("/fym/pyx/lll/523.txt"),true);
fs.close();
}
@Test
public void renameFile() throws URISyntaxException, IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"),conf,"fym000");
// Renames Path src to Path dst.
fs.rename(new Path("/fym/pyx/lll/520.txt"),new Path("/fym/pyx/lll/525.txt"));
fs.close();
}
@Test
public void listFiles() throws URISyntaxException, IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"), conf, "fym000");
RemoteIterator
jdk-8u144-linux-x64.tar.gz
185515842
rw-r--r--
supergroup
托管此块的主机列表(主机名)
hadoop103
hadoop101
hadoop102
获取托管块的缓存副本的主机列表(主机名)
获取块的长度
134217728
获取托管此块的名称列表(IP:xferPort)
192.168.182.103:50010
192.168.182.101:50010
192.168.182.102:50010
获取与此块关联的文件的起始偏移量
0
托管此块的主机列表(主机名)
hadoop103
hadoop101
hadoop102
获取托管块的缓存副本的主机列表(主机名)
获取块的长度
51298114
获取托管此块的名称列表(IP:xferPort)
192.168.182.103:50010
192.168.182.101:50010
192.168.182.102:50010
获取与此块关联的文件的起始偏移量
134217728
**********************************
public void isFileorDir() throws URISyntaxException, IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"), conf, "fym000");
// 参数 Path f
// 如果路径f是目录,列出给定路径中文件/目录的状态。
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus status : listStatus) {
if(status.isDirectory()){
System.out.println("dir:"+status.getPath().getName());
}else {
System.out.println("fil"+status.getPath().getName());
}
}
fs.close();
}
dir:fym
dir:sanguo