大数据理论与实践I 温故知新

ch1.大数据技术综述

1.大数据的基本特征是什么?

数据规模大,数据类型多样,生成和处理速度极快,价值巨大但密度较低。

2.Hadoop经历了几个发展阶段,各有什么特点?

前Hadoop时代;Hadoop时代;后Hadoop时代。

3.大数据技术体系大致分为几层?每层包含哪些技术?

大致分为7层,数据展现(ECharts,D3,Cboard);数据分析(数据仓库,数据集市,搜索引擎,SQL引擎,实时流处理引擎,人工智能);通用计算(批处理计算框架,高性能计算框架);资源管理(资源管理系统,容器化集群操作系统);数据存储与管理(分布式文件系统,分布式No/New SQL数据库);数据采集(结构化数据&数据导入导出,非结构化/半结构化数据&日记采集/分布式消息队列);数据源(电子商务、社交网络、智能硬件)

4.Apache Hadoop项目包含哪些子项目?简述一下它们的功能。

分布式文件系统HDFS】数据存储和管理。高容错;高可用;高扩展;简单一致性模型;流式数据访问;大规模数据集;构建成本低且安全可靠【批处理计算框架MapReduce】面向批处理的分布式计算框架。分而治之,分布式计算。移动计算,而不是移动数据。高容错;高扩展;适用于海量数据的离线批处理;降低了分布式编程的门槛【高性能计算框架Spark】计算高效;通用易用;运行模式多样【分布式资源管理系统YARN】资源管理和作业调度。通用;高可用;高扩展【容器引擎docker】打包应用及依赖包到一个可移植的容器中,然后发布到任意一台Linux上【容器化集群操作系统Kubernetes】容器化集群管理引擎、生产级容器编排工具【Hadoop数据仓库】企业决策支持【SQL引擎Hive】对海量结构化数据进行高性能SQL查询。提供类SQL查询语言;支持命令行或JDBC/ODBC;提供灵活的扩展性;提供复杂数据模型、扩展函数、脚本等【分布式NoSQL数据库HBase】列式存储:用于半结构化、非结构化数据。高并发;高可用;高扩展;海量存储【分布式搜索引擎ElastisSearch】基于lucene实现全文数据的快速存储、搜索和分析,处理PB级以上数据,强扩展性。

5.spark包含哪些组件?简述一下它们的功能。

core(基础计算框架-批处理,交互式分析) SQL(SQL引擎-海量结构化数据的高性能查询) streaming(实时流处理-微批) MLlib(机器学习) GraphX(图计算)

ch2.分布式文件系统HDFS

1.HDFS架构中包含哪几种角色?各自承担什么功能?

【Active NameNode】管理命名空间;管理元数据;管理block副本策略;处理客户端读写请求,为DataNode分配任务;集群中唯一【Standby NameNode】AN宕机后快速升级为active,同步元数据,即周期性下载edits,生成fsimage【NameNode元数据文件】edits编辑日志文件,fsimage元数据检查点镜像文件【DataNode】slave工作节点,存储block和数据校验和,执行客户端发送的读写操作,通过心跳机制周期向NameNode汇报运行状态和block列表信息,集群启动时向NameNode提供block列表信息【block数据块】HDFS最小存储单元,若一个block大小小于设定值不会占用整个块空间,默认3个副本【client】将文件切分为block,与NameNode交互获取文件访问计划和相关元数据,与DataNode交互读取或写入数据,管理HDFS   【系统架构:Mater/Slave】

2.为什么HDFS不合适存储大量的小文件?

元数据占用NameNode大量内存空间,磁盘寻道时间超过读取时间。

3.block副本的放置策略是什么?如何理解?

副本1放在client所在节点,副本2放在不同的机架节点,副本3放在与副本2在同一机架的不同节点,副本N随机选择,在同等条件下优先选择空闲节点。

4.HDFS离开安全模式的条件是什么?

Block上报率:DataNode上报的可用Block个数 / NameNode元数据记录的Block个数

当block上报率≥阈值时,HDFS才能离开安全模式,默认阈值为0.999,不建议手动强制退出。

【安全模式是HDFS确保block数据安全的一种保护机制。HDFS只接收读数据请求,而不接收写入、删除、修改等变更操作。AN启动时HDFS进入安全模式。触发原因:namenode重启或磁盘空间不足、block上报率低于阈值、datanode无法正常启动、日志中出现严重异常、用户操作不当。故障排查:找到datanode不能正常启动的原因,重启datanode;清理namenode磁盘。】

5.HDFS是如何实现高可用的?

AN与SN的主备切换、利用QJM实现元数据高可用(QJM机制、QJM共享存储系统)、利用ZooKeeper实现active节点选举。[JouralNode(共享存储) ZKFC Zookeeper]

6.HDFS的缺点?

不适合低延迟数据访问;不适合大量小文件存储;不支持并发写入;不支持文件随机修改。

7.元数据存储。

内存元数据(NameNode),文件元数据(edits 编辑日志文件+fsiamge 元数据镜像检查点文件)。

ch3.分布式资源管理系统YARN

1.简述YARN与MapReduce的关系。

YARN的出现为了处理MapReduce的缺陷(身兼两职:计算框架 + 资源管理系统。它的JobTracker :既做资源管理,又做任务调度 、任务太重,开销过大 、存在单点故障)yarn是分布式通用资源管理系统,可以让mapreduce只做计算框架一件事,而且可以将JobTracker的资源管理、任务调度功能分离。YARN提供MapReduce的ApplicationMaster实现。

2.为什么要设计ApplicationMaster这一角色。

管理应用程序实例、向ResourceManager申请任务执行所需的资源、任务调度和监管。职责:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

3.ZooKeeper在YARN中承担了哪些功能?

active节点选举、恢复Active RM的原有状态信息。

4.在实践中如何部署YARN的ResourceManager、NodeManager和HDFS的NameNode、DataNode?

1)HDFS集群:负责海量数据的存储,集群中的角色主要有 NameNode /DataNode /SecondaryNameNode。2)YARN集群,负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager

5.队列在资源调度中起什么作用?

将需要调度的资源放在队列中,进行不同资源调度策略时对不同队列中的资源可以进行不同的处理。

6.容量调度器与公平调度器的区别是什么?

容器调度器的每个队列都要预设资源分配的比列(提前做预算),而公平调度器通过平分的方式,动态分配资源,无需预先设定资源分配比例。

7.容量调度器会严格按预设比例分配资源吗?

容量调度器是弹性分配,空闲资源可以分配给任何队列,多个队列争用时会按比例进行平衡;支持动态管理,可以动态调整队列容量权限等参数,也可动态增加或暂停队列。

8.简述公平调度器中队列权重和资源抢占的含义。

队列权重:当队列中有任务等待,并且集群中有空闲资源时,每个队列可以根据权重获得不同比例的空闲资源。资源抢占:终止其他队列的任务,使其让出所占资源,然后将资源分配给占用资源量少于最小资源量限制的队列。

9.YARN里的角色。

【ResourceManager】master集群资源的统一管理和分配【NodeManager】slave管理节点资源,以及容器的生命周期【ApplicationMaster】管理应用程序实例,包括任务调度和资源申请【container】封装进程相关资源,是YARN中资源的抽象。 【系统架构:Mater/Slave】

ch4.分布式计算框架MapReduce & Spark

1.简述MR Split与HDFS block的关系。

split的大小默认等于block大小。split划分方式由程序设定,split与HDFS block没有严格对应关系。

2.为什么MapReduce要求输入输出必须是key-value键值对?

MapReduce框架只操作键值对<key, value>,因此这个框架中任务的输入和输出都是键值对形式。

3.简述shuffle的工作原理。 [避免和减少shuffle是MapReduce程序调优的重点  哈希取模]

【Map端】Map任务将中间结果写入专用内存缓冲区Buffer(默认100M),同时进行Partition和Sort(先按“keyhashcode%reducetasknumber”对数据进行分区,分区内再按key排序)。当Buffer的数据量达到阈值(默认80%)时,将数据溢写(Spill)到磁盘的一个临时文件中,文件内数据先分区后排序。Map任务结束前,将多个临时文件合并(Merge)为一个Map输出文件,文件内数据先分区后排序。【Reduce端】Reduce任务从多个Map输出文件中主动抓取(Fetch)属于自己的分区数据,先写入Buffer,数据量达到阈值后,溢写到磁盘的一个临时文件中。数据抓取完成后,将多个临时文件合并为一个Reduce输入文件,文件内数据按key排序。

4.从编程模型的视角,MapReduce有哪些优缺点?

优点:1)高容错:任务失败,自动调度到其他节点重新执行 2)高扩展:计算能力随着节点数增加,近似线性递增 3)适用于海量数据的离线批处理 4)降低了分布式编程的门槛

缺点:1) OLAP:要求毫秒或秒级返回结果 2)流计算输入数据集是动态的,而MapReduce是静态的 3) DAG计算:多个任务之间存在依赖关系,后一个的输入是前一个的输出,构成有向无环图DAG。每个MapReduce作业的输出结果都会落盘,造成大量磁盘IO,导致性能非常低下 4)仅支持map和reduce两种操作。不适合迭代计算、交互式计算、实时流处理等场景。执行效率低,时间开销大。

5.RDD的“弹性”主要体现在哪里?

弹性分布式数据集:失效后自动重构。

6.RDD宽依赖为什么又称为shuffle依赖?

子RDD的部分或全部分区数据丢失或损坏,从所有父RDD分区重新计算,必须进行shuffle。

【窄依赖-父RDD中的分区最多只能被一个子RDD的一个分区使用,例map,filter,union。窄依赖-子RDD分区依赖父RDD的所有分区,例groupByKey,reduceByKey,sortByKey。】

7.spark运行模式有几种?driver的主要功能是什么?

local模式、standalone模式、YARN/Mesos模式。driver负责解析spark程序、划分stage、调度任务到executor上执行。一个spark程序有一个driver,一个driver创建一个SparkContext,程序的main函数运行在driver中。【SparkContext负责加载配置信息,初始化运行环境。Executor负责执行driver分发的任务。Task是spark运行的基本单位】【local单机运行,测试。standalone是spark集群独立运行,不依赖第三方资源管理系统,Master/Slave,driver在worker中运行,master只负责集群管理,zookeeper负责masterHA避免单点故障。yarn-client用于交互和测试,yarn-cluster用于生产环境】

8.简述spark的程序执行过程。

生成逻辑计划、生成物理计划、任务调度、任务执行。

9.DAGScheduler是如何划分Task的?

根据任务的依赖关系建立DAG,根据依赖关系是否为宽依赖,即是否存在shuffle,将DAG划分为不同的阶段,将各阶段中的Task组成的TaskSet提交到TaskScheduler。

TaskScheduler:负责application的任务调度,重新提交失败的task,为执行速度慢的task启动备用task。

ch5.分布式ETL工具Sqoop

定义:是一个主要在Hadoop和关系数据库之间进行批量数据迁移的工具。面向大数据集的批量导入导出(将输入数据集分为N个切片,然后启动N个map任务并行传输),支持全量、增量两种传输方式。提供多种Sqoop连接器:内置(RDBMS,JDBC)、第三方(数据仓库,NoSQL数据库)。

并发度控制:数据导入的性能瓶颈;数据导入的性能可按每个map任务的处理速度5~10MB/s做估算;map个数并非越多越好,过多的map会导致RDBMS发生IO抢占,反而降低整体性能;RDBMS的导出速度控制在60~80MB/s;通过query人工均匀切分数据。

ch6.分布式数据采集工具Flume

定义:是一个分布式海量数据采集、聚合和传输系统。特点:基于事件的海量数据采集;数据流模型是source→channel→sink;事务机制是支持重读重写,保证消息传递的可靠性;内置丰富插件是轻松与各种外部系统集成;高可用是agent主备切换;Java实现是开源,优秀的系统设计。

基本概念:[event]事件,最小数据传输单元,由header和body组成。[agent]代理,JVM进程,最小运行单元,由source、channel、sink三个基本组件构成,负责将外部数据源产生的数据以event的形式传输到目的地。source负责对接各种外部数据源,将采集到的数据封装成event,然后写入channel。channel是event暂存容器,负责保存source发送的event,直至被sink成功读取。sink是负责从channel读取event,然后将其写入外部存储,或传输给下一阶段的agent。映射关系:一个source→多个channel,一个channel→多个sink,一个sink→1个channel。

架构:[单层架构]优点:架构简单,使用方便,占用资源较少。缺点:如果采集的数据源或agent较多,将event写入到HDFS会产生很多小文件。系统安全性较差。数据源管理较混乱。外部存储升级维护或发生故障,需对采集层的所有agent做处理,人力成本较高,系统稳定性较差。

[多层架构]优点:各类日志数据分层处理,架构清晰,运维高效,降低人工误操作风险。避免产生过多小文件,提高系统稳定性和处理能力。对外不会暴露系统关键信息,降低攻击风险,显著提升安全性。各关联系统易于升级维护。缺点:部署相对复杂,占用资源较多。

ch7.分布式消息队列Kafka  

1.为什么要对consumer进行分组?

为了加快读取速度,多个consumer可划分为一个组,并行消费同一个topic。

2.为什么Kafka分了topic之后,还要分partition?

一个Topic可分为多个分区,相当于把一个数据集分成多份,分别存储不同的分区中,然后分区可以设置多个副本,副本存储在不同的Broker中,这样就可以避免Kafka早期版本没有Replication概念,一旦某个Brocker宕机,其上的分区数据就可能丢失,这样的错误。

3.partition leader和follower是如何分工合作的?

从一个分区的多个副本中选举一个partition leader,由leader负责读写,其他副本作为follower从leader同步消息。partition follower定期从leader同步数据,partition leader挂掉后,Kafka controller leader从ISR中选择一个follower作为新的leader。

4.为什么ZooKeeper不亲自负责partition leader选举?

通过Zookeeper,从Kafka集群中选举出一个Broker作为Kafka Controller Leader。Kafka Controller Leader负责管理Kafka集群的分区和副本状态,负责Partition Leader的选举。避免分区副本直接在Zookeeper上注册Watcher和竞争创建临时Znode,导致Zookeeper集群负载过重。

5.Kafka特性。Kafka应用场景。Kafka索引。

消息持久化;高吞吐;高容错;易扩展;同时支持离线、实时数据处理。异步通信;应用解耦;峰值处理。

为提高消息写入和查询速度,为每个partition创建索引。偏移量索引;时间戳索引。稀疏存储。

6.Kafka高可用。

多分区多副本;双层选举(Kafka Controller Leader选举,Kafka Partition Leader选举)

ch11.分布式SQL引擎inceptor executor是资源调度的基本单元】

1.如何定位inceptor?它与Hive有什么区别?

定位:用于离线分析和交互式分析;分布式数据仓库系统;分布式通用SQL引擎;基于Hive和Spark打造。区别:与Apache Hive相比,数据分析处理速度有显著提升。补充特点:Hadoop领域对SQL支持最完善;支持完整分布式事务处理MVCC;优异的大数据处理和分析性能;提供便捷的SQL、PL/SQL开发调试辅助工具Waterdrop。【场景:统计分析;批处理;交互式统计分析;图计算和图检索】

2.如何理解inceptor读时模式。

含义:数据写入数据库时,不检查数据的规范性,而是在查询时再验证。

特点:数据写入速度快,适合处理大规模数据。查询时处理尺度很宽松,尽可能恢复各种错误。

3.分区的目的是什么?分区有几种类型呢?如何将数据导入分区表?

目的:减少不必要的全表扫描,提升查询效率。

含义:将表按照某个或某几个字段(分区键)划分为更小的数据集。

类型:单值分区:静态、动态分区;范围分区。单值静态:必须手动指定目标分区;单值动态:系统动态判断目标分区,动态分区在静态分区建完之后;范围分区:均需手工指定,不支持将文件直接导入范围分区。

导入: 1.数据预处理要求:文件编码为UTF-8,\n为换行。2.将文件导入表或分区(Load导入):仅将数据文件移动到表或分区的目录中,不会对数据进行任何处理,如分桶、排序。不支持动态,不建议Load。3.将查询结果导入表或分区(Insert导入)。

补充:分区表将数据按分区键的键值存储在表目录的子目录中,目录名为“分区键=键值”。Inceptor支持TEXT表、ORC表、CSV表和Holodesk表的分区操作。

4.分桶的目的是什么?如何将数据导入分桶表?

含义:按分桶键哈希取模的方式,将表中数据随机、均匀地分发到若干桶文件中。

作用:数据划分-随机均匀;数据集合-key相同的数据在同一个桶中。提高join查询和取样效率。

目的:通过改变数据的存储分布,提升取样、Join等特定任务的执行效率。(先分区再分桶)

导入:按分桶键哈希取模的方式,将表中数据随机、均匀地分发到若干桶文件中。数据写入:分桶表在创建的时候只定义Schema,数据写入时系统不自动分桶,需要先人工分桶再写入。写入分桶表只能通过Insert,而不能通过Load,因为Load只导入文件,并不分桶。如果分桶表创建时定义了排序键,那么数据不仅要分桶,还要排序。如果分桶键和排序键不同,且按降序排列,使用Distribute by Sort by分桶排序。如果分桶键和排序键相同,且按升序排列(默认),使用Cluster by分桶排序。

补充:•分桶键必须是表结构中的列•分桶键和分桶数在建表时确定,不允许更改,否则必须重新分桶•Inceptor支持TEXT表、ORC表、ORC事务表(必须分桶)、CSV表和Holodesk表的分桶操作。

存储方式:在表或分区目录下,每个桶存储为一个文件;桶文件的大小应控制在100~200MB之间(ORC表压缩后);如果桶文件小于HDFSblock,那么一个桶对应一个block,否则会存储在多个block中。

5.table分类。

表的元数据存储在Metastore中,表的实际数据存储在HDFS,Hyperbase和Search中。

按所有权分类:托管表(内表):删除内表时,会同时删除表数据,以及Metastore中的元数据。有控制权。

外表:删除外表时,不会删除表数据,但会删除Metastore中的元数据。系统不具有完全控制权。

按存储格式分类:Text表、ORC事务表、Holodesk表、Hyperbase表、ES表

ch12.实时流处理引擎Slipstream

1.事件驱动模式与微批模式有什么不同?

input stream 输入流

事件驱动模式:以单条数据被input stream接收为事件,逐条读取并处理。

微批模式:将input stream按时间划分成若干小数据块batch来处理,即在由若干单位时间组成的时间间隔内,将接收的数据放到一个batch中。

derived stream 衍生流

微批模式:a)含义:stream变形是从已有batch计算得到新batch的过程。b)单batch变形:对stream中单个batch进行计算得到新batch的过程。c)窗口变形(多batch变形):对一个时间窗口内多个batch进行计算得到新batch的过程。

事件驱动模式:a)含义:每得到一条数据就对其进行变形,得到derived stream。b)但数据变形:对stream中单条数据进行计算得到新数据的过程。c)窗口变形(多数据变形):对一个时间窗口内的多条数据进行计算得到新数据的过程。

相比微批模式,事件驱动模式的延迟更低,在延迟敏感的场景中表现更佳。可从容对不同延时级别的业务场景,微批→秒级,事件驱动→毫秒级。通过参数配置和SQL改写切换两种流处理模式。

2.两种处理模式下的窗口变形有什么不同?

事件驱动模式是多数据变形,微批模式是多batch变形。

3.简述一下StramJob的主要作用。

对一个或多个stream进行计算,并将结果写入一张表的任务。一个streamJob启动时,StreamSQL会为每一个input stream启动一组称为receiver的任务来接收数据,接收来的数据经过一系列derived stream的变形最终被插入一张表,供用户查询。StreamJob是触发StreamSQL执行的Action,一般具有插入结果表语义。StreamJob主要存储StreamJob Level的配置参数,以及对应的SQL。合理使用application(一组业务逻辑相关的StreamJob集合)划分StreamJob开源实现资源的共享和隔离。

4.StreamSQL与普通SQL有什么区别?

1)DML语句的运行机制不同。【普通SQL】阻塞式运行:提交SQL后,用户需等待SQL执行结束,期间命令被持续阻塞,无法执行其他命令。【StreamSQL】背景运行:计算任务持续在后台运行,执行StreamSQL的DML语句会立即返回结果。

2)查询结果的输出不同。【普通SQL】查询结果或者显示在Console,或者通过JDBC读取【StreamSQL】用户必须显式地指定查询结果输出到某个地方,后台持续运行的SQL无法直接跟Console交互。查询结果通常会插入到表中。

5.背景。

批处理:批量处理;调度延时;处理延时。流处理:流式处理;低延时(开发难;调试难;运维难)。

批处理计算框架:MapReduce,SparkCore,Inceptor,FlinkDataset

流式计算:事件StormCore,Slipstream,FlinkDataStream 微批SparkStreaming,Slipstream,StormTrident

6.Slipstream基础。

定位:融合事件驱动与微批处理的实时流计算引擎。分布式流式SQL引擎。

特点:微批模式和事件驱动模式的一体化。支持分布式流式SQL。强大的优化器提升性能。极高的易用性。产品化程度高。迁移成本低。

7.StreamSQL窗口。

流应用通常会对一个窗口(时间间隔)内的数据做多表关联、聚合或统计。非窗口计算&窗口计算。

窗口类型:滑动窗口(前后窗口之间有重叠)、跳动窗口(前后窗口之间无重叠)。

窗口切分方式:系统时间切分(默认)、事件时间切分(优先级高,灵活性高,多格式支持)。

ch13.分布式搜索引擎search

1.search的数据模型与关系数据库有怎样的对应关系?

index(索引)→table(表),document(文档)→row(行),field(字段)→column(列)

type是index的逻辑分类,不映射为关系数据库中的数据对象。

2.search包含哪几类节点,它们各自负责哪些工作?

节点:一个运行中的ElasticSearch实例

主节点(MasterNode):负责管理集群内的所有变更,如增删节点、增删索引、分配分片等,不负责文档更新和搜索。数据节点(DataNode):负责存储数据,即文档的增删改查。分离主节点和数据节点是一个比较好的选择,因为索引和搜索操作会消耗大量资源。客户端节点(ClientNode/路由节点):负责路由请求,实现集群访问的负载均衡,集群规模较大时非常有用,协调主节点和数据节点,根据集群状态直接路由请求。

3.简述index、document、shared与副本shard的关系。

document保存在shard中。index是逻辑概念,shard是物理概念,创建index时会指定划分为一个或多个shard,然后分布到集群的各节点中,document通过哈希取模的方式分配到不同的shard中。副本shard是主shard的精确复制,每个shard可有零个多多个副本。index是逻辑概念,shard是物理概念。index的任意一个document都归属于一个主shard,主shard的数量决定了index的最大数据量。index建立时就必须明确主shard数且不能修改,但副本shard数可由随时修改。

shard(分片)是search的数据存储单元,是数据的容器,不可分割但可收缩。当集群规模扩大或缩小时,系统会自动迁移分片,使数据均匀分布。

4.简述search更新文档的基本流程。

1)客户端向node1(路由节点)发送新建、索引或删除文档请求。2)通过文档id确定该文档属于分片0,请求被转发到node3,因为分片0的主分片在node3上。3)node3在主分片上执行更新操作,如果成功了,node3将请求并行转发到node1和node2的副本分片上,一旦所有副本分片都报告同步成功,node3将向node1报告更新成功,最后node1向客户端报告成功。

读取文档:1)客户端向node1(路由节点)发送读取请求2)node1通过文档id确定文档属于分片0,分片0的副本存储于所有的三个节点上,这种情况下它将请求转发到node2。3)node2将目标温度返回给node1,然后将文档返回给客户端。

5.search简介。

基于ElasticSearch的大规模分布式搜索引擎。特点:分布式实时存储;分布式实时搜索;SQL引擎与搜索引擎相融合;高扩展。场景:文档数据库;日志分析与监控;舆情分析;搜素引擎。

ch14.分布式NewSQL数据库Hyperbase

1.为什么可以将Hyperbase表看作是一张四维表?

四维表:RowKey | 列族 | 列限定符 | 时间戳  二维表:RowKey | 列

2.为什么说Hyperbase是一个key-value数据库?

按key的字典序顺序存储,主要通过key实现数据的增删改查,以及扫库操作。

3.简述table、region、store和StoreFile的关系。

系统将table水平划分(按行)为多个region,每个region保存表的一段连续数据。一个region由多个store组成,每个store存储一个列族。store有内存中的MemStore和磁盘中的若干StoreFile组成。MemStore是store的内存缓冲区,数据读写都先访问MemStore,StoreFile是MemStore的磁盘溢写文件,在HDFS中被称为HFile。client读取数据时,先找MemStore再找StoreFile。

4.为什么要进行Region Split和StoreFile Compaction?

StoreFile Compaction:将store中的全部或部分StoreFile合并为一个StoreFile的过程,目的是减少StoreFile数量,提升数据读取效率。当store中的StoreFile数量超过阈值时触发StoreFile Compaction。

Region Split:根据一定的触发条件和分裂策略,将region划分为两个子region的过程,目的是实现数据访问的负载均衡,方法是利用MiddleKey将当前region划分为两个等分的子region,当region中最大store的大小超过阈值时触发Region Split。

HLog:以WAL方式写数据时产生的日志文件。目的是HRegionServer意外宕机时的数据恢复。每个server维护一个HLog。先写HLog,再写MemStore,最后写StoreFile。定期删除HLog过期数据。

5.简述HBase BulkLoad的基本过程。

含义:由于HBase中数据以HFile文件的形式存储与HDFS,所以绕过HBaseAPI,先预分region,再将数据加工成HFile文件,并加载到HBase中,从而完成大规模数据的快速入库。

优点:极大提高入库效率;不占用HRegionServer资源,显著减轻Hyperbase集群的写入压力;利用MapReduce加工HFile文件,非常高效;提高job运行速度,降低job执行时间。

【抽取】从数据源中抽取数据(对于MySQL,运行mysqldump命令导出数据)。【转换】利用MapReduce将数据转换为HFile文件(对于TSV或CSV文件,使用HBase ImportTsv工具将其转换成HFile文件。每个输出文件夹中的每个区域都会创建一个HFile文件。HDFS中的可用磁盘空间至少为原始输入文件的两倍)。【加载】将HFile文件加载到HBase(利用HBase CompleteBulkLoad工具,将HFile文件移动到HBase表的相应目录中,完成加载)

基本流程:1-3步:对数据集预分region,获取split key。4.根据split key创建Hyperdrive表,预分region。5.将数据集转换为HFile文件,加载到HBase。为index数据划分region & rebuild index。

6.Hyperbase简介。

高可靠;高性能;高并发;可伸缩;实时读写;面向列的分布式NewSQL数据库。基于HBase实现。列式存储。key-value数据库。采用HDFS为文件存储系统。

特点:线性扩展;高可用;[高并发操作;实时随机读写;数据强一致性;海量数据存储]场景

表的特点:数据规模大;无模式;面向列族;稀疏;数据多版本;数据无类型。

系统架构:HMaster管理表的创建删除修改,系统在运行过程中动态添加删除HRegionServer;为server分配region;管理元数据;不处理client数据读写请求。HRegionServer处理client数据读写请求;管理region split;管理storeFile Compaction。【Master/Slave】 zookeeper实现HMaster高可用;监控server的上下线信息并通知HMaster;存储元数据的寻址入口。client通过接口访问Hyperbase;为了加快数据访问速度,将元数据缓存在client cache中。

•Region是HBase分布式存储的最小单元。


版权声明:本文为qq_36911138原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。