Hadoop生态

Hadoop部署
安装Ubuntu,设置NTP时间服务器,设置SSH,安装JDK,解压Hadoop,修改hadoop-env.sh、Hadoop环境变量、core-site.xml、mapred-site.xml、yarn-site.xml,分发配置,指定集群Slaves配置,格式化HDFS文件系统,启动Hadoop守护进程.
HDFS
基于流数据访问模式的分布式文件系统,支持海量数据存储,提供高吞吐量、高容错性的数据访问。优点:处理超大文件,TB甚至PB级;流式数据访问,一次写入,多次读写,一个数据集一旦生成,会被复制分发到不同的存储节点,然后响应各种数据分析任务请求;低成本运行,可运行在低廉的商用硬件集群.局限性:不适合处理低延迟的数据访问,主要处理高数据吞吐量应用;不适合处理大量的小文件,NameNode把文件系统的元数据存放在内存中,文件系统的容量由NameNode内存大小决定,小文件太多会消耗NameNode内存;不适合多用户写入和任意修改文件,不支持多用户对同一文件写操作以及在文件任意位置进行修改.
NameNode
元数据节点,用于管理分布式文件系统的命名空间,一个集群只有一个NameNode节点,是HDFS的管理者,主要负责命名空间管理和文件Block管理。在HDFS内部,一个文件被分成一个或多个Block存储在DataNode中,NameNode负责管理文件Block的所有元数据信息,主要包括‘文件名->数据块映射',’数据块->DataNode‘映射列表,该列表通过DataNode上报给NameNode建立,由NameNode决定文件数据块刀具体DataNode节点的映射.对于文件系统命名空间的管理,NameNode维护者文件系统树以及树中所有文件和文件夹的元数据。管理这些信息的文件分别是命名空间镜像文件namespace image(fsimage)和操作日志文件(edit log),这些信息被缓存在RAM中,也会被持久化到硬盘中.
DataNode
DataNode负责存储数据,一个Block会在多个DataNode中进行冗余备份,一个块在一个DataNode上最多只有一个备份,DataNode上存储了数据块ID和数据块的内容以及他们的映射关系。HDFS将每个文件存储成块序列,除了最后一个Block,所有Block都是同样大小,默认为128M。DataNode定时和NameNode进行通信,接受NameNode的指令。为减轻NameNode的负担,NameNode上不永久保存哪个DataNode上有哪些数据块的信息,二十通过DataNode启动时上报的方式更新NameNode上的映射表。DataNode和NameNode建立连接后,会不断和NameNode保持联系,接受NameNode的命令.DataNode通常以机架形式组织,机架通过一个交换机将所有系统连接在一起.DataNode同样作为服务器接受客户端的访问,处理数据块的读写请求,DataNode间还会互相通信,执行数据块复制任务。在客户端执行写操作时,DataNode需要相互配合保证写操作的一致性.DataNode功能包括:保存Block,每个Block对应一个元数据信息文件,描述这个Block属于哪个文件、第几个块等信息;启动DataNode线程,向NameNode定期汇报Block信息;定期向NameNode发送心跳保持联系,若NameNode十分钟未收到DataNode的心跳,则认为其lost并将其上的Block复制到其他的DataNode.
SecondaryNameNode
SecondaryNameNode定期的创建命名空间的检查点,首先从NameNode下载fsimage和edits log,然后在本地合并他们,将合并后新的fsimage上传回NameNode,减少了NameNode重新启动时合并fsimage和edits log的时间,定期合并fsimage和edits log文件,使edits log大小保持在限制范围内并起到冷备份作用,在NameNode失效时能恢复fsimage,SecondaryNameNode与NameNode通常运行在不同机器上,内存相同大小.SecondaryName工作流程:1、SecondaryNameNode会定期与NameNode通信,请求其停止使用edits文件,暂时将新的更新操作写到一个新的edits.new文件上,这个操作瞬间完成,上层感受不到差别;2、SecondaryNameNode通过HTTP GET方式从NameNode上获取到fsimage和edits log文件,并下载到本地的相应目录下;3、合并edits和fsimage文件,SecondaryNameNode将下载下来的fsimage载入内存,然后逐条执行edits文件中的各项更新操作,使得内存中的fsimage保持最新;4、SecondaryNameNode通过POST将新的fsimage文件发送到NameNode节点上;5、NameNode将接收到的新fsimage替换旧的fsimage,同时将edits.new替换edits文件,通过这个过程减小了edits.
机架感应
在HDFS中,数据块会被复制成副本,存放到不同的节点上,副本的存放是HDFS可靠性和性能的关键。HDFS采用一种成为机架感知的策略改进数据的可靠性、可用性和网络带宽的利用率。通过一个机架感知的过程,NameNode可以确定每个DataNode所属的机架id,将副本存放在不同的机架上以防止当整个机架失效时数据的丢失,并且允许读数据时充分利用多个机架的带宽,但一个写操作需要传输数据块到多个机架,增加了写的代价.
文件读取
1、HDFS Client通过FileSystem对象的Open()方法打开要读取的文件
2、DistributedFileSystem负责向远程的元数据节点发起RPC调用,得到文件的数据款信息,返回数据块列表。对于每个数据块,NameNode返回该数据块的DataNode地址
3、DistributedFileSystem返回一个FSDataInputSteam对象给客户端,客户端调用该对象的read()方法开始读取数据
4、通过对数据流反复调用read()方法,把数据从数据节点传输到客户端
5、当数据读取完毕时DFSInputSteam对象会关闭与此数据节点的连接,连接此文件下一个数据块的最近数据节点
6、当客户端读取完数据时,调用FSDataInputSteam对象的close()方法关闭输入流
文件写入
1、客户端调用DistributedFileSystem对象的create()方法创建一个文件输出流对象
2、DistributedFileSystem向远程的NameNode节点发起一次RPC调用,NameNode检查该文件是否已经存在,以及客户端是否有权限新建文件
3、客户端调用用FSDataOutputSteam对象的write()方法写数据,数据先被写到缓冲区,再被切分为一个个数据包
4、每个数据包被发送到由NameNode节点分配的一组数据节点的一个节点上,在这组数据节点组成的管线上一次传输数据包
5、管线上的数据节点按反向顺序返回确认信息(ack),最终由管线中的第一个数据节点将整条管线的确认信息发送给客户端
6、客户端完成写入,调用close()方法关闭文件输出流
7、调用DistributedFileSystem对象的close()方法关闭文件系统,同时通知NameNode文件写入成功
数据容错
数据节点出错:每个DataNode节点周期性向NameNode发送心跳信号,网络割裂会导致DataNode跟nameNode失去联系。NameNode通过心跳信号的缺失检测这种情况,并将这些近期不再发送心跳信号的DataNode标志位宕机,不会再将新的I/O请求发给他们。DataNode的宕机可能会引起一些数据块的副本低于指定值,NameNode不断检测这些需要复制的数据块,一旦发现低于设定副本数就启动赋值操作。在某个DataNode节点失效,某个副本遭到破坏,DataNode上的硬盘出错,或文件的副本系数增大时可能需要重新复制.
名称节点出错
名称节点保存了所有的元数据信息,其中最核心的两大数据时fsimage和edits log,这两个文件发生损坏,整个HDFS实例将失效.Hadoop采用两种机制确保名称节点的安全:第一,把名称节点上的元数据信息同步存储到其他文件系统中;第二,运行一个第二名称节点SecondaryNameNode,当名称节点宕机后,可以把第二名称节点作为一种弥补措施,利用第二名称节点中的元数据信息进行系统恢复,但仍会丢失部分数据.
数据出错
从某个DataNode获取的数据块有可能时损坏的,损坏可能由DataNode的存储设备错误、网络错误或软件bug造成。HDFS使用校验和判断数据块是否损坏。当客户端创建一个新的HDFS文件时,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS命名空间下.当客户端获取文件内容后,它会检验从DataNode获取的数据相对应的校验和是否匹配。若不匹配,客户端可以选择从其他DataNode获取该数据块的副本.
Mapreduce
分散任务,汇总结果,并行计算的大数据量计算编程模型.易于编程,良好的扩展性,高容错性,能对PB级以上海量数据进行离线处理.不擅长实时计算、流式计算、DAG计算.输入一个大文件,经过split分为多个分片;每个文件分片由单独的机器去处理;将各个机器计算的结果进行汇总并得到最终结果.
Spark
HA
浙公网安备 33010602011771号