)
九、数据存储与管理第3关大数据处理架构 Hadoop任务描述本关任务根据相关知识内容完成右边选择题。相关知识为了完成本关任务你需要掌握1.Hadoop 生态系统。Hadoop 生态系统Hadoop 是一个能够对大量数据进行分布式处理的软件框架并且是以一种可靠、高效、可伸缩的方式进行处理的它具有以下几个方面的特性• 高可靠性• 高效性• 高可扩展性• 高容错性• 成本低• 运行在 Linux 平台上• 支持多种编程语言经过多年的发展Hadoop 生态系统不断完善和成熟目前已经包含了多个子项目。除了核心的 HDFS 和 MapReduce 以外Hadoop 生态系统还包括 Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari 等功能组件。如下图所示Hadoop 生态系统AmbariApache 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 管理工具之一。ZookeeperZooKeeper 是 Apache 软件基金会的一个软件项目它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 的架构通过冗余服务实现高可用性。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来构成一个高效可靠的原语集并以一系列简单易用的接口提供给用户使用。一个典型的分布式数据一致性的解决方案分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。ZooKeeper service 之间互相通信保证服务的高可用性和一致性。客户端连接到单个 ZooKeeper 服务器。客户端维护一个 TCP 连接通过它发送请求、获取响应、获取监视事件并发送心跳。如果与服务器的 TCP 连接中断客户端将连接到其他的服务器。zookeeper 提供的名称空间非常类似于标准文件系统key-value 的形式存储。名称 key 由斜线 / 分割的一系列路径元素zookeeper 名称空间中的每个节点都是由一个路径标识。HBaseHBase 是一个高可靠、高性能、面向列、可伸缩的分布式数据库是谷歌 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: 元数据一般存储在 MySQLClient: 客户端Driver: 驱动器HQL Parse: 解析器HQL 解析和语法分析Physical Plan: 编译生成逻辑执行计划Query Optimizer: 对逻辑执行计划进行优化Execution: 把逻辑执行计划转换成物理执行计划Map Reduce: 执行计算HDFS: 文件存储PigPig 是一个基于 Hadoop 的大规模数据分析平台它提供的 SQL-LIKE 语言叫 Pig Latin该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。Pig 和 Hive 类似也是基于 Hadoop 的封装计算核心也是为了简化 MapReduce 的编程。不同的是 Pig 提供的语法更加类似于 Shell所以导致两者的使用人群不一致。Hive 更多的面向开发人员而 Pig 更多的面向与运维人员。MahoutMahout 是 Apache Software FoundationASF 旗下的一个开源项目提供一些可扩展的机器学习领域经典算法的实现旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现包括聚类、分类、推荐过滤、频繁子项挖掘。此外通过使用 Apache Hadoop 库Mahout 可以有效地扩展到云中。MapReduceMapReduce 是一种分布式计算模型由 Map 和 Reduce 组成。 Map() 负责把一个大的 block 块进行切片并计算。 Reduce() 负责把 Map() 切片的数据进行汇总、计算。执行的核心思想 相同 key 的键值对为一组调用一次 Reduce 方法方法内迭代这组数据进行计算。MapReduce 在大数据计算领域的地位举足轻重可以使用很多廉价的机器达到惊人的算力。其大致的计算步骤与过程如下图所示YARNYARN 是一种新的 Hadoop 资源管理器它是一个通用资源管理系统可为上层应用提供统一的资源管理和调度它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN 的基本思想是将 JobTracker 的两个主要功能资源管理和作业调度/监控分离主要方法是创建一个全局的 ResourceManagerRM和若干个针对应用程序的 ApplicationMasterAM。这里的应用程序是指传统的 MapReduce 作业或作业的 DAG有向无环图。YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分计算、内存、带宽等精心安排给基础 NodeManagerYARN 的每节点代理。ResourceManager 还与 ApplicationMaster 一起分配资源与 NodeManager 一起启动和监视它们的基础应用程序。ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。NodeManager 管理一个 YARN 集群中的每个节点。HDFSHDFS 是 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 文件系统中的。FlumeFlume 是一个分布式、高可用的服务用于高效收集、聚合和移动大量日志数据。Flume 主要承载的作用是收集各个数据源的事件或日志数据然后将其 Sink 到数据库。Flume 的实现架构原理也非常简单通过 Agent 代理来实现数据的收集一个 Agent 包含了 SourceChannelSink 三个组件。Source采集的数据来源不同的数据源对应不同的格式Flume 支持的 Source 类型有很多比如 avro、thrift、twitter、exec、jms 等。所有的 Source 类型可参考 Flume 的官方文档https://flume.apache.org/FlumeUserGuide.html#flume-sourcesChannel缓冲区将接收到的 Source 数据缓存起来供下游的 Sink 消费只有当数据被 Sink 消费或者进入下一个 Channel 的时候才会被删除。为了保证 Channel 的可用性Flume 也提供了多种 Channel 类型有 memory、JDBC、File、Spillable Memory (当内存队列满了会存储到磁盘上) 、还支持自定义 Channel。Sink消费 Channel 里的数据将数据发送到目的地比如 Hive、HBase 等。SqoopSqoop 是一款开源的工具主要用于在 Hadoop (Hive) 与传统的数据库 (mysql、postgresql...) 间进行数据的传递可以将一个关系型数据库例如MySQLOraclePostgres 等中的数据导进到 Hadoop 的 HDFS 中也可以将 HDFS 的数据导进到关系型数据库中。Sqoop 项目开始于 2009 年最早是作为 Hadoop 的一个第三方模块存在后来为了让使用者能够快速部署也为了让开发人员能够更快速的迭代开发Sqoop 独立成为一个 Apache 项目。Sqoop 用户在 Hadoop 和各种关系型数据库直接高效的同步传输数据如下图所示实现同样功能的还有阿里开源的 datax。编程要求根据相关知识完成右侧选择题测试说明若选择题答案与正确答案一致则可通关。开始你的任务吧祝你成功有任何问题都可以随时关注私信