Mr.kang之真经求取
                                        ---积跬步,至千里

大数据

  导言

    “大数据”指数据集的大小超过了现有典型的数据库软件和工具的处理能力,即使捕捉,存储,聚合,管理这些大数据以及对数据的深度分析的新技术和新能力,正在快速增长,就像预测计算芯片增长速度的摩尔定律一样

Hadoop

  • 由大量独立的服务器通过网络互连形成集群,每个服务器自带存储
  • 优势:计算与存储融合,支持横向扩展,拥有更好的扩展性
  • 劣势:解决数据冲突时需要节点之间的协作
  • 适用范围:1.数据包库和离线数据分析  2.大规模在线实时应用(单行事务处理能满足的场景)
  • hadoop的子项目
  1. core:一套分布式文件系统以及支持MapReduce的计算框架
  2. HDFS:Hadoop分布式文件系统
  3. MapReduce:是一个使用简易的软件框架,基于他写出来的应用程序能够运行在上千个商用机器组成的大型集群上,并且以一种可靠容错的方式并行处理T以上级别的数据集
  4. zookeeper:是高可用的和可靠的分布式协同系统
  5. Hive:是为提供简单的数据操作而设计的下一代分布式数据仓库,它提供了简单的类似SQL的语法的HiveQL语言进行数据查询
  6. HBase:建立于Hadoop core之上提供一个可扩展的数据库系统

HDFS

  • HDFS为了做到可靠性创建了多分数据的赋值,并将它们放置在粉武器群的计算节点中,MapReduce就可以在他们所在的节点上处理这些数据了
  • NameNode:
  1. 存储元数据
  2. 元数据保存在内存中
  3. 保存文件,block与datanode之间的映射关系
  4. 接受用户的读写操作
  5. namenode的metadate信息在启动后会加载到内存中
  6. block的位置信息不会保存到“fsimage”中
  7. edits记录对metadate的操作日志
  • DataNode:

  1. 存储文件内容
  2. 文件内容保存到磁盘中
  3. 维护了block到datanode本地文件的映射关系
  4. 启动datanode线程的时候会向namenode汇报block的信息
  5. 通过向namenode发送心跳保持与其联系(三秒一次),如果namenode十分钟没有收到datanode的心跳,则namenode就会认为其节点已经lost,并且copy其上的block到其他的节点上(其他的datanode)
  • SecondaryNameNode(执行合并):
  1. 他不是namenode的备份(但是可以做备份),它的主要工作是帮助namenode合并editslog,减少namenode启动时间
  2. 根据配置文件设置的时间间隔fs.checkpoint.period默认为360s
  3. 根据配置文件放置editslog大小fs.checkpoint.size规定edits文件的最大值就是64mb
  • HDFS运行机制

  1. 一个名字节点(namenode)和多个数据节点(datanode)
  2. 数据复制
  3. 故障检测 :数据节点(心跳包:检查是否宕机, 块报告:安全模式下检测, 数据完整性检测:检验和比较), 名字节点(日志文件,镜像文件)
  4. 空间回收机制
  • HDFS优点

  1. 高容错性:1.数据自动保存多个副本    2.副本丢失后,自动恢复
  2. 适合批处理: 1.移动计算而非数据     2.数据位置暴露给计算机架
  3. 适合大数据处理:1.GB, TB甚至是PB级数据   2.百万规模以上的文件数量   3.10K+节点(也就是说可以有上万台的机器)
  4. 可构建在廉价的机器上:1.通过多副本提高数据存储的可靠性   2.提供了容错和恢复机制
  • HDFS缺点

  1. 低延迟数据的访问:1.比如毫秒级需求的数据   2.低延迟与高吞吐量需求的数据
  2. 小文件存取:1.占用namenode的大量内存   2.寻道时间超过读取时间
  3. 并发写入,文件随机修改:  1.一个文件只能由一个作者     2.仅支持append操作
  • HDFS的数据存储单元(block)

  1. 文件被切分成固定大小的数据块:1.默认数据块的大小为64MB,但是也可以自定义配置  2.若文件大小不到64MB,则单独存成一个block
  2. 一个文件存储方式:1.一个文件根据他的大小被分成若干个block,存储到不同的节点上  2.默认情况下每个block都会有个三个副本
  3. block大小和副本数通过client端上传文件是设置,文件上传成功后副本数可以更改,但是block size是不可以改变的
  • Block的副本放置策略

  1. 第一个副本:放置在上传文件的datanode上,但是如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点
  2. 第二个副本:放置在与第一个节点不同的机架上
  3. 第三个副本:房子在与第二个副本相同的机架上的不同机器上
  4. 跟多副本:随机节点
  • HDFS的安全模式(HDFS在重新启动后会立即进入一个模式称之为安全模式)

  1. namenode启动的时候,首先将映像文件(fsimage)载入内存,并且执行编辑日志(edits)中的各项操作
  2. 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要secondarynamenode)和一个空的编辑日志文件
  3. 此刻namenode运行在安全模式,即namenode的文件系统对于客户端来说是读的,(显示目录, 显示文件内容等,写,删除, 重命名都会失效)
  4. 在此阶段namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的,在一定比例(可设置),的数据块被确认为“安全”后,再有软肝时间,安全模式结束
  5. 当检测到副本数不足的数据块时,该块会被赋值到最小副本数,系统中数据块的位置并不是namenode维护的,而是以块列表的形式存储在datanode

MapReduce

  • MapReduce的架构

  1. 一主多从架构
  2. 主jobtracker:负责调度分配每一个子任务task运行于tasktracker上,如果发现有失败的task就重新分配其任务到其他节点,每一个hadoop集群中只有一个jobtracker,一般他运行在master节点上
  3. 从tasktracker:tasktracker主动与jobtracker通信,接收作业,并且负责直接执行每一个任务,为了减少网络带宽,tasktracker最好是运行在hdfs的datanode
  • MapReduce的split大小

  1. max.split(100M)
  2. min.split(10M)
  3. block(64M)
  4. 计算split的大小:max(min.split,min(max.split,block))
  • map

  1. 可以自定义编写控制程序
  • shuffle过程详解
  1. 每个map task都有一个内存缓冲区(默认是100MB),存储着moap的输出结果
  2. 当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘
  3. 溢写是由单独线程来完成,不影响往缓冲区写map结果的线程(spill.perceent,默认是0.8)
  4. 当溢写线程启动之后,需要对着80MB空间内的key做排序(sort)
  • reduce
  1. 可以自定义编写控制程序

 

   

posted @ 2019-03-19 16:41  Mrs.kang  阅读(273)  评论(0编辑  收藏  举报