encoder 基于品高云数据湖的大数据开发实践课程(随手记)-HDFS 的基本操作和 Java API 操作

本文档详细介绍了如何使用Hadoop的Java API进行HDFS操作,包括读取文件内容、上传文件到HDFS以及删除文件和目录。示例代码展示了从指定路径读取`task.txt`文件内容并输出,上传本地`hello.txt`文件到HDFS以及删除`/user/hadoop/`和`/tmp/test/`目录的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用FSDataInputStream获取HDFS的/user/hadoop/目录下的task.txt的文件内容,并输出,其中uri为hdfs://localhost:9000/user/hadoop/task.txt。

package step2;

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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;


public class FileSystemCat {
	
	public static void main(String[] args) throws IOException {
		//请在Begin-End之间添加你的代码,完成任务要求。
        /********* Begin *********/
		URI uri =URI.create("hdfs://localhost:9000/user/hadoop/task.txt");
		Configuration config = new Configuration();
		FileSystem fs =FileSystem.get(uri,config);
		InputStream in = null;
		try{
			
			in = fs.open(new Path(uri));
			IOUtils.copyBytes(in,System.out, 2048, false);
		}catch(Exception e){
			IOUtils.closeStream(in);
		}
		
		
		
		/********* End *********/
	}
}

2、HDFS-JAVA接口之上传文件

package step3;
import java.io.BufferedInputStream;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
import java.net.URI;  
import java.io.File;
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FSDataOutputStream;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
import org.apache.hadoop.io.IOUtils;  
import org.apache.hadoop.util.Progressable;
public class FileSystemUpload {  
    public static void main(String[] args) throws IOException {  
        /********* Begin *********/  
        File localPath = new File("/develop/input/hello.txt");  
        String hdfsPath = "hdfs://localhost:9000/user/tmp/hello.txt";
        InputStream in = new BufferedInputStream(new FileInputStream(localPath));// 获取输入流对象
        Configuration config = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsPath), config);
        long fileSize = localPath.length() > 65536 ? localPath.length() / 65536 : 1; // 待上传文件大小
        FSDataOutputStream out = fs.create(new Path(hdfsPath), new Progressable() {  
            // 方法在每次上传了64KB字节大小的文件之后会自动调用一次  
            long fileCount = 0;
            public void progress() {  
                System.out.println("总进度" + (fileCount / fileSize) * 100 + "%");  
                fileCount++;  
            }  
        });
        IOUtils.copyBytes(in, out, 2048, true);// 最后一个参数的意思是使用完之后是否关闭流  
        /********* End *********/  
    }  
}

3、HDFS-JAVA接口之删除文件

要求:
删除HDFS的/user/hadoop/目录(空目录);
删除HDFS的/tmp/test/目录(非空目录);
列出HDFS根目录下所有的文件和文件夹;
列出HDFS下/tmp/的所有文件和文件夹。

package step4;


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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;



public class FileSystemDelete {  
    public static void main(String[] args) throws IOException {  
    /********* Begin *********/  
        String root = "hdfs://localhost:9000/";//根目录  
        String path = "hdfs://localhost:9000/tmp"; //要列出的目录  
        //待删除的两个目录  
        String del1 = "hdfs://localhost:9000/user/hadoop";  
        String del2 = "hdfs://localhost:9000/tmp/test";  
        Configuration config = new Configuration();  
        FileSystem fs = FileSystem.get(URI.create(root),config);  
        fs.delete(new Path(del1),true);  
        fs.delete(new Path(del2),true);  
        Path[] paths = {new Path(root),new Path(path)};  
        FileStatus[] status = fs.listStatus(paths);  
        Path[] listPaths = FileUtil.stat2Paths(status);  
        for(Path path1 : listPaths){  
            System.out.println(path1);  
        }  
    /********* End *********/  
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值