这是我参与「第四届青训营 」笔记创作活动的的第5天
1.Spark基础入门
1.1什么是Spark
Spark是用于大规模数据处理的统一分析引擎
1.2Spark生态圈
Spark Core:内核
Spark SQL:用于处理结构化数据的组件,类似Hive
Spark Streaming:用于处理流式数据的组件,类似Storm
Spark MLLib:机器学习
Spark Graphx: 图计算
1.3Spark的特点与MapReduce对比
Spark的特点:
1.基于内存,所以速度快,但同时也是缺点,因为Spark没有对内存进行管理,容易OOM(out of memory内存溢出),可以用Java Heap Dump对内存溢出问题进行分析 2.可以使用Scala、Java、Python、R等语言进行开发 3.兼容Hadoop
Spark与MapReuce对比
1.MapReduce最大的缺点,Shuffle过程中会有很多I/O开销,可以看到这里有6个地方会产生IO,而Spark只会在1和6的地方产生I/O,其他的过程都在内存中进行
2.Spark是MapReduce的替代方案,兼容Hive、HDFS、融入到Hadoop
2.Spark体系结构与安装部署
2.1Spark体系结构
1.主从架构:存在单点故障的问题,因此需要实现HA
2.Spark体系结构图
Driver Program可以理解为是客户端,而右边的可以理解为服务器端。 Cluster Manager是主节点,主节点并不负责真正任务的执行,任务的执行由Worker Node完成。
这是一张更详细的架构图
如果要搭建全分布模式,至少需要两个worker 要实现HA的话,则必须借助ZooKeeper
2.2Spark的安装与部署
Spark伪分布模式的部署
解压 tar -zxvf spark-2.2.0-bin-hadoop2.6.tgz -C ~/training/
注意:由于Hadoop和Spark的脚本有冲突,设置环境变量的时候,只能设置一个
核心配置文件: conf/spark-env.sh
export JAVA_HOME=/root/training/jdk1.8.0_144
export SPARK_MASTER_HOST=bigdata111
export SPARK_MASTER_PORT=7077
从节点的地址:slaves文件中填入主机名即可,注意hosts文件里要有对ip的解析
启动Spark集群 sbin/start-all.sh,这里我个人是给这个文件做了一个软链接start-spark.sh,因为hadoop下的启动脚本也是start-all.sh,会有冲突
Web界面:主机名:8080
Spark全分布模式的部署
全分布式的部署与伪分布式类似,在每个节点上都解压压缩包,修改conf/spark-env.sh 在主节点上的slaves文件中填入从节点的主机名 然后在每个节点上启动集群即可