黑马程序员技术交流社区
标题: 【重庆中心】Java 操作HDFS开发环境的搭建 [打印本页]
作者: 安之啊 时间: 2017-11-21 16:32
标题: 【重庆中心】Java 操作HDFS开发环境的搭建
本帖最后由 安之啊 于 2017-11-21 16:35 编辑
Java 操作HDFS开发环境的搭建
上一篇帖子我们已经讲到如何搭建一个hdfs的系统,单纯的一个文件系统是完全满足不了我们开发的,我们搭建起来就是为了使用,那么我们如何使用这个文件系统呢?
首先,我们这次开发使用环境是idea+maven,先打开idea,创建一个项目,如下图:
接着填写group,ArtifactId
然后选择maven的配置文件
最后的pom的配置详细如下:
,新建一个测试类HDFSTest,并且配置好各项连接系数,具体就不一一解释了,下图中的代码都有注释,重点说一下filesystem的get方法的三个参数,第一个是连接的地址,第二个是默认配置,第三个是linux的用户名,我们在第一篇文章里面已经配置过了免密登陆。
ok,在配置完这些东西以后,我们就开始根据api来操作hdfs系统:
1, 新建文件夹
@Test
public void mkdir() throws Exception{
fileSystem.mkdirs(new Path("/hdfsApi/test")) ;
}
我们调用的是filesystem里的方法,给一个路径就ok了,这个的验证,我们可以去linux上去看看,也可以去之前在网址(192.168.106.131:50070)上看得到,如下图,可以看到我们已经新建成功了
2, 新建文件
@Testpublic void create() throws Exception{
//获取写入流
FSDataOutputStream outputStream = fileSystem.create(new Path("/hdfsApi/test/hello.txt")) ;
//写入东西
outputStream.write("hello hadoop".getBytes());
//提交
outputStream.flush();
//关闭流
outputStream.close();
}3, 查看文件内容
@Test
public void cat() throws Exception{
//获取输出流
FSDataInputStream inputStream = fileSystem.open(new Path("/hdfsApi/test/hello.txt")) ;
//通过hadoop提供的io工具,读取到输出流的信息并控制下输出
IOUtils.copyBytes(inputStream,System.out,1024);
//关闭输出流
inputStream.close();
}4, 重命名
@Test
public void rename() throws Exception {
Path path = new Path("/hdfsApi/test/hello.txt") ;
Path path2 = new Path("/hdfsApi/test/helloHadoop.txt") ;
fileSystem.rename(path,path2) ;
}
5, 从本地上传文件到hdfs上
@Test
public void uploadToDfs() throws Exception {
Path path = new Path("/Users/anzhi/Downloads/html-css-js常用单词.doc") ;
Path path2 = new Path("/hdfsApi/test/word.doc") ;
fileSystem.copyFromLocalFile(path,path2);
}6, 从本地上传文件到hdfs上(带进度条)
@Test
public void uploadToDfsWithProgress() throws Exception {
InputStream in = new BufferedInputStream(
new FileInputStream(
new File("/Users/anzhi/Downloads/jdk-8u144-linux-x64.tar")));
FSDataOutputStream output = fileSystem.create(new Path("/hdfsapi/test/jdk.tar"),
new Progressable() {
public void progress() {
System.out.print("||"); //带进度提醒信息
} }); IOUtils.copyBytes(in, output, 4096);}
7, 从hdfs下载文件到本地
@Test
public void downloadFile() throws Exception {
Path path = new Path("/Users/anzhi/Downloads/word.doc") ;
Path path2 = new Path("/hdfsApi/test/word.doc") ;
fileSystem.copyToLocalFile(path2,path);
}
8, 查看某个目录下的所有文件
@Test
public void listFiles() throws Exception {
FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/hdfsApi/test/"));
for(FileStatus fileStatus : fileStatuses) {
String isDir = fileStatus.isDirectory() ? "文件夹" : "文件";
short replication = fileStatus.getReplication();
long len = fileStatus.getLen();
String path = fileStatus.getPath().toString();
System.out.println(isDir + "\t" + replication + "\t" + len + "\t" + path);
}
} 9, 删除目录下的文件
@Test
public void delete() throws Exception{
fileSystem.delete(new Path("/hdfsApi/"), true);
}
今天就简单介绍一点点api的东西,如果想深入了解的话请移步(http://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/fs/FileSystem.html)
勒是雾都!
作者: 陈文老师 时间: 2017-11-23 16:21
新技能get
作者: Yin灬Yan 时间: 2017-11-23 17:27
我来占层楼啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |