Hadoop权威指南》读书笔记

Day1

第一章

1、MapReduce适合一次写入、多次读取数据的应用,关系型数据库则更适合持续更新的数据集。

2、MapReduce是一种线性的可伸缩编程模型

3、高性能计算HPC和网格计算比较适合用于计算密集型的作业,但如果几点需要访问的数据量更庞大,很多节点就会因为网络带宽的瓶颈问题不得不闲下等数据。(HPC和网格计算的数据存储与SAN中,数据存储比较集中,数据访问一般通过网络)

4、MapReduce尽量在计算节点上存储数据,以实现数据的本地化快速访问。数据本地化特性是MapReduce的核心特征,并因此而获得良好的性能。

5、MapReduce三大设计目标:(1)为只需要短短几分钟或几小时就可以完成的作业提供服务。(2)运行与同一个内部有高速网络连接的数据中心内(有良好的数据获取速度)(3)数据中心的计算机都是可靠的、定制的硬件。(尽量减少由于硬件异构或者硬件的故障导致的系统运行的效率降低)

第二章

1、MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键值对作为输入和输出。

2、新旧Java MapReduce API区别:API倾向于使用虚类,而不是接口,因为更有利于扩展。(为什么?)

3、map任务将其输出写入本地硬盘,而非HDFS,因为输出的中间结果,一旦作业完成中间结果就可以删除了,如果存入HDFS中并实现备份,没有太大意义。,即使中间结果意外丢失,也可以通过令另一个节点重新执行该任务即可。Reduce任务并不具备数据本地化优势,因为单个reduce任务的输入通常来自于所有mapper的输出,并且reduce的输出即为本次MapReduce任务的最终结果,所以通常将其存储在HDFS上实现可靠存储。

第三章

1、HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。其特点是:

l  能够存储超大文件

l  流式数据访问(一次写入,多次读取)

l  商用硬件

l  要求低时间延迟的数据访问的应用不适合运行在HDFS上。HDFS是为高数据吞吐量应用优化的,这可能以提高时间延迟为代价。

l  大量的小文件。(由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限与namenode的内存容量

l  HDFS中文件可能只有一个writer,而且写操作总是将数据添加在文件的末尾。不支持多个写入者的操作,也不支持文件任意位置进行修改。

2、HDFS中有块的概念,默认为64MB,每个文件被划分为块大小多个分块,作为独立存储单元(有利于并行读取,以及负载均衡)。小于默认块大小的文件不会占据整个块的空间。

3、HDFS中引入块的概念的好处:

l  文件的大小可以大于网络中任意一次磁盘的容量。

l  使用抽象块存储而非整个文件作为存储单元,大大简化了存储子系统的设计。

l  块还非常适合用于数据备份进而提供数据的容错能力和提高可用性。

4、HDFS采用类似GFS的主从结果(master/slave),即系统中由一个管理者namenode和多个从节点datanode结构构成。Namenode负责管理文件系统的命名空间,维护文件系统的树以及整颗树内所有的文件和目录。主要提供的就是名字服务功能。Datanode是文件系统的工作节点。Datanode根据需要存储并检索数据块(受客户端或namenode调度),并且定期想namenode发送他们所存储的块的列表。主从结构的最大问题是master节点存在单点故障的风险(SPOF)。目前openstack等对等结构的存储系统就可以有效避免此问题。

5、seek()方法是一个先对高开销的操作,需要谨慎使用。建议用流数据来构建应用的访问模式,而非执行大量的seek方法。

6、HDFS数据读取数据流

7、HDFS数据写入数据流

在客户端写入数据时,DFSOutputStream将它分成一个个的数据包,并写入内部队列,数据队列。DataStreamer处理数据队列,它的责任是根据datanode列表来要求namenode分配合适的新块来存储时间的副本。

8、由于每个文件的元数据都要存储在namenode的内存中,如果有大量的小文件存储在HDFS中,那么将会占用namenode中大量的内存。因此HDFS支持将多个小文件进行存档。Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,能够减少namenode内存的使用的同时,允许对文件进行透明的访问。

第四章

1、HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和。其中datanode负责在收到数据后存储该数据及其验证校验和,管线中最后一个datanode负责验证校验和客户端在读取数据时,也会验证校验和。最后,每个datanode中会有一个后台线程运行一个DataBlockScanner,定期验证存储在这这个datanode上的所有数据块。

2、HDFS中对文件进行压缩,以达到减少文件存储所需的空间,以及加速数据在网络和磁盘上的传输。对于压缩文件后是否可切分是评价一个压缩算法在MapReduce中是否合适的重要指标。

3、对于map任务的输出也可以进行压缩。同时对于MapReduce最终的结果也可以使用压缩输出。

4、由于MapReduce中数据一般都是需要在网络或者磁盘上存储或者传输,所以需要把许多数据进行序列化。

5、RPC序列化格式需要:

l  紧凑

l  快速

l  可扩展

l  支持互操作

6、Writabale接口定义了序列化和反序列化两个方法。

《Hadoop权威指南》读书笔记1的更多相关文章

  1. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  2. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  3. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  4. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  5. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  6. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  7. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  8. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

  9. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  10. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

随机推荐

  1. 【bzoj1000】A+B Problem

    Description 输入两个数字,输出它们之和 Input 一行两个数字A,B(0<=A,B<100) Output 输出这两个数字之和 Sample Input 1 2 Sample ...

  2. React学习笔记一

    我是通过script src的方式引入的react的相关文件,本次学习顺序按照<React快速上手开发>一书的顺序学习的, 本篇博客笔记地址:http://note.youdao.com/ ...

  3. 用shell脚本安装apache

    我们首先创建一个文件为test.sh,执行此文件的方法有以下四种方式: 1../test.sh(必须chmod赋予执行权限) 2.. test.sh 3.sourse test.sh 4.[shell ...

  4. 编写可维护的Javascript纪要

    第一部分: 编程风格 在大型项目开发中,因为项目可读性规范性的需要(就像<编写可维护性的Javascript>一书作者Nicholas Zakas大神所说,他们团队所有成员写出的代码就像是 ...

  5. 教你搭建SpringMVC框架( 附源码)

    一.项目目录结构 二.SpringMVC需要使用的jar包 commons-logging-1.2.jar junit-4.10.jar log4j-api-2.0.2.jar log4j-core- ...

  6. 在python3.5中pip安装scrapy,遇到 error: Microsoft Visual C++ 14.0 is required

    本来在python3.5中安装scrapy一路顺畅(pip install scrapy),中间遇到一个 error: Microsoft Visual C++ 14.0 is required. x ...

  7. Thinkphp2.1漏洞利用

    thinkphp2.1版本 Google语法: inurl:index.php intext:ThinkPHP 2.1 { Fast & Simple OOP PHP Framework }  ...

  8. C# 判读取得字符编码格式

    FileStream fs1 = new FileStream(folder + strPath, FileMode.Open); byte[] bytes = new byte[fs1.Length ...

  9. Ubuntu系统里下载安装配置redis-2.2.13.tar.gz

    不多说,直接上干货! Redis是一个NoSQL数据库,在数据需要频繁更新,并且数据的访问热点范围比较广的应用场景下,Redis的效率很不错. 下面介绍Redis的安装过程,如下面的步骤所示. 第一步 ...

  10. 现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua

    http://blog.csdn.net/u010019717/article/details/77510066?ref=myread http://blog.csdn.NET/u010019717 ...