Hadoop ecosystem HDFS and HDFS2

1. HDFS的思想来源GFS(Google File System),是一个块结构的文件系统,用于处理海量数据处理,并且允许读取和数据本地处理.

2. HDFS允许数据读写附加删除但是不允许数据更新操作.

3. HDFS把数据分成若干块,存储在DataNode上,DataNode在本地分散的文件中存储HDFS数据块.

4. NameNode: 实质就是一个master server,用于管理文件系统命名空间和控制客户端的文件访问.Hadoop默认的NameNode块大小64M

5. Secondary Namenode:并不是NameNode的备份,它不能替代主NameNode的功能,它仅仅服务于主NameNode的检查点,并定期复制主NameNode的数据,一旦主NameNode的数据异常,主NameNode会从最后的镜像中尝试恢复.

difference between HDFS and HDFS2

HDFS Layers

HDFS

HDFS Federation Architecture

HDFS2


6. HDFS的访问:

① java api访问HDFS:

通过对FileSystem对象的实例进行文件操作:

String uri = "hdfs://127.0.0.1:9000";
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(URI.create(uri), conf);

Path path = new Path(uri + "/testuser");

hdfs.create(path);

hdfs.close();


这样testuser目录就建立起来了.


其中FSDataInputStream和FSDataOutputStream分别是java.io.DataInputStream和java.io.DataOutputStream的子类,使用它们进行I/O操作

具体的可以从api docs或者源代码中理解.

另外HDFS提供几种特殊的文件类型:

SequenceFile, MapFile, SetFile, ArrayFile, and BloomMapFile:

example Using SequenceFile.Writer


Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path("fileName");
SequenceFile.Writer sequenceWriter = new SequenceFile.Writer(fs, conf, path,
Key.class,value.class,fs.getConf().getInt("io.file.buffer.size",
4096),fs.getDefaultReplication(), 1073741824, null,new Metadata());
.......................................................................
sequenceWriter.append(bytesWritable, bytesWritable);
..........................................................
IOUtils.closeStream(sequenceWriter);


② shell操作:

使用bin/hadoop fd [args]

具体参考官方reference.


③ 浏览器查看.


7. HDFS2的访问:HDFS2使用了与HDFS不同的api

其中FileSystem(HDFS)用FileContext(HDFS2)取代.

(待后续整理....)




版权声明:本文为zhuyu4839原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。