Hadoop Java API

Hadoop Java API

1、常用对象

org.apache.hadoop.fs.FileSystem

  • HDFS的主要操作对象,必须获取到这个实例对象,才可以操作HDFS.

  • 这是一个比较通用的文件系统的抽象基类,可以实现分布式系统或者本地连接磁盘,本地版本可以做hadoop的小测试。

  • 要想使用HDFS,那么就得使用这个FileSystem的对象或者子类对象。

  • 本地实现是LocalFileSystem,分布式实现是DistributedFileSystem。

org.apache.hadoop.conf.Configuration

  • Hadoop的主要配置对象,只有配置了相对应的参数,才可以跟线上的集群环境链接.

  • Configuration做为Hadoop的一个基础功能承担着重要的责任,为Yarn、HSFS、MapReduce、NFS、调度器等提供参数的配置、配置文件的分布式传输(实现了Writable接口)等重要功能。

  • Hadoop实现了一个自己的加载配置文件的功能的Configuration类:org.apache.hadoop.conf.Configuration。其实也就是我们之前的core-site.xml等配置文件。

2、链接
  • 方式一:直接读取本地配置文件
// 创建配置对象
org.apache.hadoop.conf.Configuration con = null;
// 设置参数
conf.set("fs.defaultFS", "hdfs://pazi:9000");
fs = FileSystem.get(conf);
  • 方式二:链接远程集群
org.apache.hadoop.conf.Configuration con = null;
// 用户名
String hdfsUserName = "pazi";
// 集群链接
java.net.URI hdfsUri = new URI("hdfs://pazi:9000");
// 该方法通过文件系统的URI、要使用的Configuration对象和用户名(Linux的,需要权限)来获取一个FileSystem对象。
fs = FileSystem.get(hdfsUri, conf, hdfsUserName);
3、操作
3.1、 文件夹操作
  • 创建一个文件夹
// 需要创建的文件夹
org.apache.hadoop.fs.Path path = new Path("/hello");
// 执行,第二个参数是文件夹的权限
boolean flag = fs.mkdirs(path/**, FsPermission 权限*/);
  • 判断文件夹是否存在
boolean exists = fs.exists(path);
  • 删除文件夹
// 如果path是一个目录并设置为true,则该目录将被删除,否则将引发异常。对于文件,递归可以设置为true或false。
boolean delete = fs.delete(path, true);
  • 重命名文件夹
// 旧目录
org.apache.hadoop.fs.Path oldPath = new Path("/hello");
// 新目录
org.apache.hadoop.fs.Path newPpath = new Path("/hi");
// 使用新路径替换旧附近
boolean rename = fs.rename(oldPath, newPpath);
  • 查看所有文件夹
// 获取路径所有的文件
FileStatus[] listStatus = fs.listStatus(path);
// 递归
for (FileStatus fileStatus : listStatus) {
	// 判断是否是文件夹
	boolean directory = fileStatus.isDirectory();
	// 判断是否是文件
	boolean file = fileStatus.isFile();
	// 判断是否加密
	boolean encrypted = fileStatus.isEncrypted();
	// ...还有许多API
}
3.2 文件
  • 创建一个文件
// 文件目录
org.apache.hadoop.fs.Path path = new Path("/hello.txt");
// 创建文件输出流
FSDataOutputStream create = fs.create(path);
// 写入
create.write("Hello World!".getBytes());
// 刷新
create.flush();
// 关闭
create.close();
  • 删除(同文件夹操作)
  • 重命名(同文件夹操作)
  • 查看内容
// 将文件打开,转换为输入流处理
FSDataInputStream open = fs.open(path);
// hdfs得文件流工具类,直接输出到控制台
IOUtils.copyBytes(open,System.out, 2014);
// 关闭
open.close();
  • 文件上传
// 小文件系列

// 目标hdfs path
org.apache.hadoop.fs.Path toPath = new Path("/hello");
// 本地环境 path
org.apache.hadoop.fs.Path localPath = new Path("E:\\localText.txt"");
fs.copyFromLocalFile(localPath, toPath);

// 大文件进度条系列
InputStream in = new BufferedInputStream(new FileInputStream(new File("D:\\a.mp4")));
FSDataOutputStream outputStream = fileSystem.create(new Path("/hdfsapi/test/gakki.mp4"),
        new Progressable() {
            @Override
            public void progress() {
                System.out.print(".");   // 带进度提醒
            }
        });
IOUtils.copyBytes(in,outputStream,4096);
  • 文件下载
// 目标hdfs path
org.apache.hadoop.fs.Path toPath = new Path("/hello.txt");
// 本地环境 path
org.apache.hadoop.fs.Path localPath = new Path("E:\\localText.txt"");
fs.copyToLocalFile(localPath, toPath);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值