进入大数据阶段就象征着进入NoSQL阶段,更多的是面向OLAP场景,即数据仓库、BI运行等。
大数据技术的开展并不是偶然的,它的面前是关于老本的考量。集中式数据库或许基于MPP架构的散布数据库往往驳回的都是性能稳固但多少钱较为昂贵的小型机、一体机或许PC主机等,裁减性相对较差;而大数据计算框架可以基于多少钱昂贵的普通的配件主机构建,并且通常上允许有限裁减以撑持运行服务。
在大数据畛域中最有名的就是 Hadoop 生态,总体来看,它关键由三局部构成:底层文件存储系统 HDFS(Hadoop Distributed File System,Hadoop 散布式文件系统)、资源调度计算框架 Yarn(Yet Another Resource Negotiator,又一个资源协调者)以及基于 HDFS 与 Yarn的下层运行组件,例如HBase、Hive等。一个典型的基于 Hadoop 的运行如下图所示。
一、HDFS
HDFS 被设计成适宜运转在通用配件(Commodity Hardware)上的散布式文件系统。它和现有的散布式文件系统有很多独特点,例如典型的 Master-Slave 架构(这里不预备开展引见),也有不同点,HDFS 是一个具备高度容错性的系统,适宜部署在便宜的机器上。关于HDFS 这里关键想说两点,自动正本数的设置以及机架感知(Rack Awareness)。
HDFS 自动正本数是 3,这是由于 Hadoop 有着高度的容错性,从数据冗余以及散布的角度来看,须要在同一机房不同机柜以及跨数据中心启动数据存储以保障数据最大可用。因此,为了到达上述目的,数据块须要至少寄存在同一机房的不同机架(2 份)以及跨数据中心的某一机架(1 份)中,共 3 份数据。
机架感知的目的是在计算中尽量让不同节点之间的通讯能够出当初同一个机架之 内,而不是跨机架,进而缩小散布式计算中数据在不同的网络之间的传输,缩小网络带 宽资源的消耗。例如当集群出现数据读取的时刻,客户端依照由近到远的优先秩序选择 哪个数据节点向客户端发送数据,由于在散布式框架中,网络 I/O 曾经成为关键的性能瓶颈。
只要深入了解了这两点,才干了解为什么 Hadoop 有着高度的容错性。高度容错性是Hadoop 可以在通用配件上运转的基础。
二、Yarn
Yarn 是继 Common、HDFS、MapReduce 之 后 Hadoop 的又一个子名目, 它是在MapReduceV2 中提出的。
在 Hadoop1.0 中,JobTracker 由资源治理器(由 TaskScheduler 模块成功)和作业控制 (由 JobTracker 中多个模块独特成功)两局部组成。
在 Hadoop1.0 中,JobTracker 没有将资源治理相关配置与运行程序相关配置拆分开,逐 渐成为集群的瓶颈,进而造成集群出现可裁减性变差、资源应用率降低以及多框架允许不 足等多方面的疑问。
在 MapReduceV2 中,Yarn 担任治理 MapReduce 中的资源(内存、CPU 等)并且将其 打包成 Container。这样可以使 MapReduce 专一于它长于的数据处置义务,而不须要思考资源调度。这种松耦合的架构方式成功了 Hadoop 全体框架的灵敏性。
三、Hive
Hive 是基于Hadoop 的数据仓库基础构架,它应用便捷的 SQL 语句(简称 HQL)来查问、剖析存储在 HDFS 中的数据,并把 SQL 语句转换成 MapReduce 程序来启动数据的处置。Hive与传统的相关型数据库的关键区别体如今以下几点。
1)存储的位置, Hive 的数据存储在 HDFS 或许 HBase 中,然后者的数据普通存储在裸设备或许本地的文件系统中,由于 Hive 是基于 HDFS 构建的,那么依赖 HDFS 的容错个性,Hive 中的数据表自然具备冗余的特点。
2)数据库降级, Hive 是不允许降级的,普通是一次性写入屡次读写(这局部从 Hive 0.14之后开局允许事务操作,然而解放比拟多),然而由于 Hive 是基于 HDFS 作为底层存储的, 而 HDFS 的读写不允许事务个性,因此 Hive 的事务允许肯定须要拆分数据文件以及日志文 件才干允许事务的个性。
3)口头 SQL 的提前,Hive 的提前相对较高,由于每次口头都须要将 SQL 语句解析成MapReduce 程序。
4)数据的规模上,Hive 普通是 TB 级别,然后者规模相对较小。
5)可裁减性上,Hive 允许 UDF、UDAF、UDTF,后者相对来说可裁减性较差。
四、HBase
HBase(Hadoop>1.特点
HBase 是 Key-Value 方式的数据库(类比 Java 中的 Map)。既然是数据库那必需就有 表,HBase 中的表大略有以下几个特点。
1)大:一个表可以有上亿行,上百万列(列多时,拔出变慢)。
2)面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3)稠密:关于空(null)的列,并不占用存储空间,因此,表可以设计得十分稠密。
4)每个单元格中的数据可以有多个版本,自动状况下版本号智能调配,是单元格拔出 时的期间戳。
5)HBase 中的数据都是字节,没有类型定义详细的数据对象(由于系统须要顺应不同 类型的数据格局和数据源,不能预先严厉定义形式)。
这里须要留意的是,HBase 也是基于 HDFS,所以也具备自动 3 个正本、数据冗余的特 点。此外 HBase 也是应用 WAL 的特点来保障数据读写的分歧性。
2.存储
HBase 驳回列式存储方式启动数据的存储。传统的相关型数据库关键是驳回行式存储 的方式启动数据的存储,数据读取的特点是依照行的粒度从磁盘上读取数据记载,然后根 据实践须要的字段数据启动处置,假设表的字段数量较多,然而须要处置的字段较少(特 别是聚合场景),由于行式存储的底层原理,依然须要以行(全字段)的方式启动数据的查 询。在这个环节中,运行程序所发生的磁盘 I/O、内存要求以及网络 I/O 等都会形成肯定的 糜费;而列式存储的数据读取方式关键是依照列的粒度启动数据的读取,这种按需读取的 方式缩小了运行程序在数据查问时所发生的磁盘 I/O、内存要求以及网络 I/O。
此外,由于相反类型的数据被一致存储,因此在数据紧缩的环节中紧缩算法的选择以 及效率将会进一步增强,这也进一步降低了散布式计算中关于资源的要求。
列式存储的方式更适宜 OLAP 型的运行场景,由于这类场景具备数据量较大以及查问字段较少(往往都是聚合类函数)的特点。例如最近比拟火的 ClickHouse 也是经常使用列式存储的方式启动数据的存储。
五、Spark及Spark Streaming
Spark 由 Twitter 公司开发并开源,处置了海量数据流式剖析的疑问。Spark 首先将数据 导入 Spark 集群,然后经过基于内存的治理方式对数据启动极速扫描,经过迭代算法成功 全局 I/O 操作的最小化,到达优化全体处置性能的目的。这与 Hadoop 从“计算”找“数据” 的成功思绪是相似的,通常实用于一次性写入屡次查问剖析的场景。
Spark Streaming 是基于 Spark 的一个流式计算框架,它针对实时数据启动处置和控制, 并可以将计算之后的结果写入 HDFS。它与当下比拟火的实时计算框架 Flink 相似,然而二者在实质上是有区别的,由于 Spark Streaming 是基于微批量(Micro-Batch)的方式启动数据处置,而非一行一行地启动数据处置。
关于作者:
李杨,资深数据架构师,在数据相关畛域有10年以上上班阅历。头部保险资管公司科技平台买卖系统团队开发组担任人,担任多个运行以及数据平台的树立、优化以及迁徙上班。曾担任某数据公司技术合伙人,担任多个金融机构的数据仓库或数据平台相关的上班。《企业级数据架构:**因素、架构模型、数据治理与平台搭建》作者。