实现步骤:
1)上传解压spark安装包
2)进入spark安装目录的conf目录
3)配置spark-env.sh文件
配置示例:
#本机ip地址
SPARK_LOCAL_IP=hadoop01
#spark的shuffle中间过程会产生一些临时文件,此项指定的是其存放目录,不配置默认是在
/tmp目录下
SPARK_LOCAL_DIRS=/home/software/spark/tmp
export JAVA_HOME=/home/software/jdk1.8
4)在conf目录下,编辑slaves文件
配置示例:
hadoop01
hadoop02
hadoop03
5)配置完后,将spark目录发送至其他节点,并更改对应的 SPARK_LOCAL_IP配置
启动集群
1)如果你想让01 虚拟机变为master节点,则进入01 的spark安装目录的sbin目录
执行: sh start-all.sh
2)通过jps查看各机器进程,
01:Master +Worker
02:Worker
03:Worker
3)通过浏览器访问管理界面
http://192.168.234.11:8080
4)通过spark shell 连接spark集群
进入spark的bin目录
执行:sh spark-shell.sh --master spark://192.168.234.11:7077
6)在集群中读取文件:
sc.textFile("/root/work/words.txt")
默认读取本机数据 这种方式需要在集群的每台机器上的对应位置上都一份该文件 浪费磁盘
7)所以应该通过hdfs存储数据
sc.textFile(“hdfs://hadoop01:9000/mydata/words.txt”);
注:可以在spark-env.sh 中配置选项 HADOOP_CONF_DIR 配置为hadoop的etc/hadoop的地址 使默认
访问的是hdfs的路径
注:如果修改默认地址是hdfs地址 则如果想要访问文件系统中的文件 需要指明协议为file 例如
sc.text(“file:///xxx/xx”)
集群模式运行WordCount
实现步骤
1)创建spark的项目
在scala中创建项目 导入spark相关的jar包
2)开发spark相关代码
代码示例:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object WordCountDriver {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setMaster(“spark://hadoop01:7077”).setAppName(“wordcount”)
val sc=new SparkContext(conf)
val data=sc.textFile(“hdfs://hadoop01:9000/words.txt”, 2)
val result=data.flatMap { x => x.split(" ") }.map { x => (x,1) }.reduceByKey(+)
result.saveAsTextFile(“hdfs://hadoop01:9000/wcresult”)
}
}
3)将写好的项目打成jar,上传到服务器,进入bin目录
执行:spark-submit --class cn.tedu.WordCountDriver /home/software/spark/conf/wc.jar
Spark架构
概述
为了更好地理解调度,我们先来鸟瞰一下集群模式下的Spark程序运行架构图。
- Driver Program
用户编写的Spark程序称为Driver Program。每个Driver程序包含一个代表集群环境的
SparkContext对象,程序的执行从Driver程序开始,所有操作执行结束后回到Driver程序
中,在Driver程序中结束。如果你是用spark shell,那么当你启动 Spark shell的时候,系统
后台自启了一个 Spark 驱动器程序,就是在Spark shell 中预加载的一个叫作 sc 的
SparkContext 对象。如果驱动器程序终止,那么Spark 应用也就结束了。 - SparkContext对象
每个Driver Program里都有一个SparkContext对象,职责如下:
1)SparkContext对象联系 cluster manager(集群管理器),让 cluster manager 为
Worker Node分配CPU、内存等资源。此外, cluster manager会在 Worker Node 上启动
一个执行器(专属于本驱动程序)。
2)和Executor进程交互,负责任务的调度分配。 - cluster manager 集群管理器
它对应的是Master进程。集群管理器负责集群的资源调度,比如为Worker Node分配CPU、
内存等资源。并实时监控Worker的资源使用情况。一个Worker Node默认情况下分配一个
Executor(进程)。
从图中可以看到sc和Executor之间画了一根线条,这表明:程序运行时,sc是直接与
Executor进行交互的。
所以,cluster manager 只是负责资源的管理调度,而任务的分配和结果处理它不管。
4.Worker Node
Worker节点。集群上的计算节点,对应一台物理机器
5.Worker进程
它对应Worder进程,用于和Master进程交互,向Master注册和汇报自身节点的资源使用情
况,并管理和启动Executor进程
6.Executor
负责运行Task计算任务,并将计算结果回传到Driver中。
7.Task
在执行器上执行的最小单元。比如RDD Transformation操作时对RDD内每个分区的计算都会对应一个Task。
Spark调度模块
概述