一.大数据技术栈
如下图,当前的一个大数据技术栈:
![](https://img.haomeiwen.com/i2638478/cdf1f060369f92d1.png)
如上所示:
- 数据采集,一般通过Sqoop或Flume将关系型数据库数据同步到hadoop平台。
- 底层存储,采集到的数据存储在hdfs上,分布式进行存储。
- 资源调度,hadoop的资源调度就是yarn,用来协调各个集群节点的资源。
- 底层计算框架, 分MapReduce和Spark。
- 应用层,一般是BI自助分析
二.Spark概述
Apache Spark是一个用于大规模数据处理的统一分析引擎。它提供了Java、Scala、Python和R的高级api,以及支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX,以及用于增量计算和流处理的structured Streaming。
2.1 MapReduce框架局限性
MapReduce框架存在一些局限性
-
处理效率低效
1.1 Map 结果写磁盘,Reduce 写HDFS ,多个MR 之间通过HDFS 交换数据 ;
1.2 任务调度和启动开销大 ;
1.3 无法充分利用内存 -
不适合迭代计算(如机器学习 、 图计算等 ), 交互式处理(数据挖掘 )
-
不适合流式处理(点击日志分析 )
-
MapReduce编程不够灵活,仅支持Map 和Reduce 两种操作
2.2 Hadoop生态圈中的各种框架
批处理 :MapReduce 、Hive 、Pig
流式计算 :Storm
交互式计算 :Impala、presto
需要一种灵活的框架可同时进行批处理、流式计算、交互式计算。
于是引入了Spark计算引擎
2.3 Spark
2.3.1 Spark的优势
-
内存计算引擎 , 提供Cache 机制来支持需要反复迭代计算或者多次数据共享 , 减少数据读取的IO 开销
-
DAG 引擎 , 减少多次计算之间中间结果写到HDFS 的开销
-
使用多线程池模型来减少task 启动开稍 ,shuffle 过程中避免不必要的sort 操作以及减少磁盘IO
2.3.2 Spark特点
-
易用
提供了丰富的API , 支持Java ,Scala ,Python 和R 四种语言
R语言很少被用到,基本都是使用Java、Scala、Python来操作Spark代码量比MapReduce 少2~5 倍
-
与Hadoop 集成
读写HDFS/Hbase
与YARN 集成
2.3.3 SPRAK 2 新特性
- SparkSession:新的上下文入口,统一SQLContext和HiveContext
- dataframe与dataset统一,dataframe只是dataset[Row]的类型别名。由于Python是弱类型语言,只能使用DataFrame
- Spark SQL 支持sql 2003标准
- 支持ansi-sql
- 支持ddl命令
- 支持子查询:in/not in、exists/not exists
- 提升catalyst查询优化器的性能
网友评论