美文网首页我爱编程
Hadoop大数据平台架构与实践-基础篇

Hadoop大数据平台架构与实践-基础篇

作者: Hey_Shaw | 来源:发表于2018-05-06 22:16 被阅读44次

    1、如何对大数据进行存储与分析呢?

    • 系统瓶颈:存储容量、读写速率、计算效率。。。无法满足用户需求;
      针对以上,Google提出三大关键技术解决大规模数据的存储和处理:MapReduce、BigTable、GFS;

    • 革命性的变化1:成本降低、能用PC机、就不用大型机和高端存储;(当时对于谷歌来说,数据都是网页数据,不同于银行都是真金白银的数据,所以他的目的在于成本降低。能用PC机就不用大型机和高端机存储。)

    • 革命性的变化2:软件容错硬件故障视为常态,通过软件保证可靠性。(谷歌的方案里,硬件故障视为常态;普通PC机硬件故障是常态,所以需要通过软件方面来保证高可靠性)

    • 革命性的变化3:简化并行分布式计算,无需控制节点同步和数据交换;(谷歌的MapReduce使分布式通信变得非常的简单,只需要一个Map和Reduce任务即可)

    但是Google并没有开源以上的技术。

    一个模仿Google大数据技术的开源实现来了 -- Hadoop

    Hadoop的功能和优势

    1、Hadoop包括两个核心组成:
    • HDFS:分布式文件系统,存储海量的数据;
    • MapReduce:并行处理框架,实现任务分解和调度。
    2、Hadoop可以用来做什么
    • 搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务。(搜索引擎,网页数据处理,商业智能,日志分析,数据挖掘)
    3、Hadoop优势
    • 高扩展:理论上可以做到无限,可以通过他的设计框架下增加一些硬件使得性能和容量提升;
    • 低成本:Hadoop借助Google的思想,不依赖高端硬件,只需要普通的PC机堆叠我们的系统;
    • 成熟的生态圈:Hive,Hbase为Hadoop用的更加高效与方便的小工具;

    镜像地址

    Hadoop生态系统与版本

    1、HDFS、MapReduce、开源工具
    • Hive - 轻盈,不需要编写复杂的Hadoop任务程序,只需要学一个SQL语句,Hive就会把你的SQL语句转换成一个Hadoop任务去执行,最大作用是降低使用Hadoop的门槛;
    • Hbase - 存储结构化数据的分布式数据库,和传统的关系型数据库不同,Hbase放弃事务特性,追求更高的扩展。与HDFS不同,Hbase提供了数据的随机读写和实时访问,实现对表数据的读写功能。
    • zookeeper - 监控Hadoop集群里每个节点的状态,管理整个集群的配置,维护节点与节点之间的数据一致性。

    HDFS - 文件系统

    HDFS的设计架构

    1、基本概念
    • 块(Block):固定大小的逻辑单元,HDFS所有文件在存储的时候都是把文件切分成相同大小的块,默认是64MB,块是文件存储处理的逻辑单元,做文件的备份和查找都是块进行处理。
    • NameNode:管理节点,存放文件的元数据,一、文件与数据块的映射表;二、数据块与数据节点的映射表。
    • DataNode:

    图解:

    • NameNode是唯一的管理节点,该节点保存大量的元数据,客户查询访问请求,会向NameNode查下元数据,返回的结果就知道这块文件存放在哪一些节点上。于是向这些节点去拿数据块。拿到数据块之后在进行组装拼接之前想要的文件。
    Hadoop.png
    • HDFS中数据管理与容错(数据存放有一定的策略,比如说为了保证硬件的容错,数据不能丢失,对于任何一个数据块都是存储三份,三份中两份在同一个机架上,还有一份在另外一个机架上。)
    Hadoop-1.png
    • 心跳检测:NameNode和DataNode之间有一个心跳协议,每隔多少秒钟DataNode定期向NameNode发送心跳消息。是不是属于一个Active状态。
    Hadoop-2.png
    • 二级NameNode(Secondary NameNode),如果NameNode发生故障,整个元数据就会丢失,为了保证NameNode和元数据不会被丢失,做了一个备份,元数据定期同步到Secondary NameNode上,如果NameNode正常,Secondary NameNode不会接受请求;一旦NameNode发生故障,Secondary NameNode会进行同步,然后进行替换,变成NameNode,保证NameNode的高可用性。
    Hadoop-3.png

    HDFS读取文件流程

    • 1、客户端向NameNode读写请求,把文件名和路径告诉NameNode;
    • 2、NameNode查询元数据,根据元数据返回客户端;客户端则知道这些文件包含哪些块,以及这些块分别会在哪些DataNode里面能够找到;
    • 3、客户端找到这些DataNode读取Blocks,下载下来之后再进行组装。
    Hadoop-4.png

    写文件:

    • 1、将文件拆分成64MB的块,通知NameNode;NameNode找到磁盘空间可用的DataNode返回,根据返回的DataNode,客户端对块进行写入;写入第一个块之后通过复制管道进行流水线复制,复制完成后更新元数据。
    Hadoop-5.png

    HDFS特点

    • 1、数据做了大量冗余,硬件容错;
    • 2、流式数据访问:一次写入多次读取,且写入之后不可修改;
    • 3、适合存储大文件;如果是大量小文件,NameNode压力会非常大;
    • 4、适合数据批量读写,吞吐量高;不适合交互式应用,低延迟很难满- 足。
    • 5、适合一次写入多次读取,顺序读写;不支持多个用户并发写相同文件。

    HDFS命令行操作

    打印当前HDFS的文件夹:hadoop fs -ls /
    
    启动之前格式化操作:hadoop namenode -format
    
    创建input文件夹:hadoop fs -mkdir input(会在/user/root目录下)
    
    将本地文件提交到HDFS里面:hadoop fs -put hadoop-env.sh input/
    
    打印文件夹内容:hadoop fs -ls /user/root/input/
    
    查看文件内容:hadoop fs -cat input/hadoop-env.sh
    
    下载文件:hadoop fs -get input/hadoop-env.sh hadoop-env2.sh
    
    查看文件系统所有信息:hadoop dfsadmin -report
    
    删除:hadoop fs -rm input/hadoop-env.sh
    

    MapReduce - 并行计算框架

    • 1、MapReduce原理:分而治之,一个大任务分成多个小的任务(map),并行执行后,合并结果(reduce);
    Hadoop-6.png

    MapReduce的运行流程

    1、基本概念
    • Job & Task :一个Job会被拆分成多个Task,一个Task中又分为MapTask和ReduceTask
    • JobTracker :Master管理节点,作业调度,分配任务、监控任务执行进度,监控TaskTracker的状态
    • TaskTracker:执行任务,向JobTracker汇报任务状态

    客户端提交任务Job,JobTracker把它放到候选队列中去,在适当的时候,来进行调度选择一个Job出来,将此Job拆分成多个Map任务和Reduce任务,Map任务分发给下面TaskTracker来做。(部署时TaskTracker和HDFS的DataNode是同一组物理机里的,这样保证计算跟着数据走,比如一个任务分到这里刚好所需要的数据就是在本机的DataNode里面,这样的话保证读取数据的开销最小,最快的读到我的数据)

    Hadoop-7.png

    MapReduce作业执行过程

    Hadoop-8.png
    2、MapReduce的容错机制
    • 重复执行:默认4次,之后放弃;
    • 推测执行:Map端算完,Reduce才开始;某个节点特别慢,推测出现问题,该计算仍然继续,再找一个TaskTracker和它做同样的事情,谁先算完终止对方,避免执行效率低;

    相关文章

      网友评论

        本文标题:Hadoop大数据平台架构与实践-基础篇

        本文链接:https://www.haomeiwen.com/subject/qcqvlftx.html