上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

HadoopHDFSMapReduceSparkHBase重要知识点整理

guduadmin31天前

本复习提纲主要参考北京大学计算机学院研究生课程《网络大数据管理与应用》课程资料以及厦门大学计算机科学系研究生课程 《大数据技术基础》相关材料整理而成,供广大网友学习参考,如有版权问题请联系作者删除:guanmeige001@pku.edu.cn

Part1 Hadoop

Hadoop简介

  • Hadoop的功能和作用:

    • 高效地存储,管理,分析海量数据

    • Hadoop采用分布式存储方式, 提高了读写速度,并扩大了存储容量,通过冗余存储保证了安全性。MapReduce可以高效地分析和处理数据。

  • 为什么不用关系型数据库加上更多磁盘来做大规模批量分析?

    • B树适合更新小部分数据,在更新大部分数据库数据的时候,B 树的效率没有 MapReduce 的效率高,因为它需要使用排序/合并来重建数据库。

    • MapReduce适合批处理,关系型数据库适合交互型访问和批处理

    • 关系型数据是结构化的,MapReduce可以处理非结构化或半结构化数据

  • Hadoop的优点:

    • 高容错性、高可靠性:通过冗余存储,维护多个数据副本,确保能处理节点崩溃的情况

    • 高效性:通过并行处理加快数据处理速度

    • 高可扩展性:在可用的计算机集群之内分配数据并完成计算任务,可以在节点之间动态迁移数据,集群大小可伸缩

    • 低成本:依赖于廉价服务器

    • Linux平台,支持多种编程语言

  • 缺点(GPT):

    • 不适合交互式查询和实时数据处理

    • 延迟高,不适合对延迟要求高的场景

    • 冗余存储占用额外空间

    Hadoop的结构

    • 最底层是HDFS,存储Hadoop所有存储节点上的文件

    • 上一层是MapReduce计算引擎(包括JobTrackers和TaskTrackers)

    • 再上层是Pig,Hive等各种应用HadoopHDFSMapReduceSparkHBase重要知识点整理,第1张

      Part2 HDFS

      HDFS的优缺点

      • 硬件出错:能快速恢复

      • 流数据读写:假设程序是批量处理数据的,要求程序使用流读取来提高数据吞吐量。重视吞吐量而非响应速度

      • 大数据集:文件通常是GB/TB级别

      • 简单的文件模型:假设文件只有一次写入和多次读取。(适合搜索引擎)

      • 强大的跨平台兼容性(基于Java实现,只要是JDK支持的平台都可兼容)

        相应的问题:

        • 满足不了低延迟

        • 无法高效存储大量小文件(NameNode压力会增加)

        • 不支持多用户写入同一个文件,以及在任意位置修改文件(只能进行追加操作)

          基本概念

          • 块:与文件系统的块(几百~几千byte)相比更大,默认为64MB,是文件存储和处理的逻辑单元

          • NameNode目录节点:维护和管理文件名,保存数据块和DataNode的的映射关系,通常由性能较好的机器负责

          • DataNode数据节点:存储数据块

            • 默认副本数为3;一个文件存储的份数称为冗余因子,可以在文件创建时指定,之后再改

            • 客户端向某个节点的写入 和 节点向其他节点的数据备份是pipeline进行的

            • DataNode定时向NameNode发送心跳表明存活,并发送数据块列表(包括了节点上所有数据块编号)

            • 文件复制功能,除了提高容错性,还提高了服务的伸缩性scalability(多个client同时请求同一个文件时可以从多个副本处读取)

              Part3 MapReduce

              • 一个job会把数据切分成若干数据块,由map task并行地处理它们

              • 框架包含1个JobTracker和一堆TaskTracker, JobTracker负责创建和提交任务

                计算流程

                • Map阶段

                  • 输入: 输出:一个或多个

                    • 相同key的输出会被分发到同一个reducer

                    • map的输出系统会先自动排序,然后发给reducer

                  • Reduce阶段

                    • 输入: 输出:

                  • Combine阶段:可以将map的结果先进行一次合并

                    • 类似提前做一次reduce操作

                    • Combine的输出是reduce的输入,一定得保证正确性(通常用于reduce的输入输出类型相同的场景,例如求max, sum等等)

                  • Partition&Shuffle阶段

                    • Shuffle指把map的输出移动到reducer的过程

                    • Partitioner负责决定Map阶段产生的 pair发送到哪个Reducer,默认情况下用key的hash值来分配

                    HadoopHDFSMapReduceSparkHBase重要知识点整理,第2张

                    伪代码

                    Wordcount

                    word count (baseline):

                    class MAPPER
                      method MAP(docid a, doc d)
                        for all str word in d do
                          emit (word, 1)
                    ​
                    class REDUCER
                      method REDUCE(str word, counts[c1, c2, ...])
                        sum ← 0
                        for all count in counts do
                          sum ← sum + c
                        emit (word, sum)

                    word count (in-mapper combine):

                    • 比combiner更高效,因为combiner的执行次数是不一定的

                    • 主要是在初始化mapper的时候弄一个关联数组,

                      class MAPPER
                        method INIT()
                          H ← new ASSOCIATIVEARRAY
                        method MAP(docid a, doc d)
                          for all str word in d do
                            H[t] ← H[t] + 1
                        method CLOSE
                          for all str t in H.keys() do
                            emit (t, H[t])
                      ​
                      class REDUCER
                        method REDUCE(str word, counts[c1, c2, ...])
                          sum ← 0
                          for all count in counts do
                            sum ← sum + c
                          emit (word, sum)
                      
                      Shuffle实现细节
                      • Mapper端

                        • mapper端有一个memory buffer, 每次buffer达到一定阈值(如80%)时先排序,然后向磁盘溢写(spill),最终在disk上形成很多个段。

                        • 在发送给reducer之前,要对相同key的段进行merge,这里如果有combiner也可以先combine

                      • Reducer端

                        • 不断从各个map task拉取最终结果,对来自不同的mapper的结果做合并,

                        • 首先请求map task所在的TaskTracker获取map task的输出文件

                        HadoopHDFSMapReduceSparkHBase重要知识点整理,第3张

                        HadoopHDFSMapReduceSparkHBase重要知识点整理,第4张

                        新框架Yarn

                        • 即新版本Mapreduce采取的MapreduceV2架构

                        • 将JobTracker两个主要功能分离为单独的组件:资源管理+任务调度/监控

                        • 原框架中核心的 JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager、ApplicationMaster 与 NodeManager 三个部分

                          • container类似于机器的概念

                          • ResourceManager:

                            • ResourceManager中心化地进行job和资源的调度——一部分JobTracker功能

                            • 负责接收 JobSubmitter 提交的作业,调度、启动每一个 Job 所属的 ApplicationMaster,并且监控 ApplicationMaster 的存在情况。

                          • NodeManager:负责Container状态的维护,并向ResourceManager发送心跳。

                          • ApplicationMaster:

                            • 负责监控task的运行情况——另一部分JobTracker功能

                            • 负责一个 Job 生命周期内的所有工作,每一个 Job都有一个 ApplicationMaster, 它可以运行在 ResourceManager 以外的机器上。用户可以自己配置

                          Part4 Spark

                          Spark简介

                          • 开源的分布式并行计算系统

                          • 支持迭代算法、交互式数据分析

                          • 思想:内存集群计算

                          • 实现:scala语言

                            Spark与Mapreduce对比

                            • Mapreduce每次读写都需要序列化到磁盘,一个复杂任务需要几十次磁盘读写;Spark只需要一次磁盘读写,大部分处理在内存中进行

                            • Spark的优势:

                              • 部分场景下性能比Mapreduce快很多

                                • 小数据集:可以达到亚秒级延迟

                                • 大数据集:迭代类应用快10~100x

                              • 提供比Hadoop更高层的API,算法实现代码量低(1/10或1/100)

                              • 比Hadoop更通用,有map和reduce之外的更多操作(transformations、actions两大类操作);节点之间的通信模型不像hadoop只有shuffle一种模式;可以控制中间结果的存储和分区等

                              • 兼容Hadoop存储API,支持读写所有hadoop支持的系统,如HDFS, Hbase等

                              • 容错性:checkpoint机制

                              • 可用性:scala, java, python API

                              基本概念

                              • RDD: 弹性分布式数据集(Resilient Distributed Dataset),是分布式内存的一个抽象概念,提供一种高度受限的共享内存模型

                              • DAG: 有向无环图, 反映RDD之间的依赖关系

                              • Executor: 运行在工作节点上的一个进程,负责运行task

                              • task:运行在executor上的工作单元

                              • Job: 包含多个RDD以及对他们的各种操作

                              • Stage: 作业的基本调度单位,一个job分为多个stage, 一个stage包括一组task,互相之间有一定关联且没有shuffle依赖关系

                                运行架构

                                HadoopHDFSMapReduceSparkHBase重要知识点整理,第5张

                                • 集群资源管理器cluster manager: master节点,指在集群上获取资源的外部服务,有以下几种

                                  • standalone:spark原生的资源管理,由master负责资源管理

                                  • Yarn:由yarn中的resource manager负责资源管理

                                  • Mesos: 由Mesos的Mesos Master负责资源管理

                                  • 负责给executor分配资源并启动executor进程

                                  • 工作节点worker node:worker节点,每个节点包含一个executor用于执行任务

                                    • standalone中指的是worker

                                    • spark on yarn模式中指的就是NodeManager

                                    • Executor(执行进程):负责运行task并将数据存在内存或磁盘上,每个application都有一批自己的executor.

                                    • 任务控制节点driver: 运行application的main()函数并给任务创建一个SparkContext

                                      • DAGscheduler:运行在driver节点上,sparkContext根据RDD的依赖关系构建DAG图,DAG图交给DAGScheduler形成stage划分,并提交给taskScheduler

                                      • taskScheduler: 把任务分发给worker节点执行

                                      RDD

                                      • RDD的特点:在集群节点上不可变的、已分区的数据对象,是可序列化的(可以溢写到磁盘),是静态类型的

                                        RDD是Spark的最基本抽象

                                      • 只能从持久化存储或通过transformations操作产生,相比于分布式共享内存(DSM)可以更高效地实现容错性,不一定要使用checkpoint,丢失的分区可以通过lineage计算出来

                                      • RDD的不变性使得它可以实现类似Mapreduce的推测式执行

                                        • 当某个机器运行很慢的时候,可以在另一台机器上并行地重新执行该任务,取先执行完的结果

                                      • RDD分区的特点可以通过数据的本地性来提高性能

                                        • 与分布式共享内存(DSM)的区别:

                                          • DSM需要通过checkpoint来恢复,RDD可以通过lineage来计算丢失的分区

                                          • RDD是批量处理,最细粒度是哈希或范围分区,不能像DSM一样精确地读写某个内存位置

                                        • RDD有两种类型的操作,transformations和actions

                                          • transformations: map, filter, groupby, join。并不马上执行,直到遇到actions再真正执行

                                          • Actions: count, collect, save

                                          • actions返回某个结果或把结果写到存储系统中,是触发spark计算的动因

                                        • lineage:DAG拓扑排序的结果

                                        • spark不适用的场景:

                                          • 无法支持细粒度、异步更新的操作

                                          • 比如图计算

                                          • 还有需要细粒度的日志更新和数据checkpoint的应用

                                          容错机制
                                          • 总结:基于lineage,也可以指定checkpoint

                                            宽依赖和窄依赖
                                            • 窄依赖:父亲RDD的分区只会对应子RDD的一个分区,没有shuffle操作

                                            • 宽依赖:父亲RDD的分区对应子RDD的多个分区,涉及shuffle操作

                                            • 如果有宽依赖:重新计算某个子RDD的某分区时,其父RDD对应到子RDD其他分区的部分也会被重新计算,造成了冗余的计算;此外一个子RDD通常对应多个父RDD,这就意味着其他父RDD也得重新计算

                                            • 如果是窄依赖,就直接pipeline地计算所有父分区就行了,不用shuffle,效率很高

                                            • 通常把尽量多的窄依赖划分到同一个stage里

                                              Part5 HBase

                                              HBase简介

                                              • HBase=Hadoop Database

                                              • 高可靠,高性能,面向列,可伸缩的分布式存储系统

                                              • 表通常非常大,可以很稀疏(空的列不占据存储空间)

                                                与传统关系型数据库对比
                                                • 数据类型:HBase只有字符串类型,关系数据库有多种类型

                                                • 数据操作:HBase操作简单,只有插入、查询、删除、清空操作;表和表之间没什么关系,不需要实现表的连接等操作;关系型数据库有函数、连接操作

                                                • 存储模式:HBase基于列存储;关系数据库基于表格结构和行模式存储

                                                • 数据维护:HBase更新数据时是插入新版本而不删除旧版本,关系数据库是替换修改

                                                • 可伸缩性:HBase可以轻易地增减硬件数量(主要是为了处理硬件错误的情况),容错性高;关系型数据库需要增加中间层才能实现类似的功能

                                                  HadoopHDFSMapReduceSparkHBase重要知识点整理,第6张

                                                  • HBase更适合海量存储和互联网应用的需求(互联网应用是以字符为基础的)

                                                    以下内容来自GPT3.5:

                                                    NoSQL(Not Only SQL)数据库是一类非关系型的数据库管理系统,它们采用了不同于传统关系型数据库的数据存储模型。NoSQL 数据库的出现主要是为了解决传统关系型数据库难以应对大规模、高并发、分布式环境下的数据存储和处理需求。

                                                    NoSQL 数据库通常具有以下特点:

                                                    1. 灵活的数据模型:与固定的表结构相比,NoSQL 数据库通常采用灵活的数据模型,如文档型、键值对、列族、图形等,能够更好地适应不同类型和格式的数据。
                                                    2. 横向扩展性:NoSQL 数据库设计时考虑了横向扩展的可能性,可以方便地增加节点来处理更大规模的数据和更高的并发请求。
                                                    3. 高性能:针对特定的使用场景进行了优化,能够提供较高的读写性能和低延迟。
                                                    4. 分布式架构:NoSQL 数据库天生支持分布式架构,能够在多个节点上分布存储和处理数据。

                                                    NoSQL 数据库种类繁多,包括文档型数据库(如 MongoDB)、键值对数据库(如 Redis)、列存储数据库(如 HBase)、图形数据库(如 Neo4j)等。每种类型的 NoSQL 数据库都有自己的特点和适用场景。

                                                    总的来说,NoSQL 数据库旨在通过提供更灵活、高性能、可伸缩的数据存储和处理解决方案,满足当前互联网时代大规模数据应用的需求。它们在大数据、实时分析、高并发访问等方面有着广泛的应用。

                                                    HBase数据模型

                                                    • Hbase的写操作是锁行的,可以按行加锁,每一行有一个时间戳

                                                      几个重要概念
                                                      • 行键

                                                        • Hbase表的主键,表中的记录根据行键排序

                                                        • 可以通过单个行键/行键区间范围/全表扫描访问行

                                                      • 列族

                                                        • 每个列都属于某个列族

                                                        • 列族是表的结构的一部分,必须在使用表之前定义;列名可以自己定义

                                                      • 时间戳

                                                        • 通过行和列确定的一个存储单元称为cell,每个cell都有同一数据的多个版本,

                                                        概念视图
                                                        HadoopHDFSMapReduceSparkHBase重要知识点整理,第7张
                                                        物理视图

                                                        按列存储,空白区域不存,请求会返回null

                                                        不同列族的数据会存储在不同文件中;同一列族的数据在一个文件内,按行键从小到大排序,同一行的数据按列键排序

                                                        HadoopHDFSMapReduceSparkHBase重要知识点整理,第8张

                                                        HBase的实现
                                                        • HRegion

                                                          • 每个表由一个或多个HRegion组成

                                                          • 每个HRegion包含了一段key区间内的很多行,内部也按照行键的字典序排列

                                                          • 一开始每个表只有一个HRegion,随着表的增大,HRegion会自动分裂成多个HRegion

                                                          • HRegion是分布式存储的最小单元,但不是物理存储的最小单元,HRegion由多个HStore组成,每个HStore又包含一个memStore和零至多个StoreFile

                                                          HadoopHDFSMapReduceSparkHBase重要知识点整理,第9张

                                                          • HRegion的定位

                                                            • Zookeeper file-ROOT-META-table

                                                            • Zookeeper file记录了ROOT表的位置信息,ROOT表(只有一个root region)记录了meta表的region信息,meta表记录了用户表的HRegion信息

                                                            • HadoopHDFSMapReduceSparkHBase重要知识点整理,第10张

                                                            • 中间需要多次网络操作,client表会进行缓存 

                                                            HadoopHDFSMapReduceSparkHBase重要知识点整理,第11张

                                                            • server分为两种,master server和region server,主从式结构

                                                              zookeeper是一个cluster,会跟每个region server保持心跳联系,master server定时向zookeeper轮询状态

                                                              大数据管理系统

                                                              HadoopHDFSMapReduceSparkHBase重要知识点整理,第12张

                                                              (以下由GPT4生成)

                                                              这张图展示的是一个典型的大数据管理系统架构,主要基于Apache Hadoop生态系统。这样的系统设计通常涉及以下几个关键组件和它们之间的交互:

                                                              • 数据存储:HDFS(Hadoop分布式文件系统)是基础,用于存储大量数据。它具备高容错性、高可靠性,并且能够存储和处理大量分散的数据。

                                                              • 数据处理:MapReduce是一个编程模型,用于处理和生成大数据集。它能够在分布式环境中并行处理大量数据。

                                                              • 数据访问:Hive和Pig提供数据仓库功能,允许用户使用类SQL语言(HiveQL)和脚本语言(Pig Latin)进行复杂的数据分析和处理。

                                                              • 实时/随机访问:HBase是建立在HDFS之上的非关系型分布式数据库,它支持实时的数据访问。

                                                              • 数据集成:Sqoop是用于在关系型数据库和Hadoop之间传输数据的工具,而HCatalog允许用户使用统一的表格视图访问位于不同数据处理工具中的数据。

                                                              • 协调服务:ZooKeeper是一个为分布式应用提供一致性服务的软件,它用于维护配置信息、命名、提供分布式同步以及提供组服务。

                                                              • 管理监控:Ambari是用于监控和管理Hadoop集群的工具,提供了集群的安装、配置和维护功能。

                                                                从设计思路上看,这种架构的目的是为了处理大规模数据集,并提供高效的存储、快速处理、灵活的数据访问以及方便的管理监控功能。一个成功的大数据管理系统应该能够确保扩展性、高性能、容错性和数据一致性。

                                                                这样的设计也是模块化的,允许在不同的层面进行优化和定制,以满足特定的业务需求。例如,对于需要快速读写访问的应用场景,可以选择使用HBase。而对于需要复杂数据分析的场景,可以选择使用Hive。

                                                                整体上,设计大数据管理系统时,需要考虑数据的来源、大小、处理速度和使用方式,以及系统的可维护性、扩展性和安全性。

网友评论

搜索
最新文章
热门文章
热门标签