A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 安之啊 于 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
勒是雾都!




2 个回复

倒序浏览
新技能get
回复 使用道具 举报
我来占层楼啊  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马