Hadoop和Spark

99 阅读2分钟

image.png

一、数据存储

HDFS

分布式文件系统,但是一般不会将数据存储到文件系统中

HBase

基于HDFS的分布式NOSQL数据库

二、通用计算

MapReduce

面向批处理的分布式计算框架,相对于Spark更慢(主要慢在Map到Reduce中间的Shuffle阶段,因为大量的与磁盘进行交互)

一种编程模式:MapReduce程序分为Map(映射)阶段和Reduce(化简)阶段

Map:分而治之,并行运算;移动计算,而非移动数据

适用场景
  1. 适合海量的离线批注
  2. 数据统计,如:网站的pv、uv统计
  3. 搜索引擎构建索引
  4. 海量数据查询
  5. 复杂数据分析算法实现
不适用场景
  1. OLAP,要求毫秒/秒级返回结果
  2. 流计算,流计算的输入数据是动态的,而MapReduce是静态的
  3. 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中