头歌实践教学平台:数据科学与大数据技术导论(九下)

九、数据存储与管理

第3关:大数据处理架构 Hadoop

任务描述

本关任务:根据相关知识内容完成右边选择题。

相关知识

为了完成本关任务,你需要掌握:

1.Hadoop 生态系统。

Hadoop 生态系统

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

• 高可靠性

• 高效性

• 高可扩展性

• 高容错性

• 成本低

• 运行在 Linux 平台上

• 支持多种编程语言

经过多年的发展,Hadoop 生态系统不断完善和成熟,目前已经包含了多个子项目。除了核心的 HDFS 和 MapReduce 以外,Hadoop 生态系统还包括 Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari 等功能组件。如下图所示:

Hadoop 生态系统

Ambari

Apache Ambari 是一种基于 Web 的工具,支持 Apache Hadoop 集群的供应、管理和监控。Ambari 已支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop 和 Hcatalog 等。

Apache Ambari 支持 HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop 和Hcatalog 等的集中管理。也是 5 个顶级 hadoop 管理工具之一。

Zookeeper

ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。

ZooKeeper 的架构通过冗余服务实现高可用性。

Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

ZooKeeper service 之间互相通信,保证服务的高可用性和一致性。客户端连接到单个 ZooKeeper 服务器。客户端维护一个 TCP 连接,通过它发送请求、获取响应、获取监视事件并发送心跳。如果与服务器的 TCP 连接中断,客户端将连接到其他的服务器。

zookeeper 提供的名称空间非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径标识。

HBase

HBase 是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌 BigTable 的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase 基于面列式存储,其中 RowKey 的设计,使得他能够提供快速的点查和范围查询,但是不支持复杂的 SQL 查询。HBase 的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过 10 亿行数据和数百万列元素组成的数据表。

Hadoop 生态系统中 HBase 与其他部分的关系,如下图所示:

Hadoop 生态系统中 HBase 与其他部分的关系

HBase 数据模型

表:HBase 采用表来组织数据,表由行和列组成,列划分为若干个列族。

行:每个 HBase 表都由若干行组成,每个行由行键(row key)来标识。

列族:一个 HBase 表被分组成许多"列族"(Column Family)的集合,它是基本的访问控制单元。

列限定符:列族里的数据通过列限定符(或列)来定位。

单元格:在 HBase 表中,通过行、列族和列限定符确定一个"单元格"(cell),单元格中存储的数据没有数据类型,总被视为字节数组 byte\[\]。

时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。

HBase 的系统架构,如下图所示:

HBase 的系统架构

Hive

架构于 Hadoop 之上,可以将结构化的 HDFS 文件映射成一张表,并提供了类似于 SQL 语法的 HQL 查询功能。毫不夸张的说正是因为有了 Hive 的诞生,Hadoop 才会被大面积推广和使用,并且经久不息。

核心本质:将 HQL 语句转换成 MapReduce 任务

Hive 的主要优点:

避免了开发人员去实现 Map 和 Reduce 的接口,大大降低了学习成本 HQL 语法类似于 SQL 语法,简单、容易上手。

Hive 的主要缺点:

执行效率比较低 Hive 生成的 MapReduce 任务,不够智能化,容易造成数据倾斜 Hive 的架构。

Hive 的基本架构,如下图所示:

Hive 架构

其中

Meta Store: 元数据,一般存储在 MySQL

Client: 客户端

Driver: 驱动器

HQL Parse: 解析器,HQL 解析和语法分析

Physical Plan: 编译生成逻辑执行计划

Query Optimizer: 对逻辑执行计划进行优化

Execution: 把逻辑执行计划转换成物理执行计划

Map Reduce: 执行计算

HDFS: 文件存储

Pig

Pig 是一个基于 Hadoop 的大规模数据分析平台,它提供的 SQL-LIKE 语言叫 Pig Latin,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。

Pig 和 Hive 类似,也是基于 Hadoop 的封装计算,核心也是为了简化 MapReduce 的编程。不同的是 Pig 提供的语法更加类似于 Shell,所以导致两者的使用人群不一致。Hive 更多的面向开发人员,而 Pig 更多的面向与运维人员。

Mahout

Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

MapReduce

MapReduce 是一种分布式计算模型,由 Map 和 Reduce 组成。 Map() 负责把一个大的 block 块进行切片并计算。 Reduce() 负责把 Map() 切片的数据进行汇总、计算。

执行的核心思想: 相同 key 的键值对为一组调用一次 Reduce 方法,方法内迭代这组数据进行计算。

MapReduce 在大数据计算领域的地位举足轻重,可以使用很多廉价的机器达到惊人的算力。

其大致的计算步骤与过程,如下图所示:

YARN

YARN 是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

YARN 的基本思想是将 JobTracker 的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的 ResourceManager(RM)和若干个针对应用程序的 ApplicationMaster(AM)。这里的应用程序是指传统的 MapReduce 作业或作业的 DAG(有向无环图)。

YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。NodeManager 管理一个 YARN 集群中的每个节点。

HDFS

HDFS 是 Hadoop 分布式文件系统,是 Hadoop 上层组件的核心存储系统,HBASE、Hive 等都是基于 HDFS 的存储来构建的。HDFS 是一个高度容错性的系统,适合部署在廉价的机器上。HDFS 能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS 的设计目标

总体而言,HDFS 要实现以下目标:

(1)兼容廉价的硬件设备

(2)流数据读写

(3)大数据集

(4)简单的文件模型

(5)强大的跨平台兼容性

HDFS 特殊的设计,在实现上述优良特性的同时,也使得自身具有一些应用局限性,主要包括以下几个方面:

(1)不适合低延迟数据访问

(2)无法高效存储大量小文件

(3)不支持多用户写入及任意修改文件

HDFS 体系结构

HDFS 采用了主从(Master/Slave)结构模型,一个 HDFS 集群是由一个 NameNode 和若干个 DataNode 组成的。其体系结构,如下图所示:

HDFS 体系结构

其中 NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的 DataNode 负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等管理存储的数据。每个数据节点的数据实际上是保存在本地 Linux 文件系统中的。

Flume

Flume 是一个分布式、高可用的服务,用于高效收集、聚合和移动大量日志数据。

Flume 主要承载的作用是收集各个数据源的事件或日志数据,然后将其 Sink 到数据库。

Flume 的实现架构原理也非常简单,通过 Agent 代理来实现数据的收集,一个 Agent 包含了 Source,Channel,Sink 三个组件。

Source:采集的数据来源,不同的数据源对应不同的格式,Flume 支持的 Source 类型有很多,比如 avro、thrift、twitter、exec、jms 等。

所有的 Source 类型可参考 Flume 的官方文档:

https://flume.apache.org/FlumeUserGuide.html#flume-sources

Channel:缓冲区,将接收到的 Source 数据缓存起来,供下游的 Sink 消费,只有当数据被 Sink 消费或者进入下一个 Channel 的时候才会被删除。为了保证 Channel 的可用性,Flume 也提供了多种 Channel 类型,有 memory、JDBC、File、Spillable Memory (当内存队列满了会存储到磁盘上) 、还支持自定义 Channel。

Sink:消费 Channel 里的数据,将数据发送到目的地,比如 Hive、HBase 等。

Sqoop

Sqoop 是一款开源的工具,主要用于在 Hadoop (Hive) 与传统的数据库 (mysql、postgresql...) 间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。

Sqoop 项目开始于 2009 年,最早是作为 Hadoop 的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop 独立成为一个 Apache 项目。

Sqoop 用户在 Hadoop 和各种关系型数据库直接高效的同步传输数据,如下图所示:

实现同样功能的还有阿里开源的 datax。

编程要求

根据相关知识完成右侧选择题

测试说明

若选择题答案与正确答案一致则可通关。

开始你的任务吧,祝你成功!

有任何问题都可以随时关注私信!

相关推荐
字节跳动数据平台1 小时前
iDA:从 ChatBI 到专业数据分析助手的演进之路
大数据
故七月1 小时前
基于FAQ结构化开发的区域GEO排名提升技术方案——以四川成都服务商万域智瞰场景为例
大数据·人工智能
名字还没想好☜1 小时前
Python asyncio.Queue 实战:用生产者-消费者给爬虫/任务流限速又解耦
开发语言·爬虫·python·并发·asyncio
金立基包装胶水1 小时前
格拉辛纸热封后容易开胶怎么办?
大数据·笔记·其他
我命由我123452 小时前
人脸识别 - 判断人脸是否在画面中央
java·人工智能·python·java-ee·人脸识别·android jetpack·android runtime
这就是佬们吗2 小时前
AI Agent 的四根支柱:LLM、工具、记忆与规划是如何协同的
大数据·数据库·人工智能
Black_Rock_br2 小时前
本地AI工具更新,#DSH Desktop桌面端# 正式发布迭代
人工智能·python·开源·运维开发·开源软件
gfdr52 小时前
把吃灰的电视盒子,改成一台不花月租的监控
python·嵌入式硬件·电视盒子
林澈在路上2 小时前
AI做歌用哪个最好 2026国产AI音乐工具评测
大数据·人工智能·aigc·音视频·音频