当前位置:   article > 正文

HDFS Java API上传文件_第3关:hdfs-java接口之上传文件

第3关:hdfs-java接口之上传文件

hdfs 目录下上传文件

(上传一个hadoop-2.7.7.tar.gz安装包)
要求:
(1)以Java API方式写代码完成文件夹创建;
(2)以Java API文件流的方式完成hadoop-2.7.7.tar.gz文件的上传;

package hadoop;
//多个文件
//一个文件多个文件块,一个块放在多个host上
//三级循环
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.io.IOUtils;
/**
* 
* hdfs常用api
*/
public class HDFSAPITest {

	public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException {
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop01:9000"), conf, "hadoop01");
		// 创建文件夹/data
		Path path = new Path("/data");
		// 文件是否存在
		boolean b = fs.exists(path);
		if (!b) {
			fs.mkdirs(path);
		}
//		//删除文件夹的操作
//		fs.delete(path);
//		fs.deleteOnExit(path);
//		fs.delete(path, true);

		// 获取指定目录下的文件列表 只能获取文件列表,获取不到文件夹 shift+Ctrl+L
		RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(path, false);
		// 遍历迭代器
		while (listFiles.hasNext()) {
			LocatedFileStatus next = listFiles.next();
			System.out.println(next.getPath());
			System.out.println(next.getReplication());
			// 返回每一个文件的块信息,数组长度代表块的个数,每一个块代表数组中的一个元素
			BlockLocation[] blockLocations = next.getBlockLocations();
			for (BlockLocation bl : blockLocations) {
				System.out.println(bl);
				System.out.println("block size=" + bl.getLength());
			}
		}

		// 获取指定目录下的文件状态信息
		FileStatus[] listStatus = fs.listStatus(new Path("/"));
		for (FileStatus fst : listStatus) {
			System.out.println(fst);
			System.out.println(fst.isDirectory());
			System.out.println(fst.isFile());
			System.out.println(fst.getBlockSize());
		}

		// 流的形式上传/下载 IOUtils工具类
		 //文件上传:本地(输入流)普通的java输入流-----hdfs(输出流)
		FileInputStream in = new FileInputStream(new File("D:\\hadoop-2.7.7.tar.gz"));//本地windows系统的文件路径
		FSDataOutputStream out = fs.create(new Path("/data/package")); // 必须指定hdfs目录一个文件,如果没有可以先建 
		IOUtils.copyBytes(in, out, 4096);

		// 文件下载:hdfs(输入流)----本地(输出流)
		FSDataInputStream fsin = fs.open(new Path("/data/package"));
		FileOutputStream fsout = new FileOutputStream(new File("D:\\"));
		IOUtils.copyBytes(fsin, fsout, 4096);
		// IOUtils操作完会自动关闭流,不用再执行 in.close() 和 out.close()

	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/723659
推荐阅读
相关标签
  

闽ICP备14008679号