wqy1027

eeee

 

hadoop day3-java实现hdfs

如何用javaApi的方式来操作hdfs

 新建maven项目,然后建立一个子工程

在父工程中引入依赖(maven中hadoop hdfs,hadoop common和hadoop client)

 

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.6</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.6</version>
    <scope>test</scope>
</dependency>

 父工程引入后不会产生依赖,需要在子工程中引入

 代码

package com.shujia.xiaoyu.hdfs;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.logging.SimpleFormatter;

/*
使用java操作HDFS
创建文件夹,上传文件,下载文件,列出目录,查看block的信息
 */
public class TestHdfsApi {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        //客户端发请求主要是对主节点发送请求,配置主节点信息
        conf.set("fs.defaultFS","hdfs://master:9000");
        //通过hadoop提供的FileSystem抽象类中的get方法,可以根据我们自己提供的配置获取操作hdfs的对象
        //抽象类可以写具体方法,接口不可以
        FileSystem fs = FileSystem.get(conf);

//        //在hdfs上创建文件夹
//        boolean b=fs.mkdirs(new Path("/shujia/bigdata19"));
//        System.out.println(b);
//        //需要把pom文件中的作用范围删了
//
//        //上传文件的操作(使用绝对路径(带盘符的路径))
//        fs.copyFromLocalFile(new Path("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"),new Path("/shujia/bigdata19/students.txt"));
//
//        //下载文件的操作
//        fs.copyToLocalFile(new Path("/shujia/bigdata19/students.txt"),new Path("E:/students.txt"));

        //列出当前文件夹所有文件
        //使用到java中的迭代器,集合,增强for循环
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/shujia/bigdata19/"), true);
        while(listFiles.hasNext()){
            LocatedFileStatus fileStatus = listFiles.next();
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation location : blockLocations) {
                String[] names = location.getNames();
                String s = Arrays.toString(names);
                System.out.println(s);
            }
            //获取文件所属用户
            String owner = fileStatus.getOwner();
            System.out.println(owner);

            //获取文件名
            String name = fileStatus.getPath().getName();
            System.out.println(name);

            //获取文件权限
            FsPermission permission = fileStatus.getPermission();
            String s = permission.toString();
            System.out.println(s);

            //获取文件最后修改的时间
            long time=fileStatus.getModificationTime();
            System.out.println(time);//毫秒级别
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date=new Date(time);
            String s1 = sdf.format(date);
            System.out.println(s1);

            System.out.println("===========");
        }

      
//使用文件流的方式进行文件上传和下载
//输入流
BufferedReader br = new BufferedReader(new FileReader("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"));
//输出流
FSDataOutputStream fsDataOutputStream = fs.create(new Path("/shujia/bigdata19/a.txt"));
//使用hadoop提供的工具类进行流与流读和写
//对流复制
IOUtils.copy(br,fsDataOutputStream);

//释放资源
IOUtils.closeQuietly(fsDataOutputStream);
IOUtils.closeQuietly(br);

//释放资源 fs.close(); } }

 

posted on 2022-08-22 21:14  不想写代码的小玉  阅读(23)  评论(0编辑  收藏  举报

导航