《hadoop权威指南》读书笔记 2011.7.28 morning 供自己参考记忆

来源:互联网 发布:hxd2 机车软件 编辑:程序博客网 时间:2024/04/29 10:44

map是怎样读取数据的
许多方法是把each line as a record
reduce  多的时候要分区
combiner 指定一个合并函数就可以了
conf.setcombinerClass()

HDFS以流式数据访问模式来存储超大文件

namenode将文件系统的元数据(文件,目录和数据的存储信息)存在内存中 因此文件系统所能存储的文件总数受限于namenode的内存容量

数据块的大小是固定的 分片的大小不固定 若一个split大于一个block的大小 那么对于个处理这个split的map任务,不在这个块上的split可能需要通过网络传输到这个map任务上来 没有充分发挥数据本定性的优越性质

数据块大 就是为了减少寻址开销
文件系统块块地抽象 1 文件的大小可以大于网络中任何一个磁盘的容量 文件的所有块不需要存储在同一个磁盘上 他们可以用网络上的任意一个磁盘来存储 当然也可以用一个磁盘存储一个文件 2 大大简化了子系统的设计 便于管理 信息不与块同时存储  大小一样 便于计算块的多少 3适合用于数据备份和提供容错能力
./hadoop fscd  / -files -blocks 查询块信息

namenode管理文件系统的命名空间
datanode 存储数据 工作节点 根据需要存储并检索数据块 定期想namenode发送他们所存储块地列表

seekable 接口支持在文件中找到指定位置 并提供一个查询单签位置相对于文件其实位置的偏移量(getPos())方法。

public class FileSystemDoubleCat {  public static void main(String[] args) throws Exception {    String uri = args[0];    Configuration conf = new Configuration();//配置信息    FileSystem fs = FileSystem.get(URI.create(uri), conf);//fs相当于一个指针    FSDataInputStream in = null;    try {      in = fs.open(new Path(uri));      IOUtils.copyBytes(in, System.out, 4096, false);      in.seek(0); // go back to the start of the file      IOUtils.copyBytes(in, System.out, 4096, false);    } finally {      IOUtils.closeStream(in);    }


 

 

原创粉丝点击