大数据学习

自给定义:短时间快速产生大量多种多样的有价值的信息

如今数据越来越多,为了解决数据量过大的问题,垂直扩展机制,和横向扩展机制相继进入视线,

垂直扩展指的是再一台服务器上尽可能的扩大内存,而横向扩展指的是将许多个计算机联系起来,例如下图:

大数据学习_第1张图片

  讲完这些,就不得不说一说hadoop生态圈和spark生态圈了,

hadoop包括以下模块

   

  1. Hadoop Common:支持其他Hadoop模块的常用实用程序。
  2. Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  3. Hadoop YARN作业调度和集群资源管理的框架。
  4. Hadoop MapReduce:基于YARN的系统,用于并行处理大型数据集。

spark包括

  1.     spark core
  2.     sparkSQL   可以使用sql处理
  3.     sparkStreaming----流式处理
  4.     mllib -------机器学习库
  5.     graphx------spark停止维护

hadoop的特点是一次写入多次读取

hadoop使用的HDFS分布式文件系统是通过主从架构进行数据的读写与保存,备份,下面为HDFS的详解

  • Block数据块;

    1. 1)基本存储单位,一般大小为64M(1.x,2.x128M)减少搜寻时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;2)减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;3)对数据块进行读写,减少建立网络的连接成本)

    2. 一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小

    3. 基本的读写单位,类似于磁盘的页,每次都是读写一个块

    4. 每个块都会被复制到多台机器,默认复制3份
  • NameNode

    1. 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小

    2. 一个Block在NameNode中对应一条记录,如果是大量的小文件,会消耗大量内存。同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件

    3. 数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)

    4. NameNode失效则整个HDFS都失效了,所以要保证NameNode的可用性
  • DataNode

    1.  保存具体的block数据 

    2. 负责数据的读写操作和复制操作

    3. DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息

    4. DataNode之间会进行通信,复制数据块,保证数据的冗余性

如果上面对于HDFS理解比较困难的话,下面两幅图可以帮助初学者建立一个很好的思维基础,从而更好的理解HDFS的运行机制

 

大数据学习_第2张图片

就如上图所表达的一样,NN如老板一般,他负责管理元数据,管理员工DN,和掌控全局,接受Client的请求,保持与DN之间的通信,而DN为员工,其作用为存储数据,实时向NN发送节点的状态,接受Client的指派。

当一个大文件进行   写操作  的时候,Client会将大文件进行切块,文件的默认大小为/128/m=block块,并且向NN进行汇报(块数,文件大小,文件的权限,文件的属主,文件的上传时间),当切块完成后,Client会去向NN申请资源,NN返回给Client一些负载量不高的DN的信息,这时候,Client会向DN里面发送block并且做好信息的备份,一般情况下,信息会被复制成三份,进行存储,最后,当DN信息接收完成之后,会向NN汇报信息的接收情况。详细分点如下图:

大数据学习_第3张图片

进行  读请求  的时候,

  1. NN会向Client发送一个请求,Client接收到请求之后,会向NN去申请节点信息,(blockid:指的是offset偏移量,在数据进行切块的时候会给数据块编号,blockid就是每个数据块的编号)。
  2. 之后,NN会向Client发送所读取的节点的信息,
  3. Client获取到节点的信息之后会去相应的DN上拿取数据,但其整个过程中遵循了一个就近原则,靠近NN的DN的信息优先读取

最后,详细说一下备份操作的机制

  1. 集群内提交,再提交的节点上放置block                                                                                                                                                 集群外提交,选择一个负载不高的节点进行存储
  2. 放置在与第一个备份不同机架的任意节点上
  3. 放置在第二个机架的不同的节点上

按照存储的思路来讲,肯定是Client发送三次数据进行存储,那么这个时候就显得特别浪费资源了,如何解决这个问题呢,我们使用了一个管道叫做 pipeline管道,其具体流程请参照:

  1. NN在返回给Client一些DN的信息之后,
  2. Client会和这些DN形成一个管道,并且将block切割成一个个ackPackage(64k)的数据块
  3. DN会从管道中拿取相应的数据进行存储,
  4. 当存储完成之后,DN会向NN进行汇报

 

你可能感兴趣的:(大数据,linux)