简介:

Hadoop起源于Nutch。当人们试图构建一个开源网络搜索引擎,但在管理在少数计算机上运行的计算时遇到了麻烦。后来Google发表了GFS和MapReduce相关介绍,路线就变得清晰了。他们设计了系统来精确解决在使用Nutch是遇到的问题。

设置,配置,编写程序以使用Hadoop是一门艺术。

Hadoop权威指南:Part 1. Funfamental components in Hadoop

目录

1 Meet Hadoop

2 Introduction to MapReduce

3 Hadoop filesystems

4 Hadoop's cluster resource management system

5 I/O building blocks in Hadoop


1 Meet Hadoop

对于庞大的数据,不应该尝试使用更大的计算机进行计算,而是应该尝试更多的计算机系统。

1.1-数据:

当存储成本下降到足以存储连续的音频和视频时,对于数据存储的需求量将是现在的数倍。同时作为,物联网的一部分的机器产生的数据量比人产生的数据量还要多,例如机器日志,RFID阅读器,传感器,车辆GPS跟踪,零售交易等,都促成了不断增长的海量数据。

另外。公开数据量在逐年增加。组织不再需要仅仅管理自己的数据,未来的成功将在很大程度上取决于他们从其他组织的数据中提取价值的能力。

1.2-数据存储和分析:

尽管硬盘的存储容量多年来大幅增长,但访问速度即从硬盘读取数据的速度没有跟上。同时一旦开始使用许多硬件,其中一个发生故障的可能性相当高。RAID避免数据丢失的一种常见方法是通过复制:系统保存数据冗余的副本,以便在发生故障时还有副本可以被使用。Hadoop的分布式文件系统HDFS可以直面这种挑战。

大数据分析任务需要以某种方式组合数据。各种分布式系统允许组合来自多个来源的数据。这是有挑战的。MapReduce提供了一种编程模式,将问题从磁盘读写抽象出来,将其转换为对一组键和值的计算。

简单来讲,Hadoop多提供的是一个可靠的,可扩展的存储和分析平台。

1.3-查询所有数据:

MapReduce是一个屁处理查询处理器,对整个数据集运行临时查询并合理的时间内获得结果的能力。它改变了人们对数据的看法,并解锁了以前存档在磁盘或磁带上的数据。

1.4-超越批次:

MapReduce本身是一个批处理,不适合交互式分析。无法在几秒或者更短的时间内查询并获的结果。

提供在线访问的第一个组件是HBase,是一个使用HDFS作为其底层存储键值对存储。它提供单个行的在线读/写访问和批量读写数据的批处理操作。

Hadoop中新处理模型的真正推动是Hadoop2中引入了YARN。它是一个集群资源管理系统,它允许任何分布式程序(不仅是MapReduce)在数据上运行一个Hadoop集群。

1.5-Hadoop不同处理模式:

交互式SQL

迭代处理

流处理

搜索

1.6-与其他系统比较:

关系数据库管理系统:

MapReduce可以视为对关系数据库补充的管理系统。MapReduce适合需要分析整个数据集的问题(批处理)。特别是临时分析。RDBMS适合查询或更新,其中数据集以被索引提供低延迟检索和更新相对少量的数据。MapReduce适合数据所在的应用程序一次编写,多次读取。RDBMS适合对数据不断更新。

随着Hive等Hadoop系统正在变得更具交互性(通过远离MapReduce)并添加索引和事务等功能使他们看起来越来越像传统的RDBMS。

2 MapReduce

是一种数据处理的编程模型。它的程序本质上是并行的,因此可以将非常大规模的数据分析交到任何拥有足够机器的管理者手中。它为大型数据集提供了自己的解决方案。

2.1-数据格式:

数据使用面向行的ASCII格式存储。其中每一行都是一条记录。

2.2-Unix工具分析数据:

处理面向行的数据的经典工具是awk。

2.3-Hadoop分析数据:

利用Hadoop提供的并行处理,需要将查询表示为MapReduce作业。在经过本地小规模的测试后,在机器集群上运行它。

2.4-Java MapReduce:

三个要素:map函数,reduce函数和运行作业的代码。

map函数由Mapper类表示,它声明了一个抽象map()方法

类似于map定义reduce函数。reduce类的输入类型必须匹配map函数的输出类型

Job对象形成作业的规范,并让编程者控制作业的运行方式

2.5-试运行:

编写MapReduce作业后,通常会在小数据集上进行尝试,以清除代码中的任何直接问题。

2.6-向外扩展:

要向外扩展,需要将数据存储在分布式文件系统中。这允许Hadoop使用Hadoop的资源管理系统,YARN将MapReduce计算转移到托管部分数据的每台机器上。

MapReduce作业是客户端希望执行的工作单元:它由输入数据,MapReduce程序和配置信息组成。Hadoop通过将作业划分为任务运行作业,其中两种类型:map任务和reduce任务,这些任务使用YARN安排并在集群中的节点上运行。如果任务失败,它将自动重新安排在不同的节点上运行。

2.7-数据流切分:

Hadoop将MapReduce作业的输入分成固定大小的块,称为input splits。Hadoop为每个拆分创建一个映射任务,该任务为拆分中的每条记录运行用户定义的映射函数。

每个split的大小约为128M。最佳split的大小与HDFS块大小相同:它是保证存储在每个节点上的最大输入大小。

Map任务将其数据写入本地磁盘,而不是HDFS:Map输出是中间输出:由reduce任务处理产生最终输出。一次工作完成,map输出可以扔掉。

写入reduce输出确实会消耗网络宽带,但又与普通HDFS写入管道一样多。

reduce任务的数量不受输入大小的控制,而是独立指定的。在默认MapReduce作业中。当有多个reducer时,map任务对它们的输出进行分区(partition)。每个任务为每个reduce任务创建一个分区。每个分区中可以有多个key,但任何给定的key的记录都在一个分区中。分区可以由用户定义的分区函数控制,但通常使用默认的分区器。它使用散列函数对key进行分桶,工作很好。

2.8-合路器:

许多MapReduce作业受到集群上可用宽带的限制,因此尽量减少map和reduce任务之间传输的数据是值得的。Hadoop允许用户指定在map输出上运行的组合器函数,它的输出形式是reduce函数的输入。

2.9-Hadoop流式传输:

Hadoop为MapReduce提供了一个API,允许使用Java以外的编程语言编写map和reduce函数。Hadoop Streaming使用Unix标准流作为Hadoop和程序之间的接口。因此可以使用任何可以读取标准输入并写入标准输出的语言要编程MapReduce程序

3 The Hadoop distributed filesystems

当数据集的存储容量超出单个物理机的存储容量时,有必要将其分区到多个单独的机器上。跨机器网络管理存储的文件系统称为分布式文件系统。Hadoop中使用HDFS。

此类系统是基于网略的,因此网络编程的所有复杂性都会出现。

3.1-HDFS的设计:

是一种分布式文件系统,设计用于存储具有流式数据访问模式的非常大的文件,在商用硬件集群上运行。(目前运行的Hadoop集群可存储数PB的数据)

3.2-流式数据访问:

是最有效的数据处理模式,一次写入多次读取模式。数据集通常是从源生或复制的,随着时间的推移对数据集执行各种分析。

3.3-低延迟数据访问:

HDFS已经针对提供高吞吐量数据进行了优化,但是可能会以延迟为代价。HBase目前是低延迟访问的最好选择。

3.4-很多小文件:

因为namenode在内存中保存文件系统元数据,所以文件系统中文件数量的限制由namenode上的内存量决定。根据经验,每个文件,目录和块占用大约150个字节。

3.5-Blocks:块

它是指读取或写入的最小数据量。默认128M。在HDFS中文件被分成块,这些块作为独立的单元存储。

块抽象,对于分布式系统的好处:

文件可以比网络中任何的单个磁盘都大

简化存储管理

适用于提供容错和可用性的复制

3.6-Namenode和datanode:

namenode管理文件系统命名空间。它维护系统树以及树中所有文件和目录的元数据。此信息以两个文件的形式永久存储在本地磁盘上:命名空间图像和编辑日志。它还知道给定文件的所有块所在的数据节点;但是它不会永久存储块位置,因此信息是在系统启动时从数据节点重建的。

datanode是文件系统的主力。当它们被告知时,它们存储和检索块,并且它们定期向名称节点报告它们正在存储的块列表。

3.7-块缓存:

通常datanode从磁盘读取块,但对于经常访问的文件,这些块可能会显式缓存在datanode的内存中,在堆外块缓存中。

3.8-HDFS federation:

在这之下,每个namenide管理一个name空间卷,该卷由name空间的元数据和一个包含name空间文件的所有块的快池组成。

3.9-HDFS高可用性:

在多个文件系统上复制namenode元数据和使用辅助namenode创建检查点的组合可以放置数据丢失,但它不能提供文件系统的高可用性。namenode仍然是单点故障。如果它确实失败了,所有客户端将无法读取,写入或者列出文件。

在HA实现的过程中,有一对namenode出于活动-备用配置中。如果活动namenode发生故障,备用namenode将接管其职责以继续为客户端请求提供服务。

3.10-故障转移和防护:

从活动namenode到备用namenode的转换,有系统中故障转移控制器管理。

3.11-命令行界面:

3.12-Hadoop文件系统:

Hadoop为其文件系统提供了许多接口,它通常使用URI方案。选择正确的文件系统实例进行通信。

3.13-HTTP访问:

第二种情况通过HTTP访问HDFS的方式依赖于一个或多个独立的代理服务器。(代理是无状态的,一次它们可以在标准负载均衡器后面运行)到集群的所有流量都通过代理,因此客户端永远无法直接访问namenode和datanode。这允许实施更严格的防火墙和贷款限制策略。在位于不同数据中心的Hadoop集群之间或从外部网络访问在云中运行的Hadoop集群时,通常使用代理进行传输。

3.14-Java接口:

从Hadoop URL读取数据

使用FileSystem API读取数据

查询文件系统

3.15-数据流:

数据读取:客户端通过在FileSystem对象上调用open()来打开系统读取的数据。对于HDFS,该对象是DistributedFileSystem的一个实例。DistributedFileSystem使用远程过程调用(RPC)namenode,以确定文件中前几个块的位置。对于每个块,namenode返回具有该块副本的数据。此外数据节点根据它们与客户端的接近程度排序。

DistributedFileSystem向客户端返回一个FSDataInoutStream,以便客户端从中读取数据。FSDataInoutStream反过来包装一个DFSDataInoutStream,它管理datanode和namenode的I/O。

下一个块的数据节点对于客户端时透明的。从它的角度来看,它只是在读取一个连续的流。块按顺序读取,FSDataInoutStream在客户端读取流式打开数据节点的新连接。它还将根据需要调用namenode来检索下一批块的数据节点位置。当用户端完成读取后,它调用FSDataInoutStream上的close().

写入文件:namenode执行检查以确保文件不存在并且客户端具有创建文件的正确权限。如果通过减产,namenode会记录新文件。

DFSOutputStream会将写入数据拆分成数据包,并将其写入一个称为数据队列的内部队列。数据队列由DataStream使用,它负责通过选择合适的数据节点列表来请求namenode节点分配新块以存储副本。

数据节点列表形成一个pipeline,DataStreamer将数据包流式传输给pipeline,pipeline中的datanode一次接受存储数据包中的内容。

3.16-使用distcp进行并行复制:

以上时HDFS访问模式的单线程访问。它还可以对文件集合进行操作。

4 YARN

YARN是Hadoop的集群资源管理系统。提供了用于请求和使用集群资源的API。这些API通常不被用户代码直接使用。

4.1-YARN应用程序解析:

YARN通过两种类型的长时间守护线程提供核心服务:一个资源管理器,用于管理整个资源使用,以及运行在集群中所有节点上的节点管理器,用于启动和监控容器。

在YARN上运行应用程序:

客户端联系资源管理器并要求它运行应用程序主进程。资源管理器找到节点管理器,它可以在容器中启动应用程序的主控制器。

4.2-YARN与MapReduce比较:

YARN可以在比MapReduce1更大的集群中运行。与jobtracker相比,应用程序的每个实例都有一个专用的程序主控制器,它在应用程序的持续时间内运行。

4.3-YARN中的调度:

在理想情况下,YARN应用程序发出的请求将立即获得批准。然而,在现实世界中,资源是涌现的,在繁忙的集群上,应用程序通常需要等到获得某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。

使用Fair Scheduler,无需预留一定数量的容量。因为它将动态平衡所有在运行的作业之间的资源。就在第一个大型作业开始后,它是唯一云心的作业,因此它获取了集群中的所有资源。当第二个小作业开始时,它被分配了一半的资源,以便每个作业都使用其公平份额的资源。

以下为三个调度器的基本操作:

5 Hadoop I/O

Hadoop带有一组用于数据I/O的原语。其中一些是比Hadop更通用的技术。例如数据完整性和压缩。

5.1-数据完整性:

Hadoop用户正确的期望在存储或处理期间不会丢失或损坏任何数据。但是由于磁盘或网络的每个I/O操作都带有将错误引入其正在读写的数据的概率。因此当流经系统的数据量与Hadoop能够处理的数据量一样大时,发生数据损坏的可能性很高。

检验损坏数据的检测代码为CRC-32:它为任意大小的输入计算32位整数校验和。它用于Hadoop的ChecksumFileSystem中的校验和,而HDFS使用更高效的变体称为CRC-32C。

5.2-压缩:

所有压缩算法都表现出空间/时间权衡:更快的压缩和戒烟速度同城时以节省空间的代价。

5.3-编码器:

编码器是压缩-解压算法的实现。在Hadoop中,编码器由CompressionCodec接口实现。

5.4-基于文件的数据结构:

序列文件: 想象一个日志文件,其中每一个日志记录都是一个新的文本行。如果记录二进制类型。纯文本不是合适的格式。Hadoop的SquenceFile类适合这种情况。为二进制键值提供持久化的数据结构。

相关阅读:

White, T., 2012. Hadoop: The definitive guide. " O'Reilly Media, Inc.".

Hadoop The Definitive Guide:Hadoop权威指南-PART 1相关推荐

  1. Spark The Definitive Guide Spark权威指南中文笔记

    目前在做Spark开发,所用到的参考资料便是Spark: The Definitive Guide.目前暂时没有中文版,为了记录学习和工作的过程,顺便等待中文版的推出,便将每章节的学习过程总结下来,以 ...

  2. 《Hadoop.The.Definitive.Guide.4th.Edition.2015.3》学习笔记

    一.读后感 最近读完了<Hadoop.The.Definitive.Guide.4th.Edition.2015.3>英文第4版,个人感觉这本书是hadoop目前最权威.最全面.最靠谱的书 ...

  3. 读书笔记《Hadoop权威指南第4版(Hadoop The Definitive Guide 4th)》

    Chapter 1 Meet Hadoop Data Storage and Analysis The problem is simple: although the storage capaciti ...

  4. Hadoop,the definitive guide 学习

    文章目录 hadoop基础知识 初始hadoop 关于MapReduce Hadoop分布式文件系统 hdfs的设计 HDFS的数据块 namenode和datanode 联邦HDFS 关于YARN ...

  5. 《Presto(Trino)——The Definitive Guide》Presto指南20版

    Presto系列文章目录 This book provides a great introduction to Presto and teaches you everything you need t ...

  6. Hadoop: The Definitive Guide (3rd Edition)

    chapter 1 解决计算能力不足的问题,不是去制造更大的计算机,而是用更多的计算机来解决问题. 我们生活在一个数据的时代."大数据"的到来不仅仅是影响到那些科研和金融机构,对小 ...

  7. Hadoop权威指南(中文版)

    Hadoop权威指南(中文版) 基本信息 原书名: Hadoop: The Definitive Guide 原出版社: O'Reilly Media 作者: (美) Tom White   译者: ...

  8. 【Hadoop代码笔记】Hadoop作业提交之客户端作业提交

    1.      概要描述 仅仅描述向Hadoop提交作业的第一步,即调用Jobclient的submitJob方法,向Hadoop提交作业. 2.      详细描述 Jobclient使用内置的Jo ...

  9. Hadoop权威指南:HDFS-目录,查询文件系统,删除文件

    目录 Hadoop权威指南:HDFS-目录,查询文件系统,删除文件 目录 查询文件系统 文件元数据:FileStatus 列出文件 文件模式 PathFilter对象 删除数据 Hadoop权威指南: ...

  10. Hadoop权威指南学习笔记三

    HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...

最新文章

  1. P1494 小Z的袜子
  2. 安全领域应该关注的网站
  3. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解
  4. 万物皆可傅里叶!用傅里叶变换还能画出世界名画!
  5. 区块链技术指南 第一章 区块链和比特币的初体验
  6. 32 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义差异码
  7. day64 django django零碎知识点整理
  8. 生成springboot banner网站
  9. win mysql 命令行提示_数据分析进阶——mysql基本语句
  10. java入门编程(菜鸟教程)
  11. java点击登录实现跳转_页面跳转的简单实现(单点登录)
  12. Windows 10日语输入法无法输入假名问题
  13. matlab图像去散焦,matlab为图像加运动模糊和散焦模糊
  14. echarts 地图自定义图标_echarts 地图自定义图标Symbol 及其颜色
  15. 计算机搜索不到网络打印机怎么处理,局域网内搜索不到打印机怎么办
  16. 能力值的计算:一年 365 天,以第 1 天的能力值为基数,记为 1.0,当每天好好学习时能力值相比前一天提高 1‰,当没有学习时由于遗忘等原因能力值相比前一天下降 1‰
  17. Matlab多元非线性函数拟合
  18. CDM是什么,和CDP的区别?
  19. 计算机网络与多媒体试卷,《计算机网络与多媒体技术》试卷
  20. PHP获取用户访问IP地址的5种方法

热门文章

  1. mysql绘制er图教程_使用MySQLWorkBench绘制ER图
  2. 用Navicat制作ER图及与SQL互相转化
  3. MemReduct内存自动清理工具
  4. html的细节优化,网页页面的细节优化策略
  5. python pandas中文手册-Pandas速查手册中文版(转)
  6. Ubuntu16.0.4 通过Docker安装酷Q
  7. 编译原理第五章课后题
  8. 中国综合能源服务市场盈利模式分析与投资战略规划研究报告2022-2028年
  9. 在C#中使用DevExpress中的ChartControl实现极坐标图
  10. android逆向学习路线(适合新手)