Hadoop基础知识

Hadoop基础知识

----------------分界线:本博客2020年4月1日进行了一次修正---------------

目录:

  1. Hadoop与Spark大数据栈基本架构
  2. 数据收集层(Sqoop/Canal、Flume、Kafka)
  3. 数据存储层(HDFS、HBase、Kudu)
  4. 资源管理与服务协调(YARN、ZooKeeper)
  5. 计算引擎层(MapReduce/Tez、Spark、Impala/Presto、Storm/Spark Streaming)
  6. 数据分析层(Hive/Pig/SparkSQL、Mahout/MLib、Apache Beam/Cascading)

1、Hadoop与Spark大数据栈基本架构:

 

2、数据收集层(Sqoop/Canal、Flume、Kafka):

  • 数据源特点:
    • 分布式:数据源分布在不同机器或设备上
    • 异构性:数据源包括任何能够产生数据的系统
    • 多样化:数据格式多样,包括关系型数据和非关系型数据
    • 流式产生:数据源源不断产生,需要实时或近实时将数据发送到后端
  • Sqoop/Canal:关系型数据收集和导入工具。Sqoop可将关系型数据库数据全量收集和导入Hadoop,Canal可将数据增量导入。
  • Flume:非关系型数据收集。主要是流式日志数据,可近实时收集,经过滤、聚集后加载到HDFS等存储系统。
  • Kafka:分布式消息队列。采用分布式高容错设计,允许多个数据消费者订阅并获取感兴趣的内容。

3、数据存储层(HDFS、HBase、Kudu):

  • 数据存储特点:
    • 可支持存储容量扩展
    • 可支持容错
    • 可支持多种数据模型
  • HDFS(Hadoop Distributed File  System):Hadoop分布式文件系统,Google GFS的开源实现。
    • 将文件分成等大的数据块(默认为128MB),并以数据块为单位存储到不同节点上。
    • 各组件功能:
      • NameNode:HDFS集群管理者,负责管理文件系统元信息和所有DataNode。
        • Active NameNode:一个HDFS集群中只存在一个对外服务的NameNode,该NameNode则称为Active NameNode。
        • Standby NameNode:存在备用NameNode
        • 主/备NameNode通过第三方的共享存储系统来保证状态一致。主NameNode将修改日志写入共享是存储系统,备用NameNode从共享存储系统中读取这些修改日志,并重新执行这些操作,以保证与主NameNode的内存信息一致。
      • DataNode:存储实际的数据块,并周期性通过心跳向NameNode汇报状态信息。
      • Client:用户通过Client与NameNode和DataNode交互,完成HDFS管理和数据读写等操作。
    • 关键技术:
      • 容错策略:
        • NameNode故障:Standby NameNode
          • Standby NameNode可防止单个NameNode宕机后导致元信息丢失和整个集群不可访问。
        • DataNode故障:心跳机制
          • DataNode通过心跳机制向NameNode汇报状态信息,当某个DataNode宕机时,NameNode可以在其他节点上重构该DataNode上的数据块,以保证每个文件的副本数在正常水平线上。
        • 数据块损坏:校验码机制。
          • DataNode存储数据块时,会同时生成一个校验码。当存取数据块时,如果发现校验码不一致,则认为该数据块已损坏,NameNode会通过其他节点上的正常副本重构受损的数据块。
      • 副本放置策略:三副本放置策略(默认)
        • 客户端与DataNode同节点:
          • 第一个副本写到同节点的DataNode上
          • 另外两个副本写到另一个相同机架的不同DataNode上
        • 客户端与DataNode不同节点:
          • 第一个副本随机写到一个DataNode
          • 另外两个副本写到另一个相同机架的不用DataNode
      • 异构介质存储:
        • ARCHIVE:高存储密度但消耗较少的存储介质,通常用来存储冷数据。
        • DISK:磁盘介质,这是HDFS默认的存储介质。
        • SSD:固态硬盘。
        • RAM_DISK:数据被写入内存中,同时会往该存储介质中再异步写一份。
      • 集中式缓存处理:
        • 将一部分目录或文件缓存在off-heap内存中,以加速对这些数据的访问效率。
  • HBase:构建在HDFS之上的分布式数据库,Google BigTable的开源实现。
  • Kudu:分布式列式存储数据库,允许用户存储结构化数据,支持行无限扩展以及数据随机查找与更新。

4、资源管理与服务协调(YARN、ZooKeeper):

  • 统一管理优势:
    • 资源利通率高,共享资源,使得集群中的资源充分利用
    • 运维成本低
    • 共享数据和硬件资源,减少数据移动带来的成本
    • 统一服务协调组件,避免leader选举、服务命名、分布式队列、分布式锁、发布订阅功能等的重复开发
  • YARN:统一资源管理与调度系统
  • ZooKeeper:基于简化的Paxos协议实现的服务协调系统,提供类似文件系统的数据模型,允许用户通过简单的API实现leader选举、服务命名、分布式队列与分布式锁等复杂的分布式通用模块。

5、计算引擎层(MapReduce/Tez、Spark、Impala/Presto、Storm/Spark Streaming):

  • 应用场景:
    • 批处理:处理时间为分钟-小时级别,甚至天级别。吞吐率高。搜索引擎构建索引、批量数据分析、机器学习等
    • 交互式处理:处理时间为秒级别。需要人机交互。数据查询、参数式报表生成、OLAP等
    • 实时处理:处理延迟为秒级以内。广告系统、舆情监测等
  • MapReduce/Tez:
    • MapReduce是Google MapReduce的开源实现。Tez是基于MapReduce开发的通用DAG(Directed Acyclic Graph,有向无环图)计算引擎,能够更加高效地实现复杂的数据处理逻辑,目前被应用在Hive、Pig等数据分析系统中。
    • MapReduce On YARN工作流程:
      • ResourceManager启动MRAppMaster
        • 用户向YARN集群提交应用程序。
        • ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的MRAppMaster。
      • MRAppMaster创建应用程序,申请资源,监控运行过程
        • MRAppMaster启动,首先向ResourceManager注册,用户则可以直接通过ResourceManager查看应用程序的运行状态,然后为内部Map Task和Reduce Task申请资源并运行它们,期间监控它们的运行状态,直到所有任务运行结束。
        • MRAppMaster轮询,通过RPC协议向ResourceManager申请和领取资源。
        • 一旦MRAppMaster申请到(部分)资源后,则通过一定的调度算法将资源分配给内部的任务,之后与对应的NodeManager通信,要求它启动这些任务。
        • NodeManager为任务准备运行环境,并将任务执行命令写到一个脚本里,并通过运行该脚本启动任务。
        • 启动的Map Task或Reduce Task通过RPC协议向MRAppMaster汇报自己的状态和进度,从而让MRAppMaster随时掌握各个任务的运行状态,则可以在任务失败时触发相应的容错机制。
    • MapReduce编程组件:
      • Mapper
      • Reducer
      • InputFormatter
      • OutputFormatter
  • Spark:通用的DAG计算引擎,提供基于RDD的数据抽象表示,允许用户充分利用内存进行快速的数据挖掘和分析。
  • Impala/Presto:允许用户使用标准SQL处理存储在Hadoop中的数据。采用了并行数据库架构,内置了查询优化器,查询下推,代码生成等优化机制。
  • Storm/Spark Streaming:分布式流式实时计算引擎,具有良好的容错性与扩展性,能够高效地处理流式数据,它允许用户用过简单的API完成实时应用程序的开发工作。

6、数据分析层(Hive/Pig/SparkSQL、Mahout/MLib、Apache Beam/Cascading):

  • 典型使用模式:
    • 批处理框架对原始海量数据进行分析,产生较小规模的数据集
    • 交互式处理工具对该数据集进行快速查询,获得最终结果
  • Hive/Pig/SparkSQL:在计算引擎上构建的支持SQL或脚本语言的分析系统,大大降低了用户进行大数据分析的门槛。
    • Hive:基于MapReduce/Tez实现的SQL引擎
    • Pig:基于MapReduce/Tez实现的工作流引擎
    • SparkSQL:基于Spark实现的SQL引擎
  • Mahout/MLib:在计算引擎上构建的机器学习库,实现常用的机器学习和数据挖掘算法。
    • Mahout最初基于MapReduce实现,目前正逐步迁移到Spark引擎上
    • MLib是基于Spark实现的

7、常见大数据应用场景:

  • 互联网领域:
    • 搜索引擎
    • 推荐系统
    • 广告系统
  • 电信领域:
    • 网络管理和优化(基础设施建设优化、网络运营管理和优化)
    • 市场与精准营销(客户画像、关系链研究、精准营销、个性化推荐)
    • 客户关系管理(客服中心优化、客户声明周期管理)
    • 企业运营管理(业务运营监控、客户声明周期管理)
    • 数据商业化(数据对外商业化、单独盈利)
  • 医疗领域:
    • 临床数据对比
    • 药品研发
    • 实时统计分析
    • 基本药物临床应用分析
    • 远程病人数据分析
    • 人口统计学分析
    • 新农合基金数据分析
    • 就诊行为分析
    • 新的服务模式
  • 金融领域:
    • 客户画像应用
    • 精准营销
    • 风险管控
    • 运营优化

8、MapReduce:

依赖磁盘IO的批处理计算模型,通过一个JobTracker主节点和多个TaskTracker从节点,分Map阶段和Reduce阶段执行任务。

HDFS:

①Hadoop Distributed File System,分布式文件系统,提供高吞吐量的应用程序数据访问,负责数据的分布式存储。

②HDFS结构是基于一组特定的节点构建的,包括一个在HDFS内部提供元数据服务的NameNode主节点和多个提供存储块的DataNode从节点。

附注:

分布式存储:数据分散在很多的机器上进行存储。

分布式计算:数据分散在很多的机器上进行计算。

Yarn:

①资源管理平台,负责作业调度与集群的管理,只有一个ResourceManager主节点和多个NodeManager从节点。

②ResourceManager负责集群资源的分配与调度,MapReduce、Storm、Spark等应用,必须实现ApplicationMaster接口,才能被RM管理。

③NodeManager负责单节点资源的管理。

Pig:

Pig是一个并行计算的高级的数据流语言和执行框架,是在MapReduce上构建的一种高级查询语言,轻量级脚本语言,使用shell命令方式来输入数据处理、数据分析的命令,然后系统会自动将这些命令转换为Map和Reduce的形式,进行MapReduce的工作,然后把结果返回给用户。相当于用户和MapReduce之间的转换器。

Hive:

相当于Sql语言到MapReduce的映射器。将Sql转换为MapReduce分布式任务,在各节点运行,再将结果返回给用户。

Hbase:

面向数据分析,基于列式存储模型,支持大量结构化数据存储的数据库,提高响应速度,减少IO量。

ZooKeeper:

负责服务器节点以及进程之间的通讯,通讯的协调工具。提供配置维护、名字服务、分布式同步、组服务等功能。

Chukwa:

管理大型分布式系统的数据采集系统。

Mahout:

可扩展的机器学习和数据挖掘的library库。

9、分布式文件系统:

(1)使用场景:

①文件非常大,比如TB级的文件。

②文件极少更新,而只是作为某些计算的数据读入,并且不时有额外的数据追加到文件尾部。

(2)在DFS中,文件被分成文件块(chunk),文件块的大小通常为64MB。文件块会被复制多个副本放在多个不同的计算节点上。另外,存放同一文件块不同副本的节点应分布在不同机架上,这样在某个机架发生故障时就不至于丢失所有副本。通常来讲,文件块的大小和复制的次数可以由用户指定。

(3)主节点(master node)和名称节点(name node):

为寻找某个文件的文件块,使用主节点或名称节点为该文件所用。主节点本身可以有多个副本,文件系统的总目录可以用于寻找主节点的副本,总目录本身也可以有多个副本,所有使用DFS的用户都知道这些目录副本所在的位置。

10、数据存储扩容方案:

  • 纵向扩容:利用现有的存储系统,通过不断增加存储容量来满足数据增长的需求。
  • 横向扩容(通常采用):以网络互连的结点为单位扩大存储容量(集群)。

11、HDFS分布式文件系统的体系:

(1)NameNode:名称节点

①接收用户请求,是用户操作的入口;

②是HDFS的守护程序,是它的核心程序,起到分布式系统的总控的作用;

③维护文件系统的目录结构,记录所有的元数据,记录文件是如何分割成数据块的,以及这些数据块被存储到哪些节点上;

④对内存和I/O进行集中管理

⑤是个单点,发生故障将使集群崩溃。

(2)Secondary NameNode:辅助名称节点

①监控HDFS状态的辅助后台程序;

②每个集群都有一个;

③作为NameNode的后备,可以把NameNode里面的元数据信息再重新保存多一份副本,NameNode会自动跟名称辅助节点通讯,不断把名称辅助节点中的元数据往里面放;

④当NameNode故障可以作为备用NameNode使用;

⑤也是个单点。

(3)DataNode:数据节点

①每台从服务器都运行一个;

②负责把HDFS数据块读写到本地文件系统,用于存储文件。

 

图3.1 分布式文件系统体系

如图所示,Hadoop集群是部署在真正的服务器上的,服务器是放在机架(Rack)上面的,每一个机架都有一个交换机(Switch),然后这些交换机通过一个大的交换机连接起来,用户是直接通过交换机来进行请求的。

12、Hadoop1.0 MapReduce框架基本架构:

(1)JobTracker:

  • 主要功能:
    • 资源管理
    • 作业控制
  • 运行在主节点上的后台进程,起到对MapReduce体系的总调度作用。
  • 主要作用:
    • 用于处理用户提交后的作业;
    • 决定有哪些文件参与作业处理,然后把Job切割为一个个小Task,并把这些Task分配到DataNode中,Hadoop的原则是就近运行,就是程序要和数据在同一个物理节点里面;
    • 监控Task,重启失败的Task,释放它所占用的资源;
    • 每个集群只有唯一一个JobTracker,和NameNode一样,是个单点,位于Master节点。

(2)TaskTracker:

  • 位于Slave节点上,与DataNode结合(代码与数据一起的原则);
  • 主要作用:
    • 管理各自节点上的Task(由JobTracker分配);
    • 每个节点只有一个TaskTracker,但一个TaskTracker可以启动多个JVM,用于并行执行Map或Reduce任务;
    • 与JobTracker交互。

13、Master和Slave:

(1)Master:NameNode、Secondary NameNode、JobTracker的节点的机器。

(2)Slave:TaskTracker、DataNode的机器

(3)Master不是唯一的。通常把NameNode和JobTracker放在同一台机器,把Secondary NameNode放在另一台机器。

参考文献:

[1]Jure Leskovec,Anand Rajaraman,Jeffrey David Ullman. 大数据互联网大规模数据挖掘与分布式处理(第2版) [M]北京:人民邮电出版社,2015.7;
[2]董西成. 大数据技术体系详解原理、架构与实践 [M]北京:机械工业出版社,2018.11;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值