mapreduce_demo

  1. 准备
    配置客户端hosts
    关闭防火墙

  2. 常用api

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class hadoopapi {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        // 设置客户端属性
        Configuration conf = new Configuration();
        conf.set("dfs.replication", "2");
        conf.set("dfs.blocksize", "32m");
        // conf.addResource("myconf.xml");  //也可以把自定义属性写到xml里面, 然后读取

        // 创建hdfs客户端
        FileSystem hdfsClient = FileSystem.get(new URI("hdfs://hadoop-nn-01:9000/"), conf, "hadoop");  //要配置hosts

        // 上传文件
        hdfsClient.copyFromLocalFile(new Path("e:/TODO"), new Path("/TODO"));

        // 下载文件
        hdfsClient.copyToLocalFile(false, new Path("/TODO"), new Path("e:/todocopy"), true);  // useRawLocalFoleSystem的意思是使用java操作本地文件系统, 这样可以避免一些权限错误

        // 创建目录  fs.permission.umask-mode这个参数默认会将所属组和其他人的写权限去掉
        hdfsClient.mkdirs(new Path("/my"), new FsPermission("777"));

        // 删除  布尔值表示是否递归删除
        hdfsClient.delete(new Path("/my"), true);

        // 修改名称
        hdfsClient.rename(new Path("/my"), new Path("/my_new"));

        // 显示目录下文件
        RemoteIterator<LocatedFileStatus> files = hdfsClient.listFiles(new Path("/my_new"), true);  //好像不显示目录
        while (files.hasNext()){
            LocatedFileStatus file = files.next();
            System.out.println(file.getPath());
        }

        FileStatus[] listStatus = hdfsClient.listStatus(new Path("/my_new"));  // 显示目录, 只返回当前目录下的数据
        for (FileStatus status: listStatus){
            System.out.println(status.getPath());
        }

        // 以文件字节偏移量为参数获取数据, 在分布式计算获取数据的时候用到
        FSDataInputStream inStream = hdfsClient.open(new Path("/TODO"));
        inStream.seek(20);  // 将偏移量定到20字节处

        byte[] b = new byte[10];
        int readLength = inStream.read(b);  // 若readLength==-1, 则是未读取到数据
        System.out.println(new String(b, "utf-8"));
        inStream.close();


        // 以流的形式追加数据到hdfs文件中
        FSDataOutputStream outStream = hdfsClient.create(new Path("/test"), true);  // 若不覆盖且文件已存在, 会报错
        outStream.write("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa".getBytes());
        outStream.write("ssssssssssssssssssssssssssssss".getBytes());
        outStream.flush();
        outStream.close();

        hdfsClient.close();


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值