使用java的api操作hdfs在idea上

使用java的api操作hdfs在idea上

代码规范auther data description注释要写

如何写hdfs的程序:1.hdfs在哪用户名 2.获取一个代表分布式文件系统的对象 3.对象方法4.关闭对象

1配置信息对象
conf=new configration();配置文件对象
conf.set("副本,“8”);

2获取hdfs的对象

参数一 urI hdfs://hadoop:8020
参数2 配置信息
参数3 用户名

new filesystem(不能new就是静态方法)Filesystem.newInstance

操作

s
liststatus文件和文件夹的查看
rename重命名 和移动
文件上传

参数1 本地的路径参数2 hdfs的路经都要newpath(两个path无序带hdfs的网络路径)


/**
 * @FileName: FsDemo1
 * @Author: xiyuan
 * @Date: 2020/8/14 10:28 上午
 * @Description:第一个Hadoop代码,向hdfs上传文件
 */

public class FsDemo1 {
    public static void main(String[] args) throws Exception {
        Configuration entries = new Configuration();
        //entries.s
        Path path = new Path("/");
        FileSystem root = FileSystem.newInstance(new URI("hdfs://hadoop01:8020"), entries, "root");
        root.copyFromLocalFile(new Path("/Users/xiyuan/lice/untitled.jar"),path);
        root.close();


    }


进行工具类的封装获得filesystem文件

/**
 * @FileName: DoitUitls
 * @Author: xiyuan
 * @Date: 2020/8/14 11:18 上午
 * @Description:封装工具类
 */
public class DoitUitls {
    /**
     * 获取HDfs的客户端对象
     * @return
     */
    public static  FileSystem getFs() throws Exception {
        Configuration conf = new Configuration();
        return FileSystem.newInstance(new URI("hdfs://hadoop01:8020"), conf, "root");
    }
}

使用封装的工具类进行文件的下载

public class DownLoad {
    public static void main(String[] args) throws Exception {
        //由工具类获得所需要的file
        FileSystem fs = DoitUitls.getFs();
        //使用copyTolocalFile的方法下载,使用前必须确认是否配置环境变量
      //四个参数的作用,是否删除被下载的文件(默认false),hdfs路径 ,本地路径, 是否不生成crc文件(默认false)
        fs.copyToLocalFile(new Path("/Red.rar"),new Path("/Users/xiyuan/temp"));

    }
}

创建文件夹

/**
 * @FileName: MkdirDemo
 * @Author: xiyuan
 * @Date: 2020/8/14 3:25 下午
 * @Description:创建文件夹
 */
public class MkdirDemo {
    public static void main(String[] args) throws Exception {
        FileSystem fs = DoitUitls.getFs();
       // boolean exists = fs.exists(new Path());
        fs.mkdirs(new Path("/hehe/yaya/666"));


    }
}

递归删除文件夹

/**
 * @FileName: DeleteDemo
 * @Author: xiyuan
 * @Date: 2020/8/14 3:30 下午
 * @Description:递归删除所有文件
 */
public class DeleteDemo {
    public static void main(String[] args) throws Exception {
        FileSystem fs = DoitUitls.getFs();
        fs.delete(new Path("/hehe/yaya"),true);

    }

}

列举获得所有的文件

/**
 * @FileName: ListFIlesDemo
 * @Author: xiyuan
 * @Date: 2020/8/14 3:05 下午
 * @Description:列举所有的文件,其中获得
 */
public class ListFIlesDemo {
    public static void main(String[] args) throws Exception {
        FileSystem fs = DoitUitls.getFs();
        Path path = new Path("/");
        if (fs.getFileStatus(path).isDirectory()) {
            RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(path,false);
            while (listFiles.hasNext()){
                LocatedFileStatus fileStatus = listFiles.next();
                Path p = fileStatus.getPath();
                String group = fileStatus.getGroup();//获得文件所在的组
                System.out.println(group);
                System.out.println(fileStatus.getLen());//获得文件的大小
                String name = p.getName();//获得文件的名字,名字实在获得路径之后
                System.out.println(name);
                System.out.println(fileStatus.getOwner());//获得文件的所有者
                long blockSize = fileStatus.getBlockSize();
                long modificationTime = fileStatus.getModificationTime();//修改的时间
                System.out.println(modificationTime);
                BlockLocation[] blockLocations = fileStatus.getBlockLocations();//获得文件时的所有切出来的块
                for (BlockLocation blockLocation : blockLocations) {
                    System.out.println(blockLocation);
                    String[] hosts = blockLocation.getHosts();
                    long offset = blockLocation.getOffset();//偏移量起始位置
                    long length = blockLocation.getLength();//获得块的长度
                    System.out.println(length);

                    for (String host : hosts) {
                        System.out.println(host);
                    }
                }

            }

        }

    }
}

hdfs的写数据 append ,creat

append追加,creat创建一个文件并写入如果存在便覆盖

writeUTF写字符串 flush close 前面会有写一次的标识特殊的分隔符号

hdfs的数据不支持并发写不支持随机写不支持随机修改

writeUTF写字符串 flush close 前面会有写一次的标识特殊的分隔符号

流一定要刷新并关掉

/**
 * @FileName: WriteDemo
 * @Author: xiyuan
 * @Date: 2020/8/14 4:20 下午
 * @Description:
 */
public class WriteDemo {
    public static void main(String[] args) throws Exception {
        FileSystem fs = DoitUitls.getFs();
        FSDataOutputStream creat = fs.create(new Path("/b.txt"));//创建一个文件并写入文件若存在文件则覆盖
        FSDataOutputStream append = fs.append(new Path("/b.txt"));//在原有的文件上追加文字
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(creat));//使用缓冲字符流包装
        bufferedWriter.write("hehe");//写入字符串记得刷新
        bufferedWriter.write("yasyayaya");
        bufferedWriter.flush();
        bufferedWriter.close();
        creat.close();
        //fsDataOutputStream.writeUTF("hehehheheh");
       // fsDataOutputStream.writeUTF("sudhushfushfuhsdufhus");


    }
}

读数据 open

seek跳过字节

将字节流转化为缓冲字符流

/**
 * @FileName: ReadDemo
 * @Author: xiyuan
 * @Date: 2020/8/14 4:13 下午
 * @Description:读取数据
 */
public class ReadDemo {
    public static void main(String[] args) throws Exception {
        FileSystem fs = DoitUitls.getFs();
        FSDataInputStream open = fs.open(new Path("/a.txt"));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));//缓冲字符流进行包装
        String len=null;
        while ((len = bufferedReader.readLine()) != null) {
            System.out.println(len);
        }
        bufferedReader.close();
        open.close();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值