一、数据存储
HDFS
分布式文件系统,但是一般不会将数据存储到文件系统中
HBase
基于HDFS的分布式NOSQL数据库
二、通用计算
MapReduce
面向批处理的分布式计算框架,相对于Spark更慢(主要慢在Map到Reduce中间的Shuffle阶段,因为大量的与磁盘进行交互)
一种编程模式:MapReduce程序分为Map(映射)阶段和Reduce(化简)阶段
Map:分而治之,并行运算;移动计算,而非移动数据
适用场景
- 适合海量的离线批注
- 数据统计,如:网站的pv、uv统计
- 搜索引擎构建索引
- 海量数据查询
- 复杂数据分析算法实现
不适用场景
- OLAP,要求毫秒/秒级返回结果
- 流计算,流计算的输入数据是动态的,而MapReduce是静态的
- DAG计算(有向无环图)。但是spark适合做DAG
Spark
加州大学伯克利分校的AMP实验室开源
相对于MapReduce,计算起来更快一些。最大的特点就是快,所有数据放到内存中计算(快的原因),设计的时候就是对标MapReduce
Spark Core:核心计算框架。Spark SQL/Spark Streaming都会转换成Spark Core
Spark是基于RDD(弹性分布式数据集)计算的
Spark框架是通过Scala语言开发的,使用Scala做Spark开发更顺畅
三、资源管理
Yarn
分布式资源管理系统
MapReduce/Spark在调用数据存储节点的时候,就是通过Yarn实现。Yarn和存储是一一对应的关系
四、数据分析
Hive
但是上面直接使用起来很不好用,实际的数据分析过程中,有很多工具,比如Hive,就会把SQL转换成底层的MapReduce/Spark。也就是Hive转换成通用计算
Hadoop生态圈
生态圈包含三个组件:HDFS、MapReduce、Yarn(2.x开始支持)
Spark生态圈
Spark Sql会把SQL转换为Spark任务
Spark Streaming做流计算的
ElasticSearch
独立开发,做搜索与检索的。数据存储到ElasticSearch后,可以做一些模糊查询/精确匹配/语意匹配
五、Zookeeper
分布式的协调服务,大数据都是依赖于Zookeeper
六、任务调度
大数据集群中的任务调度、计算任务 Oozie/Azkaban
七、kafaka
结构化数据是通过OGG/CDC监控数据库日志的形式,监控数据变化,然后更新到kafaka中