初识Spark

146 阅读3分钟

一.Spark的四大特性

1. 速度快

Spark比MapReduce快的原因

  • MapReduce是简单粗暴地将作业分成Map和Reduce两部分,而Spark更加细腻,它可以将前一个Reduce和后一个Map连接起来(减少对HDFS的操作),形成一个更高效的模型,减少作业调度的次数,所以速度更快。
  • Spark有限使用内存进行数据存储,除非内存不够用了。

2. 易用

就是可以通过 java/scala/python/R/SQL 等不同语言快速去编写 spark 程序

3. 通用性

其实可以理解为 Spark 已经形成了自己的一个生态,其内部包含了许多模块

SparkSQL:通过sql去做离线分析
SparkStreaming:解决实时计算用的
Mlib:机器学习的算法库
Graphx:图计算方面的

4. 兼容性

spark程序就是一个计算逻辑程序,这个任务要运行就需要计算资源(内存、cpu、磁盘),哪里可以给当前这个任务提供计算资源,就可以把spark程序提交到哪里去运行

二、Spark架构

1. Driver

它会执行客户端写好的main方法,它会构建一个名叫 SparkContext 对象。该对象 是所有spark程序的执行入口

2. Cluster Manager

给 Spark 程序提供外部计算资源的服务,一般来说有以下3种

  1. standAlone:Spark 自带的集群模式,整个任务的资源分配由 Spark 集群的老大 master 负责
  2. Yarn:可以把 Spark 提交到 Yarn 中运行,此时资源分配由 Yarn 中的老大 ResourceManager 负责
  3. mesos:Apache开源的一个类似于 Yarn 的资源调度平台

正常来说我们都会使用 Yarn 去进行管理

3. Worker Node

Master是整个spark集群的老大,负责任务资源的分配。也就是 Spark 集群中负责干活的小弟,是负责任务计算的节点

4. Executor

Executor 是一个进程,它会在worker节点启动该进程(计算资源)

5. Task

spark任务是以task线程的方式运行在worker节点对应的executor进程中

三、Spark使用方法

1. Spark如何提交应用

普通方式提交

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.3.3.jar \
10

--class:指定包含main方法的主类

--master:指定spark集群master地址

--executor-memory :指定任务在运行的时候需要的每一个executor内存大小

--total-executor-cores: 指定任务在运行的时候需要总的cpu核数

数字 10 表示程序的入口参数

spark-shell方式提交

Spark 的 shell 作为一个强大的交互式数据分析工具,可以在里面直接写sql进行处理,非常方便。

直接启动bin目录下的spark-shell

./spark-shell --master spark://master:7077 --executor-memory 1G --total-executor-cores 2

2. Spark的提交流程

所谓的提交流程,其实就是我们开发人员根据需求写的应用程序通过 Spark 客户端提交给 Spark 运行环境执行计算的流程。在不同的部署环境中,这个提交过程基本相同。一般会有两种部署执行的方式:Client和Cluster。两种模式主要区别在于:Driver 程序的运行节点位置

Client 模式将用于监控和调度的 Driver 模块在客户端执行,Cluster模式的在 Yarn 中。

3. Spark启动时的几个重要参数

--num-executors配置 Executor 的数量
--executor-memory配置每个 Executor 的内存大小
--executor-cores配置每个 Executor 的虚拟 CPU core 数量