1、大数据
1.1、大数据概念
“大数据”是收集各种数据,经过分析后用来做有意义的事,其中包括对数据进行采集、管理、存储、搜索、共享、分析和可视化。大数据技术就是发现大规模数据中的规律,通过对数据的分析实现对运营层决策的支持。大数据技术框架一般包含6个部分,分别是数据收集、数据存储、资源管理、计算框架、数据分析和数据可视化。
1.2、大数据的特点
大数据的特点可以用“4v”来表示,分别为volume、variety、velocity和value。
- 量性(volume):大数据的数据量很大,每天我们的行为都会产生大批量数据。
- 多样性(variety):大数据的类型多种多样,比如视频、音频和图片都属于数据。
- 高速性(velocity):大数据要求处理速度快,比如淘宝“双十一”需要实时显示交易数据。
- 价值性(value):大数据产生的价值密度低,意思是说大部分数据没有参考意义,少部分数据会形成高价值,比如私家汽车安装的摄像头,大部分情况下是用不到的,但是一旦出现“碰瓷”等现象就会很有价值。
2、Hadoop概述
2.1、简介
Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。
狭义上说,Hadoop指Apache这款开源软件,它的核心组件有:
- HDFS(Hadoop Distributed File System,分布式存储系统):主要解决海量数据的存储,同时还具有高可靠性、高扩展性和高吞吐率的特点。
- MapReduce(分布式计算框架):一般用于对海量数据的计算,它的特点是易于编程、高容错和高扩展等优点。另外,MapReduce可以独立于HDFS使用。
- YARN(Yet Another Resource Negotiator,作业调度和集群资源管理框架):解决资源调度问题。
广义上说,Hadoop通常指Hadoop生态圈。如下所示:
Hadoop生态圈详细内容请参考 《Hadoop生态圈技术概述》
2.2、Hadoop特性
- 扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。从而能可靠地(reliably)存储和处理千兆字节(PB)数据。
- 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据,以至于成本很低。
- 高效率(Efficient):通过分发数据,Hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
- 可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得信赖。
2.3、Hadoop发行版本
Hadoop的发行版本分为开源社区版和商业版,社区版指由Apache软件基金会维护的版本,是官方维护的版本体系。商业版Hadoop是指由第三方商业公司在社区版的基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,比如:cloudera的CDH、mapR等。
Hadoop的版本也比较特殊,有很多条分支并行的发展,大致分为:1.x,2.x,3.x。其中,Hadoop1.x 由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成。Hadoop2.x则包含了一个支持NameNode横向扩展的HDFS,一个资源管理协调系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比1.x版本,2.x具有了更好的扩展性,性能,并支持多种计算框架。3.x主要是在2.x的基础上,增强了一些功能。
3、Hadoop部署
3.1、Hadoop集群
Hadoop集群具体来说,包括了两个集群:HDFS集群和YARN集群,两者逻辑上分离,物理上常在一起。其中,HDFS集群负责海量数据的存储,集群中的角色主要有:NameNode、DataNode、SecondaryNameNode。YARN集群主要负责资源调度,集群中的角色主要有:ResourceManager、NodeManager。而Hadoop框架中的MapReduce主要是一个分布式计算框架,是应用程序开发包,由用户按照编程规范进行程序开发,然后打包并运行在HDFS集群上,并受到YARN集群的资源调度管理。
HDFS模块
- NameNode,集群中的主节点,主要用来管理集群当中的各种数据和接受客户端的读写服务。
- DataNode,集群中的从节点,主要用来存储集群中的各种数据。
- SecondaryNameNode,主要用于集群中元数据信息的辅助管理,即帮助NameNode合并edits,减少NameNode启动时间。
YARN模块
- ResourceManager,接收用户的计算请求任务,并负责集群的资源调度
- NodeManager,负责执行主节点APPmaster分配的任务
3.2、Hadoop部署方式
Hadoop部署方式分为:独立模式(Standalone Mode)、伪分布式模式(Pseudo-Distributed Mode)、集群模式(Cluster Mode)。
- 独立模式,又称单机模式。仅一个机器运行一个java进程,一般用于调试。
- 伪分布模式,也是一个机器运行,但是HDFS的NameNode和DataNode 与 YARN的ResourceManager和NodeManager,分别启动单独的java进程,也用于测试。
- 集群模式,会使用N台主机组成一个Hadoop集群。这种模式下,主节点和从节点分别部署在不同的主机上。
4、分布式文件系统(HDFS)
4.1、分布式文件系统(DFS,Distributed FileSystem)
分布式文件系统是将分布于不同电脑上的文件组合为单一的名称空间,并使得在网络上建立一个单一的、层次化多重文件服务器和服务器共享的工作更为方便的途径。分布式文件系统使用户更加容易访问和管理物理上跨网络分布的文件。DFS为文件系统提供了单个访问点和一个逻辑树结构,通过DFS,用户在访问文件时不需要知道它们的实际物理位置,即分布在多个服务器上的文件在用户面前就如同在网络的同一个位置。
4.2、HDFS简介
HDFS是Hadoop自带的分布式文件系统,即Hadoop Distributed File System。HDFS是一个使用Java语言实现的分布式、可横向扩展的文件系统。
HDFS包括一个名称节点(NameNode)和若干个数据节点(DataNode),属于主/从(Master/Slave)关系的结构模型。其中,名称节点负责管理文件系统的命名空间及客户端对文件的访问,也就是中心服务器。而集群中的数据节点一般是一个节点运行一个数据节点进程,其中每个数据节点上的数据实际上是保存在本地的Linux文件系统中,并在名称节点的统一调动下,负责处理文件系统客户端的读/写请求,或删除、创建和复制数据块等操作。
4.3、HDFS的设计目标
- 大数据集
HDFS适合存储大量文件,总存储量可以达到PB/EB,单个文件一般在几百兆。 - 基于廉价硬件,容错率高
Hadoop并不需要运行在昂贵且高可靠的硬件上,其设计运行在商用廉价硬件的集群上,因此对于庞大的集群来说,节点发生故障的几率还是非常高的。在HDFS中可能会有成百上千个Server集群组成,每一个server只存储某个文件的一部分数据。HDFS默认采用3个副本机制。因此,在HDFS遇到故障时迅速切换备份,可以不让用户察觉到明显的中断。 - 流式数据访问(一致性模型)
HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变了。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。MapReduce应用或网络爬虫应用都非常适合这个模型。 - 顺序访问数据
HDFS适用于处理批量数据,而不适合随机定位访问。 - 移动计算代价比移动数据代价低
一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在之处显然更好,HDFS提供给应用这样的接口
4.4、HDFS优缺点
1、HDFS的优点
- 高容错性:数据自动保存多个副本,副本丢失后自动恢复。
- 适合批处理:移动计算而非数据,数据位置暴露给计算机框架。
- 适合大数据处理:GB、TB,甚至PB级数据,百万规模以上的文件数量,10k+节点。
- 可构建在廉价机器上:通过副本提高可靠性,提供了容错和恢复机制。
2.HDFS的缺点
- 不适合低延时数据访问:寻址时间长,适合读取大文件,低延迟与高吞吐率。
- 不适合小文件存取:占用NameNode大量内存,寻找时间超过读取时间。
- 并发写入、文件随机修改:一个文件只能有一个写入者,仅支持append(日志),不允许修改文件。
4.5、HDFS中的核心概念
- 数据块(block)
每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。HDFS也有块的概念,在HDFS 1.x中默认数据块大小为64MB,在HDFS 2.x中默认数据块大小为128MB。HDFS中小于一个块大小的文件不会占据整个块的空间,与单一的文件磁盘系统不同。 - NameNode
集群中的主节点,主要用来管理集群当中的各种数据和接受客户端的读写服务。一个集群通常只有一台活动的NameNode,它存放了HDFS的元数据且一个集群只有一份元数据。NameNode保存的元数据信息包括文件ownership、文件的permissions,以及文件包括哪些Block、Block保存在哪个DataNode等信息。这些信息在启动后会加载到内存中。 - SecondaryNameNode
主要用于集群中元数据信息的辅助管理,即帮助NameNode合并edits,减少NameNode启动时间。SecondaryNameNode执行合并时机如下:1>、根据配置文件设置的时间间隔fs.checkpoint.period,默认3600秒。2>、根据配置文件设置edits log大小fs.checkpoint.size,规定edits文件的最大值默认是64MB。 - DataNode。
集群中的从节点,主要用来存储集群中的各种数据。DataNode中文件的储存方式是按大小分成若干个Block,存储到不同的节点上,Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,BlockSize不可变更。默认情况下每个Block都有3个副本。 - 元数据
元数据保存在NameNode的内存中,以便快速查询,主要包括fsimage和edits。其中,fsimage是元数据镜像文件(保存文件系统的目录树)。edits是元数据操作日志(针对目录树的修改操作)被写入共享存储系统中,比如NFS、JournalNode,内存中保存一份最新的元数据镜像(fsimage+edits)。
4.6、HDFS的常用命令
1、查看文件
语法:hdfs dfs -ls [-d] [-h] [-R] [
其中,-d:显示目录。-h:以易读的方式显示文件的大小。-R:递归列出目录的内容。
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /
Found 6 items
drwxr-xr-x - root supergroup 0 2020-08-10 22:28 /input
drwxr-xr-x - root supergroup 0 2020-08-10 23:27 /input2
drwxr-xr-x - root supergroup 0 2020-08-10 22:30 /output
drwxr-xr-x - root supergroup 0 2020-05-08 20:52 /sqoop
drwxrwx--- - root supergroup 0 2020-05-08 07:24 /tmp
drwx------ - root supergroup 0 2020-08-10 22:27 /user
2、上传文件
语法:hdfs dfs -put [-f] [-p] <localsrc> <dst>
其中,-p:保留访问和修改时间、所有权和模式。-f:如果文件已存在,可以覆盖。
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /input
Found 1 items
-rw-r--r-- 3 root supergroup 34 2020-08-10 22:28 /input/test.txt
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -put test2.txt /input
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /input
Found 2 items
-rw-r--r-- 3 root supergroup 34 2020-08-10 22:28 /input/test.txt
-rw-r--r-- 3 root supergroup 34 2020-08-11 18:40 /input/test2.txt
3、下载文件
语法:hdfs dfs -get [-p] [-ignoreCrc] [-crc] <src> <localdst>
其中,-p:保留访问和修改时间、所有权和模式。-ignorecrc::复制CRC校验失败的文件。-crc:复制文件以及CRC信息。
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -get /input ./
[root@node01 servers]# ls
input test2.txt
[root@node01 servers]#
4、删除文件
语法:hdfs dfs -rm [-f] [-r|-R] [-skipTrash] <src>
其中,-f:如果该文件不存在,则不显示诊断消息或修改退出状态以反映错误。-r:递归目录的内容。-skipTrash:直接将文件或目录drop掉,不放到trash里面。
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /input
Found 2 items
-rw-r--r-- 3 root supergroup 34 2020-08-10 22:28 /input/test.txt
-rw-r--r-- 3 root supergroup 34 2020-08-11 18:40 /input/test2.txt
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -rm -skipTrash /input/test2.txt
Deleted /input/test2.txt
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /input
Found 1 items
-rw-r--r-- 3 root supergroup 34 2020-08-10 22:28 /input/test.txt
[root@node01 servers]#
5、查看文件
语法:hdfs dfs -cat [-ignoreCrc] <src>
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -cat /input/test.txt
aa
bb
dd
cc
[root@node01 servers]#
6、创建目录
语法:hdfs dfs -mkdir[-p] <paths>
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -mkdir /input/adir
[root@node01 servers]# ./hadoop-2.7.5/bin/hdfs dfs -ls /input
Found 2 items
drwxr-xr-x - root supergroup 0 2020-08-11 18:59 /input/adir
-rw-r--r-- 3 root supergroup 34 2020-08-10 22:28 /input/test.txt
[root@node01 servers]#
7、复制文件
语法:hdfs dfs -copyFromLocal [-f] [-p] <localsrc> <dst>。除了限定源路径是一个本地文件外,和put命令相似。
更多内容可以参考: 《Hadoop Shell命令》
5、资源协调管理系(YARN)
YARN是一个框架管理器,从Hadoop 2引入,最初是为了改善MapReduce的实现,但是它具有通用性,同样执行其他分布式计算模式,用户可以将各种计算框架移植到YARN上,统一由YARN进行管理和资源调度。目前支持的计算框架有MapReduce、Storm、Spark和Flink等。
在MapReduce1中,具有如下局限性:
- 扩展性差:jobtracker兼顾资源管理和作业控制跟踪功能跟踪任务,启动失败或迟缓的任务,记录任务的执行状态,维护计数器),压力大,成为系统的瓶颈
- 可靠性差:采用了master/slave结构,master容易单点故障
- 资源利用率低:基于槽位的资源分配模型,槽位是一种粗粒度的资源划分单位,通常一个任务不会用完一个槽位的资源,hadoop1分为map slot和reduce slot,而它们之间资源不共享,造成一些资源空闲。
- 不支持多框架:不支持多种计算框架并行
YARN很好解决了MapReduce1中的局限性,YARN基本思想:在YARN中由ResourceManager和ApplicationMaster进程来分别实现资源管理和作业调度。其中,ResourceManager进程完成整个集群的资源管理和调度,而Application Master进程则负责应用程序的相关事务,如任务调度、容错和任务监控等。系统中所有应用资源调度的最终决定权由ResourceManager担当。
5.1、YARN的核心组件
1>、Resourcemanager
ResourceManager 拥有系统所有资源分配的决定权,负责集群中所有应用程序的资源分配,拥有集群资源主要、全局视图。因此为用户提供公平的,基于容量的,本地化资源调度。根据程序的需求,调度优先级以及可用资源情况,动态分配特定节点运行应用程序。它与每个节点上的NodeManager和每一个应用程序的ApplicationMaster协调工作。
ResourceManager的主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源,并不关注每个应用程序的状态管理。ResourceManager主要有两个组件:Scheduler和ApplicationManager:
1>、Scheduler资源调度器
Scheduler是一个可插拔的插件,负责各个运行中的应用的资源分配,受到资源容量,队列以及其他因素的影响。是一个纯粹的调度器,不负责应用程序的监控和状态追踪,不保证应用程序的失败或者硬件失败的情况对task重启,而是基于应用程序的资源需求执行其调度功能,使用了叫做资源container的概念,其中包括多种资源,比如,cpu,内存,磁盘,网络等。在Hadoop的MapReduce框架中主要有三种Scheduler:FIFO Scheduler,Capacity Scheduler和Fair Scheduler。
- FIFO Scheduler:先进先出,不考虑作业优先级和范围,适合低负载集群。
- Capacity Scheduler:将资源分为多个队列,允许共享集群,有保证每个队列最小资源的使用。
- Fair Scheduler:公平的将资源分给应用的方式,使得所有应用在平均情况下随着时间得到相同的资源份额。
2>、 ApplicationManager
ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。
3>、NodeManager
NodeManager是YARN节点的一个“工作进程”代理,管理hadoop集群中独立的计算节点,主要负责与ResourceManager通信,负责启动和管理应用程序的container的生命周期,监控它们的资源使用情况(cpu和内存),跟踪节点的监控状态,管理日志等。并报告给RM。
NodeManager在启动时,NodeManager向ResourceManager注册,然后发送心跳包来等待ResourceManager的指令,主要目的是管理ResourceManager分配给它的应用程序container。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。在运行期,通过NodeManager和ResourceManager协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态。主要职责:
- 接收ResourceManager的请求,分配Container给应用的某个任务
- 和ResourceManager交换信息以确保整个集群平稳运行。ResourceManager就是通过收集每个NodeManager的报告信息来追踪整个集群健康状态的,而NodeManager负责监控自身的健康状态。
- 管理每个Container的生命周期
- 管理每个节点上的日志
- 执行Yarn上面应用的一些额外的服务,比如MapReduce的shuffle过程
3>、ApplicationMaster
用户作业生命周期的管理者它的主要功能就是向ResourceManager(全局的)申请计算资源(Containers)并且和NodeManager交互来执行和监控具体的TASK。
ApplicationMaster负责与scheduler协商合适的container,跟踪应用程序的状态,以及监控它们的进度,ApplicationMaster是协调集群中应用程序执行的进程。每个应用程序都有自己的ApplicationMaster,负责与ResourceManager协商资源(container)和NodeManager协同工作来执行和监控任务 。
当一个ApplicationMaster启动后,会周期性的向ResourceManager发送心跳报告来确认其健康和所需的资源情况,在建好的需求模型中,ApplicationMaster在发往ResourceManager中的心跳信息中封装偏好和限制,在随后的心跳中,ApplicationMaster会对收到集群中特定节点上绑定了一定的资源的container的租约,根据Resourcemanager发来的container,ApplicationMaster可以更新它的执行计划以适应资源不足或者过剩,container可以动态的分配和释放资源。
4>、Container
Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。
一个Container就是一组分配的系统资源,现阶段只包含两种系统资源(之后可能会增加磁盘、网络、GPU等资源),由NodeManager监控,Resourcemanager调度。
每一个应用程序从ApplicationMaster开始,它本身就是一个container(第0个),一旦启动,ApplicationMaster就会根据任务需求与Resourcemanager协商更多的container,在运行过程中,可以动态释放和申请container。
详细请参考:《hadoop之yarn详解(基础架构篇)》
6、MapReduce
6.1、MapReduce执行过程
-
Split阶段
Split阶段是把输入文件按照一定的标准分片 (InputSplit),每个输入片的大小是固定的。每一个输入片由一个Mapper进程处理。 -
数据读取
数据片段以key和value的形式被读进来,默认是以行的下标位作为key,以行的内容作为value。 -
Map阶段
数据会传入Map中进行处理,在Map中处理完后还是以key和value的形式输出。该过程一般有程序员完成。 -
Shuffle(洗牌)
Shuffle起到连接Map任务与Reduce任务的作用。Shuffle完成对数据的Partition(分区)和Sort(排序)等操作,。但是Shuffle不会对输入的数据进行改动,所以还是key2和value2。 -
Reduce处理
数据随后传给了Reduce进行处理,Reduce处理完后,生成key3和value3。该过程一般有程序员完成,可以跳过。 -
输出结果
Reduce处理完的数据会被写到HDFS的某个目录中。
6.2、Map Reduce的文件切片规则
Split的大小默认与block对应,也可以由用户任意控制。计算公式:max(min.split,min(max.split,block))
其中,max.split=totalSize/numSpilt,totalSize为文件大小,numSplit为用户设定的map task个数,默认为1;min.split=InputSplit的最小值,具体可以在配置文件中配置参数mapred.min.split.size,不配置时默认为1B,block是HDFS中块的大小。
7、Hadoop集群搭建
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68805.html