一些大数据概念理解
关于 Hadoop
首先 Hadoop 是一个开源软件框架、一个大数据处理(存储/计算)平台,核心组件包括 HDFS(一个分布式文件系统)、MapReduce(一种编程模型,Hadoop 将其实现)、YARN(资源调度器)。
客户端提交一个任务(这个任务实际是一个 jar 包,包里面 class 满足 MapReduce 的约束,同时会指定需要访问的 HDFS 集群、文件路径等信息),资源管理器将该任务调度到 MapReduce 集群,然后 MapReduce 集群执行任务(这时候访问到 MapReduce 集群)。MapReduce 逻辑上和 HDFS 是两个集群,物理上通常是一个集群,方便数据传输,关于数据本地化等内容略过,不影响理解。
值得注意的是,MapReduce 既是一种思想模型,也是 Hadoop 的一个核心组件(同名),应该是因为 Hadoop 最早实现。
关于 Hive 和 Spark
Hive 是基于 Hadoop 平台实现的数据仓库。前面提到使用 Hadoop 处理大数据需要编写 MapReduce 任务,成本非常高,所以诞生了 Hive,Hive 在更上层提供了 HSQL 作为处理大数据的“接口”,然后把 HSQL 转换成 MapReduce 任务,这样降低了用户使用成本。
前面提到 MapReduce 和 HDFS 都是 Hadoop 的核心组件,但是他们并没有耦合关系,可以独立存在,即 MapReduce 的数据源可以不是 HDFS,HDFS 只是一个文件系统,只提供文件系统的功能,也不感知/执行各种计算逻辑。Hive 默认使用 HDFS 作为存储层,使用 MapReduce 做计算,但是并不是必须的,也可以使用别的存储系统(很少见,可能有兼容问题),也可以使用其他的分布式计算框架,常见的如 Spark。
Spark 是一个和 MapReduce 处于同级的分布式计算框架/平台,但是有一些区别(性能、易用性等方面),总的来说比 MapReduce 好使,这里不详细展开。
关于数据库系统分类
一种泛化的计算机系统分类
计算机系统有 3 钟:
- 批处理系统,不需要实时返回结果,比如 ETL、数据备份任务等,看重系统吞吐量。一般不会发生 CPU 切换。
- 分时系统,如多用户使用一台计算机,需要把 CPU 资源分时调度,看重交互性能,不能让用户明显卡顿。一般按照时间切片分配 CPU。
- 实时系统,如 Redis、各种在线服务,看重 RT,必须要快。一般更倾向于使用超时、优先级等机制分配 CPU。
OLAP、OLTP
数据库可以分为 OLAP、OLTP 两大类(以及 OLHP,两者混合的意思),都属于实时系统的范畴,毕竟数据库增删改查用户角度来说都是希望快点返回的,OLTP 更偏向少量数据处理、简单查询场景,实时性、可靠性、并发性都更好,OLAP 更偏向于复杂分析查询和分析报表生成等。
Hive 既是 OLAP 系统(分析查询),也是批处理系统(ETL 任务),感觉这些边界也没有特别明确的定义,不过 Hive 的主要能力是复杂查询,所以说他是 OLAP 系统也没问题,理解就好。。。
个人是互联网后端的,对于 MySQL、Tair、Redis、ES 等都相对熟悉,就不列出来,写些不熟悉的。
Hive、Hbase、Doris
都是应对海量数据存储的分布式数据库,但是 HBase 是 OLTP 的、列式的、KV 的,Hive 是 OLAP 的、行式的,Doris 是 OLHP 的,行式的,能力上来说 Doris 非常强悍,可以替代 Hive、HBase 甚至 ES。