hadoop文件系统HDFS

  hadoop文件系统的特点:

    1、最大支持PB级别的数据;

    2、流式数据访问,一次写入,多次读取;

    3、不可靠的文件,故障率高的商用硬件上能运行;

    4、不适应低时间延迟的数据访问,不适应处理大量小文件,不适应多用户写入任意修改文件

  在一个HDFS集群中,只有一台计算机做名称节点NameNode,一台计算机做第二名称节点SecondaryNameNode,其他及其均为数据节点DataNode。在伪分布式的运行方式下,三种节点由同一机器担任。

  NameNode:HDFS的管理者。SecondaryNameNode:NameNode的辅助者,帮助NameNode处理一些合并事宜,它不是NameNode的热备份,功能与NameNode不同。

  DataNode:以数据块的方式分散存储HDFS的文件。HDFS将大文件分割为数据块,每个数据块为64M(可以设置),然后将这些数据块以普通文件形式存放到数据节点上。为了防止DataNode意外失效,HDFS会把每个数据块复制若干存放到不同的数据节点。

  帮助命令:hadoop fs -help

  

  HDFS文件操作:

    1、文件复制:功能效果同hadoop fs -put

      在~/filecopy存放源码、编译和打包结果。  

 1 public static void main(String[] args) throws Exception{
 2     if (args.length != 2){
 3       System.err.println("Usage: filecopy <source> <target>");
 4       System.exit(2);
 5     }
 6     Configuration conf = new Configuration();
 7     InputStream in = new BufferedInputStream(new FileInputStream(args[0]));
 8     FileSystem fs = FileSystem.get(URI.create(args[1]), conf);
 9     OutputStream out = fs.create(new Path(args[1]));
10     IOUtils.copyBytes(in, out, 4096, true);
11    }

  执行命令:  ./bin/hadoop jar ~/filecopy/filecopy.jar com.setup.hadoop.FileCopy README.txt readme.txt

  效果:     将文件复制到 HDFS,另存为 readme.txt 文件

  检查结果: ./bin/hadoop fs -ls

       ./bin/hadoop fs -ls cat readme.txt

  2、删除文件:  同名令:hadoop fs -rm  

1 public static void main(String[] args) throws Exception{
2     if (args.length != 1){
3       System.err.println("Usage: filedelete <target>");
4       System.exit(2);
5     }
6     Configuration conf = new Configuration();
7     FileSystem fs = FileSystem.get(URI.create(args[0]), conf);
8     fs.delete(new Path(args[0]), false);
9    }

 

  3、读取文件:FileCat.java

  同命令:hadoop fs -cat

  4、获取文件属性信息。

  同命令:hadoop fs -ls

  

 1 public static void main(String[] args) throws Exception{
 2     if (args.length != 1){
 3       System.err.println("Usage: fileinfo <source>");
 4       System.exit(2);
 5     }
 6     Configuration conf = new Configuration();
 7     FileSystem fs = FileSystem.get(URI.create(args[0]),conf);
 8     FileStatus stat = fs.getFileStatus(new Path(args[0]));
 9     System.out.println(stat.getPath());
10     System.out.println(stat.getLen());
11     System.out.println(stat.getModificationTime());
12     System.out.println(stat.getOwner());
13     System.out.println(stat.getReplication());
14     System.out.println(stat.getBlockSize());
15     System.out.println(stat.getGroup());
16     System.out.println(stat.getPermission().toString());
17   }

注意要引入的包:

 1 import java.net.URI;
 2 import java.io.InputStream;
 3 import java.io.OutputStream;
 4 import java.io.BufferedInputStream;
 5 import java.io.FileInputStream;
 6 import org.apache.hadoop.conf.Configuration;
 7 import org.apache.hadoop.fs.FileSystem;
 8 import org.apache.hadoop.fs.FSDataInputStream;
 9 import org.apache.hadoop.fs.Path;
10 import org.apache.hadoop.io.IOUtils;

 

  

posted @ 2013-12-23 23:42  hadoop在云端  阅读(549)  评论(0编辑  收藏  举报