第二章-大数据处理框Hadoop

第二章-大数据处理框Hadoop

Hadoop简介

Hadoop概念

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力

Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop可以支持多种编程语言:C/C++、Java、Python 等。

Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和 MapReduce。

Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性:

  • 高可靠性
  • 高效性
  • 高可扩展性
  • 高容错性
  • 成本低

Hadoop凭借其突出的优势,已经在各个领域得到了广泛的应用,而互联网领域是其应用的主阵地

  • Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等方面
  • 国内采用Hadoop的公司主要有百度、阿里、网易、华为、中国移动等,其中,阿里的Hadoop 集群比较大

Hadoop在企业中的应用架构:
d21

Hadoop版本

Apache Hadoop版本演变:

  • Hadoop1.0
    • Hadoop0.20.x
    • Hadoop0.21.x
    • Hadoop0.22.x
  • Hadoop2.0
    • Hadoop0.23.x
    • Hadoop2.x
  • Hadoop3.0
    • Hadoop3.x

Hadoop 3.x 版本还没有经过充分的测试,可能还存在些问题。目前还是推荐使用 Hadoop 2.x 版本。

Hadoop1.0 的核心组件仅包括 MapReduce 和 HDFS,存在单一名称节点、单一命名空间、资源管理效率低等问题。Hadoop2.0 中设计了HDFS HA,提供名称节点热备机制;设计了HDFS Federation,管理多个命名空间;设计了新的资源管理框架 YARN。

Hadoop优化与发展

Hadoop的优化与发展主要体现在两个方面:

  • Hadoop 自身两大核心组件 MapReduce 和 HDFS 的架构设计改进
  • Hadoop 生态系统其它组件的不断丰富,加入了Pig、Tez、Spark 等新组件
组件 功能 解决的问题
Pig 处理大规模数据的脚本语言,用户只需要编写几条简单的语句,系统会自动转换为 MapReduce 作业 抽象层次低,需要手工编写大量代码
Spark 基于内存的分布式并行编程框架,具有较高的实时性,并且较好支持迭代计算 延迟高,而且不适合执行迭代计算
Oozie 工作流和协作服务引擎,协调Hadoop上运行的不同任务 没有提供作业(Job)之间依赖关系管理机制,需要用户自己处理作业之间依赖关系
Tez 支持DAG作业的计算框架,对作业的操作进行重新分解和组合,形成一个大的DAG作业,减少不必要操作 不同的MapReduce任务之间存在重复操作,降低了效率
Kafka 分布式发布订阅消息系统,不同类型的分布式系统可以统一接入到Kafka,实现和Hadoop各个组件之间的不同类型数据的实时高效交换 Hadoop生态系统中各个组件和其他产品之间缺乏统一的、高效的数据交换中介

Hadoop生态系统

Hadoop的项目结构不断丰富发展,已经形成一个丰富的Hadoop生态系统
d22

数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。

数据仓库与数据库的主要区别在于:

  1. 数据库是面向事务的设计,数据仓库是面向主题设计的
  2. 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据
  3. 数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余
  4. 数据库是为捕获数据而设计,数据仓库是为分析数据而设计

Hive

Hive是一个构建于 Hadoop 顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性,某种程度上可以看作是用户编程接口,本身不存储和处理数据。

  • 依赖分布式文件系统 HDFS 存储数据
  • 依赖分布式并行计算模型 MapReduce 处理数据
  • 定义了简单的类似 SQL 的查询语言——HiveQL,用户可以通过编写的 HiveQL 语句运行 MapReduce 任务
  • 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上

Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据,这些工具能够很好地满足数据仓库各种应用场景。

Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是 HDFS 和 MapReduce,所以在很多方面又有别于传统数据库。

对比 Hive 传统数据库
数据插入 支持批量导入 支持单条和批量导入
数据更新 不支持 支持
索引 支持 支持
执行延迟
扩展性 有限

Hive应用实例:WordCount

  • 采用 Hive 实现 WordCount 算法需要编写较少的代码量
  • 在 MapReduce 的实现中,需要进行编译生成 jar 文件来执行算法,而在 Hive 中不需要。HiveQL 语句的最终实现需要转换为 MapReduce 任务来执行,这都是由 Hive 框架自动完成的,用户不需要了解具体实现细节

Hive在企业大数据分析平台中的应用,有时候 Pig 可以作为 Hive 的替代工具。
d23

Pig

Pig是一个基于Hadoop的大规模数据分析平台,它简化了 Hadoop 常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果,Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。

  • 提供类似 SQL 的查询语言Pig Latin
  • 允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的MapReduce应用程序
  • Pig会自动把用户编写的脚本转换成MapReduce作业在 Hadoop集群上运行,而且具备对生成的MapReduce程序进行自动优化的功能
  • Hive一般处理的是结构化的数据,Pig可以处理非结构化数据。处理流程: LOAD-> 转换 ->STORE/DUMP

Tez: 支持DAG作业的计算框架。核心思想是将 Map 和 Reduce 两个操作进一步拆分,分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的 DAG 作业。

Hadoop重要组件

Hadoop生态系统重要组件

组件 功能
HDFS 分布式文件系统
MapReduce 分布式并行编程模型
YARN 资源管理和调度器
Tez 运行在 YARN 之上的下一代 HAdoop 查询处理框架
Hive Hadoop 上的数据仓库
HBase Hadoop 上的非关系型的分布式数据库
Pig 一个基于 Hadoop 的大规模数据分析平台,提供类似 SQL 的查询语言 Pig Latin
Sqoop 用于在 Hadoop 与传统数据库之间进行数据传递
Oozie Hadoop 上的工作流管理系统
Zookeeper 提供分布式协调一致性服务
Storm 流计算框架
Flume 一个高可用的,高可靠,分布式的海量日志采集、聚合和传输的系统
Ambari Hadoop 快速部署工具,支持Apache Hadoop集群的供应、管理和监控
Kafka 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
Spark 类似于Hadoop MapReduce的通用并行框架

Hadoop集群部署

Hadoop安装方式:

  • 单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。
  • 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
  • 分布式模式:使用多个节点构成集群环境来运行 Hadoop

Hadoop框架中最核心的设计是为海量数据提供存储的 HDFS 和对数据进行计算的 MapReduce。MapReduce的作业主要包括:

  1. 从磁盘或从网络读取数据,即IO密集工作
  2. 计算数据,即CPU密集工作

Hadoop集群的整体性能取决于CPU、内存、网络以及存储之 间的性能平衡。因此运营团队在选择机器配置时要针对不同 的工作节点选择合适硬件类型。

一个基本的 Hadoop 集群中的节点主要有:

  • NameNode:负责协调集群中的数据存储
  • DataNode:存储被拆分的数据块
  • JobTracker:协调不同机器上数据计算任务
  • TaskTracker:负责执行由 JobTracker 指派的任务
  • SecondaryNameNode:帮助 NameNode 收集文件系统运行的状态信息

在集群中,大部分的机器设备是作为 Datanode和 TaskTracker 工作的。NameNode提供整个 HDFS 文件系统的 NameSpace(命名 空间)管理、块管理等所有服务,很多元数据是直接保存在 内存中的,因此需要更多的RAM,与集群中的数据块数量 相对应,并且需要优化 RAM 的内存通道带宽。SecondaryNameNode在小型集群中可以和 NameNode 共用一台机器,较大的群集可以采用与NameNode相同的硬件。

Hadoop集群规模可大可小,初始时,可以从一个较小规模的集群开始,比如包含10个节点,然后,规模随着存储器和计算需求的扩大而扩大。

对于一个小的集群,名称节点(NameNode)和 JobTracker 运行在单个节点上,通常是可以接受的。但是,随着集群和存储在HDFS 中的文件数量的增加,名称节点需要更多的主存,这时,名称节点和 JobTracker 就需要运行在不同的节点上。

第二名称节点(SecondaryNameNode)会和名称节点可以运行在 相同的机器上,但是,由于第二名称节点和名称节点几乎具有相同的主存需求,因此,二者最好运行在不同节点上。

普通的Hadoop集群结构由一个两阶网络构成。每个机架(Rack)有30-40个服务器,配置一个1GB的交换机,并向上传输到一个核心交换机或者路由器(1GB或以上)。
d24

发布了61 篇原创文章 · 获赞 25 · 访问量 7180

猜你喜欢

转载自blog.csdn.net/qq_42582489/article/details/105054777
今日推荐