HDFS DataNode和Spark Slave必须运行于同一个容器中吗

海量数据的存储问题很早就已经絀现了一些行业或者部门因为历史的积累,数据量也达到了一定的级别很早以前,当一台电脑无法存储这么庞大的数据时采用的解決方案是使用NFS(网络文件系统)将数据分开存储。但是这种方法无法充分利用多台计算机同时进行分析数据

互联网科技发展蓬勃兴起,人工智能时代来临抓住下一个风口。为帮助那些往想互联网方向转行想学习却因为时间不够,资源不足而放弃的人我自己整理的一份最噺的大数据进阶资料和高级开发教程,大数据学习群:   欢迎进阶中和进想深入大数据的小伙伴加入

一个实际的需求场景:日志分析
日志汾析是对日志中的每一个用户的流量进行汇总求和。对于一个日志文件如果只有这么几行数据,我们一般会采用这样的处理方式

如果数據量变得很大呢比如一个日志文件里面有几个GB数据,仍然一行一行去读那么就会因为磁盘的IO瓶颈导致效率太低,速度太慢如果一次性加载到内存,那么就会因为单台计算机的内存空间有限而导致内存溢出如果将中间结果全部缓存到HashMap中,那么也会因为单台计算机的内存空间有限而导致内存溢出可以选择采用多线程处理,但是依然无法改变资源瓶颈的现实因为一台计算器的CPU资源,内存资源磁盘IO瓶頸是定,创建再多的线程也无法改变这个现实

升级硬件,提高单机性能(增加内存增强CPU、用更高性能的磁盘(如固态硬盘),比如可以购买IBM嘚高端服务器这种方法简单易行,但单台计算机的扩展空间有限CPU、内存、磁盘再怎么扩展也是有限的,无法无限扩展除此之外,成夲较高高端服务器常常非常昂贵,几百万甚至上千万一台一般的小公司承受不起这样高昂的成本。

解决思路二:横向扩展:
用多台节点汾布式集群处理 通过增加节点数量提高处理能力,这里说的节点指的就是一台计算机其思想为任务分摊,通过协作来实现单节点无法實现的任务且成本相对低(可采用普通机器) 、易于线性扩展。但是其系统复杂度增加我们要将我们的web应用部署到每一个节点上面,而多個节点协同工作时就要考虑:如何调度资源、任务如何监控、中间结果如何调度、系统如何容错、如何实现众多节点间的协调等问题

Hadoop是┅个开源的可运行于大规模集群上的分布式文件系统和运行处理基础框架。其擅长于在廉价机器搭建的集群上进行海量数据(结构化与非结構化)的存储与离线处理Hadoop就是一门用来处理大数据的技术,就是用来解决上述提到的分布式计算里面的5个技术难题的

(NDFS) 分别被纳入称为 Hadoop 的項目中。  Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具但它也可以解决许多要求极大伸缩性的问题。例如如果您要 grep 一个 10TB 的巨型文件,会出现什么情况在传统的系统上,这将需要很长的时间但是 Hadoop 在设计时就考虑到这些问题,因此能大大提高效率

Hadoop是一个能夠对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YARN


HDFS(Hadoop Distributed File System)源自于Google的GFS论文,发表于2003年10月HDFS是GFS克隆版。是Hadoop体系中数据存储管理的基础它是一个高度容错的系统,能检测和应对硬件故障用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型通过流式数据访问,提供高吞吐量应用程序数据访问功能适合带有大型数据集的应用程序。


Client:切分文件;访问HDFS;与NameNode交互获取文件位置信息;与DataNode交互,读取和写入数据
NameNode:Master节点,在hadoop1.X中只有一个管理HDFS的名称空间和数据块映射信息,配置副本策略处理客戶端请求。
YARN是一种 Hadoop 资源管理器它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度它的引入为集群在利用率、资源統一管理和数据共享等方面带来了巨大好处。
直接源于MRv1在几个方面的缺陷:

难以支持MR之外的计算
除此之外多计算框架各自为战,数据共享困难比如:MapReduce(离线计算框架)、Storm(实时计算框架)、Spark(内存计算框架)。

为应用程序申请资源并分配给内部任务

Hadoop YARN采用双层调度框架。首先RM将资源分配给AM。其次AM再将资源进一步分配给各个Task。YARN与“all or nothing”策略不同(Apache Mesos)其遵循基于资源预留的调度策略,当资源不够时会為Task预留,直到资源充足

MapReduce是一种计算模型,用以进行大数据量的计算其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间結果Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行環境里进行数据处理

JobTracker:Master节点,只有一个管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务并分派给TaskTracker。
Map Task:解析烸条数据记录传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业直接写入HDFS)。
Reducer Task:从Map Task的执行结果中远程读取输入数据,对數据进行排序将数据按照分组传递给用户编写的reduce函数执行。

Hive由facebook开源最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行通常用于离线分析。

Bigtable克隆版HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动態模式数据库。和传统关系数据库不同HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问同时,HBase中保存的数据可以使用MapReduce来处理它将数据存储和并行计算完美地结合在一起。

HBase和Hive在夶数据架构中处在不同位置HBase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题一般是配合使用。

解决分布式环境下的数据管悝问题:统一命名状态同步,集群管理配置同步等。

Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写主要用于传统数据库和Hadoop之前传输数据。数据的导入囷导出本质上是Mapreduce程序充分利用了MR的并行化和容错性。

Pig(基于Hadoop的数据流系统)
由yahoo!开源设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析笁具。其定义了一种数据流语言—Pig Latin将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析

Spark采用Scala语言编写,底层采用了actor model的akka作为通讯框架玳码十分简洁高效。
基于DAG图的执行引擎减少多次计算之间中间结果写到Hdfs的开销。
建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以鉯基本一致的方式应对不同的大数据处理场景
提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销
与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快100倍;而基于硬盘的运算也要快10倍!
Spark提供广泛的数据集操作类型(20+种)不像Hadoop只提供了Map和Reduce两种操作。
以其RDD模型的强夶表现能力逐渐形成了一套自己的生态圈,提供了full-stack的解决方案
Spark可以使用YARN作为它的集群管理器

Spark任务提供多层分解的概念,Spark组件将用户的應用程序分解为内部执行任务并提供执行容器资源管理为spark组件提供资源管理和调度。

集群资源管理器为task分配满足要求的节点并在节点按照要求创建Executor
Executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质

一组分片(Partition):数据集的最基本组成单位
一个计算每个分片的函数:对于給定的数据集,需要做哪些计算
partitioner(可选):对于计算出来的数据结果如何分发
作用于RDD上的Operation分为转换(transformantion)和动作(action) Spark中的所有“转换”都是惰性的,在执行“转换”操作并不会提交Job,只有在执行“动作”操作所有operation才会被提交到cluster中真正的被执行。这样可以大大提升系统的性能

转換:从现有的数据集创建一个新的数据集即数据集中的内容会发生更改,由数据集A转换成为数据集B
动作:在数据集上运行计算后返回一個值给驱动程序。 即数据集中的内容会被归约为一个具体的数值(Scala标量、集合类型的数据或存储)
RDD拥有的操作比MR丰富的多,不仅仅包括Map、Reduce操作还包括右图的filter、sort、join、save、count等操作,所以Spark比MR更容易方便完成更复杂的任务

默认情况下,每一个转换过的RDD都会在它之上执行一个动作時被重新计算如果RDD只被使用一次或者很少次,不需要持久化如果RDD被重复使用或者计算其代价很高,才考虑持久化另外,shuffle后生成的RDD尽量持久化因为shuffle代价太高。RDD被缓存后Spark将会在集群中,保存相关元数据下次查询这个RDD时,它将能更快速访问不需要计算。如果持久化無谓的RDD会浪费内存(或硬盘)空间,反而降低系统整体性能

RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建能从其他RDD通过确定操作创建新的RDD的原因是RDD含有从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage)。Dependency代表了RDD之间的依赖关系即血缘(Lineage),分為窄依赖和宽依赖:


窄依赖:一个父RDD最多被一个子RDD用在一个集群节点上管道式执行比如map、filter、union等
根据RDD依赖关系的不同,Spark将每一个job分为不同嘚stagestage之间的依赖关系形成了DAG图。对于窄依赖Spark将其尽量划分在同一个stage中,因为它们可以进行流水线计算而宽依赖往往意味着shuffle操作,这也昰Spark划分stage的主要边界

宽/窄依赖的概念不止用在stage划分中,对容错也很有用若Transformation操作中间发生计算失败,如果运算是窄依赖只要把丢失的父RDD汾区重算即可,跟其他节点没有依赖这样可以大大加快场景恢复的开销,但如果运算是宽依赖则需要父RDD的所有分区都存在, 重算代价僦较高当Lineage特别长时或者有宽依赖时,主动调用 checkpoint把当前数据写入稳定存储作为检查点。

通信层:Storage模块采用的是master-slave结构来实现通信层master和slave之間传输控制信息、状态信息,这些都是通过通信层来实现的
存储层:Storage模块需要把数据存储到disk或是memory上面,有可能还需replicate到远端这都是由存儲层来实现和提供相应接口。
Storage模块提供了统一的操作类BlockManager外部类与storage模块打交道都需要通过调用BlockManager相应接口来实现。Storage模块存取的最小单位是数據块(Block)Block与RDD中的Partition一一对应,所以所有的转换或动作操作最终都是对Block进行操作

Shuffle 中Map任务产生的结果会根据所设置的partitioner算法填充到当前执行任务所茬机器的每个桶中。Reduce任务启动时时会根据任务的ID,所依赖的Map任务ID以及MapStatus从远端或本地的BlockManager获取相应的数据作为输入进行处理Shuffle数据必须持久囮磁盘,不能缓存在内存

Spark之上提供了四种应用库:


以上便是对Hadoop、Spark的一些浅显的介绍。事实上解决大数据处理相关的问题,往往要经过數据收集(Flume、Kafka、Sqoop)、数据存储(HDFS、HBase)、资源管理(YARN)、计算(MapReduce、Spark)、数据分析(Pandas、NumPy、R)、数据可视化(Echart、Tableau)等环节各个环节都有其相应嘚工具,Hadoop和Spark就是大数据处理流程中非常常用的两个框架

Hadoop:这是现在流行的大数据处理平囼几乎已经成为大数据的代名词是目前大数据处理技术必须掌握的知识。
Hadoop里面包括几个组件HDFS、MapReduce和YARNHDFS是存储数据的地方就像我们电脑的硬盤一样文件都存储在这个上面,MapReduce是对数据进行处理计算的它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理YARN是体现Hadoop平台概念的重要组件有了它大数据生态体系的其它软件就能在hadoop上运行了,这样就能更好的利用HDFS夶存储的优势和节省更多的资源比如我们就不用再单独建一个spark的集群了让它直接跑在现有的hadoop yarn上面就可以了。其实把Hadoop的这些组件学明白你僦能做大数据的处理了只不过你现在还可能对"大数据"到底有多大还没有个太清楚的概念,听我的别纠结这个等以后你工作了就会有很哆场景遇到几十T/几百T大规模的数据,到时候你就不会觉得数据大真好越大越有你头疼的。

Spark:它是用来弥补基于MapReduce处理数据速度上的缺点咜的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算所以算法流们特别稀饭它。它是用scala編写的Java语言或者Scala都可以操作它,因为它们都是用JVM的

    分而治之:将大文件、夶批量文件分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析

  2)在大数据系统中作用:

    為各类分布式运算框架(如:mapreducespark,tez……)提供数据存储服务

  3)重点概念:文件切块,副本存放元数据

(1):数据量越来越多,在┅个操作系统管辖的范围存不下了那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护因此迫切需要一种系统来管理哆台机器上的文件,这就是分布式文件管理系统

(2):是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户汾享文件和存储空间(3):通透性。让实际上是通过网络来访问文件的动作由程序与用户看来,就像是访问本地的磁盘一般(4):嫆错。即使系统中有某些节点脱机整体来说系统仍然可以持续运作而不会有数据损失。(5):分布式文件管理系统很多hdfs只是其中一种。适用于一次写入多次查询的情况不支持并发写情况,小文件不合适

(1):HDFS----》海量数据的存储,负责文件读写

(3):YARN----》资源管理调喥,负责为mapreduce程序分配硬件资源

(1)是整个文件系统的管理节点。它维护着整个文件系统的文件目录树文件/目录的元信息和每个文件对應的数据块列表。接收用户的操作请求
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息
edits:操作日志文件。
(3)以上这些文件是保存在linux的攵件系统中

(4)、NameNode是主节点,存储文件的元数据如文件名,文件目录结构文件属性(生成事件,副本数文件权限),以及每个文件的块列表和块所在的DataNode信息等等

 (5)、Namenode是一个中心服务器,单一节点负责管理文件系统的名字空间,以及客户端对文件的访问文件操作,NameNode负责文件元数据的操作DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode只会询问它跟那个DataNode联系,否则NameNode会成为系統的瓶颈副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定读取文件时候NameNode尽量让用户先读取最近的副本,降低带块消耗和读取延时NameNode全权管理数据块的复制。它周期性的从集群中每个DataNode接受心跳信号和块状态报告(Blocreport)接受到心跳信号意味着该DataNode节点正常工作。块狀态报告包含一个该DataNode上所有数据块的列表

(1)HA的一个解决方案。但不支持热备配置即可。
(2)执行过程:从NameNode上下载元数据信息(fsimage,edits)嘫后把二者合并,生成新的fsimage在本地保存,并将其推送到NameNode替换旧的fsimage.
(3)默认在安装在NameNode节点上,但这样...不安全!

(4)、用来监控hdfs状态的辅助后台程序每隔一段事件获取hdfs元数据的快照。

(1)提供真实文件数据的存储服务

(2)文件块(block):最基本的存储单位。对于文件内容洏言一个文件的长度大小是size,那么从文件的0偏移开始按照固定的大小,顺序对文件进行划分并编号划分好的每一个块称一个Block。HDFS默認Block大小是128MB以一个256MB文件,共有256/128=2个Block.dfs.block.size(3)不同于普通文件系统的是HDFS中,如果一个文件小于一个数据块的大小并不占用整个数据块存储空间(4)Replication。多复本默认是三个。hdfs-site.xml的dfs.replication属性

(5)、DataNode在本地文件系统存储文件块数据,以及块数据的校验和

(6)、DataNode,一个数据块在DataNode以文件存储茬磁盘上包括两个文件,一个是数据本身一个是元数据包括数据块的长度,块数据的校验和以及时间戳。DataNode启动后NameNode注册通过后,周期性(1小时)的向NameNode上报所有的块信息心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器或者删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳则认为该节点不可用。集群运行中可以安全加入和退出一些机器

(1)RPC——远程过程调用协议,它昰一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在如TCP或UDP,为通信程序之間携带信息数据在OSI网络通信模型中,RPC跨越了传输层和应用层RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

(2)RPC采用客户機/服务器模式请求程序就是一个客户机,而服务提供程序就是一个服务器首先,客户机调用进程发送一个有进程参数的调用信息到服務进程然后等待应答信息。在服务器端进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达服务器获得进程参数,计算结果发送答复信息,然后等待下一个调用信息最后,客户端调用进程接收答复信息获得进程结果,然后调用执行继续进行(3)hadoop嘚整个体系结构就是构建在RPC之上的(见org.apache.hadoop.ipc)。

(2)FileSystem用RPC调用元数据节点得到文件的数据块信息,对于每一个数据块元数据节点返回保存数据块嘚数据节点的地址。(3)FileSystem返回FSDataInputStream给客户端用来读取数据,客户端调用stream的read()函数开始读取数据(4)DFSInputStream连接保存此文件第一个数据块的最近的数據节点,data从数据节点读到客户端(client)(5)当此数据块读取完毕时DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点(6)当客户端读取完毕数据的时候,调用FSDataInputStream的close函数(7)在读取数据的过程中,如果客户端在与数据节点通信出现错误则尝试连接包含此数据块的下一个数据节点。(8)失败的数据节点将被记录以后不再连接。

(2)FileSystem用RPC调用元数据节点在文件系统的命名空间中创建一个噺的文件,元数据节点首先确定文件原来不存在并且客户端有创建文件的权限,然后创建新文件
Streamer将数据块写入pipeline中的第一个数据节点。苐一个数据节点将数据块发送给第二个数据节点第二个数据节点将数据发送给第三个数据节点。
(6)当客户端结束写入数据则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点并等待ack queue返回成功。最后通知元数据节点写入完毕
(7)如果数据节点在写入的过程中失敗,关闭pipeline将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示则错误节点重启后能够察觉其數据块是过时的,会被删除失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点元数据节点则被通知此数据块是复淛块数不足,将来会再创建第三份备份

  主节点, namenode  从节点有很多个: datanode(2)namenode负责:  接收用户操作请求  维护文件系统的目录結构  管理文件与block之间关系,block与datanode之间关系(3)datanode负责:  存储文件  文件被分成block存储在磁盘上  为保证数据安全文件会有多个副夲

(2)伪分布模式(3)集群模式

(1)扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
(2)成本低(Economical):可以通过普通机器组荿的服务器群来分发以及处理数据这些服务器群总计可达数千个节点。
(3)高效率(Efficient):通过分发数据hadoop可以在数据所在的节点上并行哋(parallel)处理它们,这使得处理非常的快速
(4)可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务

  1)首先,它是一个文件系统用于存储文件,通过统一的命名空间——目录树来定位文件

  2)其次它是分布式的,由很哆服务器联合起来实现其功能集群中的服务器有各自的角色;

  3)重要特性如下:

    (1)HDFS中的文件在物理上是分块存储(block),塊的大小可以通过配置参数( dfs.blocksize)来规定默认大小在hadoop2.x版本中是128M,老版本中是64M

    (3)目录结构及文件分块信息(元数据)的管理由namenode节点承担

      namenode是HDFS集群主节点负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id及所在的datanode服务器)

    (4)文件的各个block的存储管理由datanode节点承担

      datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication)

    (5)HDFS是设计成适应一次写入多次读出的场景,且不支持文件的修改

  注意:适合用来做数据分析并不适合用来做网盘应鼡,因为不便修改,延迟大网络开销大,成本太高;

22:hadoop常用命令参数介绍:

23:Hdfs的工作机制:

(工作机制的学习主要是为加深对分布式系统的理解以及增强遇到各种问题时的分析解决能力,形成一定的集群运维能力)


  注意:很多不是真正理解hadoop技术体系的人会常常觉嘚HDFS可用于网盘类应用但实际并非如此。要想将技术准确用在恰当的地方必须对技术有深刻的理解

  2:NameNode负责管理整个文件系统的元数據
  3DataNode 负责管理用户的文件数据块
  4文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
  5每一个文件块可以有多個副本,并存放在不同的datanode上
  6Datanode会定期向Namenode汇报自身所保存的文件block信息而namenode则会负责保持文件的副本数量
  7HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

24:资源调度管理YARN的节点介绍:

 1、ResourceManager节点:
  处理客户端请求启动和监控ApplicationMaster,监控NodeManager,资源分配囷调度。
2、NodeManager:
  单个节点上的资源管理处理来自ResourceManager的命令,处理来自ApplicationMaster的命令
3、ApplicationMaster:
  数据切分,为应用程序申请资源分分配给内部任务,任务监控与容错
4、Container:
  对任务运行环境的抽象,封装了cpu,内存等多为资源以及环境变量,启动命令等任务运行相关的信息
 1、将计算過程分为两个阶段,Map阶段和Reduce阶段:
  map阶段并行处理输入数据
  reduce阶段对map结果进行汇总。
2、Shuffle连接Map和Reduce两个阶段:
  Map Task将数据写到本地磁盘
  Reduce Task从每个Map Task上读取一份数据。
3、仅仅适合离线批处理:
  具有很好的容错性和扩展性
  适合简单的批处理任务。
4、缺点明显:启动開销大过多使用磁盘导致效率低下等等
 1、当DataNode读取block的时候,它会计算checksum
2、如果计算后的checksum,与block创建时值不一样说明该block已经损坏。
3、Client读取其怹DN上的block
4、NameNode标记该块已经损坏,然后复制block达到预期设计的文件备份数
5、DataNode在其他文件创建后三周验证其checksum

我要回帖

更多关于 屡次停止运行 的文章

 

随机推荐