您的位置:首页 > 运维架构

Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

2014-02-05 23:57 615 查看

一.HDFS出现的背景

  随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多台机器上的文件,于是就产生了分布式文件管理系统,英文名成为DFSDistributed File System)。

  那么,什么是分布式文件系统?简而言之,就是一种允许文件通过网络在多台主机上分享的文件系统,可以让多个机器上的多个用户分享文件和存储空间。它最大的特点是“通透性”,DFS让实际上是通过网络来访问文件的动作,由用户和程序看来,就像是访问本地的磁盘一般(In other words,使用DFS访问数据,你感觉不到是访问远程不同机器上的数据)。

public class FileSystemApp {

private static final String HDFS_PATH = "hdfs://hadoop-master:9000/testdir/";
private static final String HDFS_DIR = "/testdir/dir1";

public static void main(String[] args) throws Exception {
FileSystem fs = getFileSystem();

// 01.创建文件夹  对应shell:mkdir
createDirectory(fs);

// 02.删除文件  对应shell:hadoop fs -rm(r) xxx
deleteFile(fs);

// 03.上传文件  对应shell:hadoop fs -input xxx
uploadFile(fs);

// 04.下载文件  对应shell:hadoop fs -get xxx xxx
downloadFile(fs);

// 05.浏览文件夹  对应shell:hadoop fs -lsr /
listFiles(fs,"/");
}

private static void listFiles(FileSystem fs,String para) throws IOException {
final FileStatus[] listStatus = fs.listStatus(new Path(para));
for (FileStatus fileStatus : listStatus) {
String isDir = fileStatus.isDir() ? "Directory" : "File";
String permission = fileStatus.getPermission().toString();
short replication = fileStatus.getReplication();
long length = fileStatus.getLen();
String path = fileStatus.getPath().toString();
System.out.println(isDir + "\t" + permission + "\t" + replication
+ "\t" + length + "\t" + path);

if(isDir.equals("Directory")){
listFiles(fs, path);
}
}
}

private static void downloadFile(FileSystem fs) throws IOException {
final FSDataInputStream in = fs.open(new Path(HDFS_PATH + "check.log"));
final FileOutputStream out = new FileOutputStream("E:\\check.log");
IOUtils.copyBytes(in, out, 1024, true);
System.out.println("Download File Success!");
}

private static void uploadFile(FileSystem fs) throws IOException {
final FSDataOutputStream out = fs.create(new Path(HDFS_PATH
+ "check.log"));
final FileInputStream in = new FileInputStream("C:\\CheckMemory.log");
IOUtils.copyBytes(in, out, 1024, true);
System.out.println("Upload File Success!");
}

private static void deleteFile(FileSystem fs) throws IOException {
fs.delete(new Path(HDFS_DIR), true);
System.out.println("Delete File:" + HDFS_DIR + " Success!");
}

private static void createDirectory(FileSystem fs) throws IOException {
fs.mkdirs(new Path(HDFS_DIR));
System.out.println("Create Directory:" + HDFS_DIR + " Success!");
}

private static FileSystem getFileSystem() throws IOException,
URISyntaxException {
return FileSystem.get(new URI(HDFS_PATH), new Configuration());
}

}


View Code

参考文献与资料

  (1)传智播客Hadoop从入门到工作视频教程第二季:http://bbs.itcast.cn/thread-21310-1-1.html

  (2)刘鹏教授,《实战Hadoop:开启通向云计算的捷径》:http://item.jd.com/10830089.html

  (3)吴超,《Hadoop的底层架构——RPC机制》:http://www.superwu.cn/2013/08/05/360

  (4)zy19982004,《Hadoop学习十一:Hadoop-HDFS RPC总结》:/article/3724381.html

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: