HDFS--Java--API
HDFS--Java--API
导入依赖--Maven仓库的官网(mvnrepository.com)
1、打开IDEA创建一个Hadoop项目
2、在Mpom.mxl中添加Hadoop2.7.6的依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.6</version>
</dependency>
</dependencies>
3、在src-main-java创建一个包com.shujia.HDFS
4、在包com.shujia.HDFS新建一个类HDFSJavaAPI
示例,测试一下连接是否通的
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HDFSJavaAPI {
public static void main(String[] args) throws IOException {
//创建连接
//(1)新建Configuration对象,Configuration表示HDFS的配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://master:9000");
//set()内的参数在 /usr/local/soft/hadoop-2.7.6/etc/hadoop中的core-site.xml文件中
//(2)FileSystem是使用java代码操作hdfs的api接口
//conf作为FileSystem的参数
FileSystem fs = FileSystem.get(conf);
//创建一个目录,参数需要传入路径path,new一个path,Path参数为目录名称
fs.mkdirs(new Path("/testHDFSAPI"));
fs.close();
}
}
运行之后,访问master:50070
程序示例
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
public class HDFSJavaAPI {
FileSystem fs; //定义一个变量
@Before
public void init() throws IOException { //初始化
//1、创建链接
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://master:9000");
fs = FileSystem.get(conf); //需要抛出异常
}
//创建目录(mkdirs这个方法可以递归创建目录)
@Test
public void mkdirs() throws IOException {
fs.mkdirs(new Path("/e/f/g")); //创建Path对象,Path对象参数为目录名称;需要抛出异常
}
//删除目录
@Test
public void deleteDir() throws IOException {
//true表示递归地删除(相当于rm -f),如果是false,则不是递归删除
fs.delete(new Path("/e"),true);
}
//移动文件(用的是rename方法)
@Test
public void moveFile() throws IOException {
//将HDFS中的testHDFSAPI文件移动到tmp目录中
fs.rename(new Path("/testHDFSAPI"),new Path("/tmp"));
}
//上传文件put(将本地data中的文件上传到HDFS,相当于剪切,上传之后,本地就没了)
@Test
public void putFile() throws IOException {
fs.moveFromLocalFile(new Path("data/HelloWorld.java"),new Path("/tmp/HelloWorld.java"));
}
//下载文件get(将HDFS的文件下载到本地的data目录中,下载之后,HDFS的文件还会存在)
@Test
public void getFile() throws IOException {
fs.copyFromLocalFile(new Path("/tmp/HelloWorld.java"),new Path("data/"));
}
//读文件(读取HDFS内的文件)
@Test
public void readFromHDFS() throws IOException {
FSDataInputStream open = fs.open(new Path("/tmp/HelloWorld.java"));
//返回的类FSDataInputStream是一个输入流
//需要利用BufferedReader来读取返回的输入流
BufferedReader br = new BufferedReader(new InputStreamReader(open));
//定义变量,然后遍历每一行数据
String line = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
open.close();
}
//写文件(通过Java在HDFS编写文件)
@Test
public void writeFile() throws IOException {
//先创建一个文件
FSDataOutputStream fsO = fs.create(new Path("/newFile.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fsO));
bw.write("hello world");//写入第一行数据
bw.newLine();//换行
bw.write("hadoop hive hbase");//写入第二行数据
bw.newLine();//换行
bw.flush();//刷新
bw.close();
fsO.close();
}
@After
public void closed() throws IOException {
fs.close(); //需要抛出异常
}
}
FileSystem
(1)fileSysterm是使用java代码操作hdfs的api接口
(2)文件操作
create 写文件
open 读取文件
delete 删除文件
(3)目录操作
mkdirs 创建目录
delete 删除文件或目录
listStatus 列出目录的内容
getFileStatus 显示文件系统的目录和文件的元数据信息
getFileBlockLocations 显示文件存储位置
分类:
Hadoop
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!