HDFS API的简单使用
需要配置的pom.XML文件
需要在<dependencies></dependencies>
中添加如下内容
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在Test文件夹中创建Text文件,简单练习
引入的包
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;
import java.net.URI;
import java.net.URISyntaxException;
使用API连接虚拟机,并上传一个文件
/**
* @Test代表是个测试方法
* 上传文件到HDFS
* @throws URISyntaxException
*/
@Test
public void putHdfs() throws Exception {
Configuration config = new Configuration();
/**连接文件,连接的是namenode所在的节点,root是用户名*/
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata2:9000"), config, "root");
/**复制文件,不删除E盘的源文件,但是会覆盖linux上的同名文件*/
fs.copyFromLocalFile(new Path("E:\\a.png"),new Path("hdfs://bigdata2:9000/a.png"));
fs.close();
}
创建文件夹,修改文件夹名称,查看文件详情,判断是否是文件夹,删除文件夹
代码如下:
@Test
/**创建文件夹,修改文件夹名称,查看文件详情,判断是否是文件夹,删除文件夹*/
public void dirHdfs() throws Exception {
Configuration config = new Configuration();
/**连接文件*/
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata2:9000"), config, "root");
fs.mkdirs(new Path("hdfs://bigdata2:9000/user"));
System.out.println("创建文件夹");
/**文件夹改名*/
fs.rename(new Path("hdfs://bigdata2:9000/user"),new Path("hdfs://bigdata2:9000/aaa"));
System.out.println("user文件夹改名为aaa");
/**查看文件详情*/
RemoteIterator<LocatedFileStatus> listfile = fs.listFiles(new Path("/"),true);
while(listfile.hasNext()){
LocatedFileStatus fileStatus = listfile.next();
System.out.println("文件名:" + fileStatus.getPath().getName());
System.out.println("文件块大小" + fileStatus.getBlockSize());
System.out.println("文件权限" + fileStatus.getPermission());
System.out.println("文件大小" + fileStatus.getLen());
}
/**判断是文件还是文件夹,也可以使用status.isFile();方法来进行判断*/
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status : listStatus){
if (status.isDirectory()){
System.out.println("文件夹:"+status.getPath().getName());
}else if(status.isFile()){
System.out.println("文件:"+status.getPath().getName());
}
}
/**删除文件夹*/
fs.delete(new Path("hdfs://bigdata2:9000/aaa"),true);
System.out.println("文件夹aaa已经删除");
fs.delete(new Path("hdfs://bigdata2:9000/a.png"),true);
System.out.println("文件a已经删除");
fs.close();
}