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
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)取代.
(待后续整理....)