25.大数据学习之旅——Spark集群模式安装&Spark架构原理

本文详细介绍了Spark集群的安装步骤,包括配置spark-env.sh和slaves文件,以及启动和连接Spark集群的方法。讲解了Spark架构,重点阐述了Driver Program、SparkContext、Executor和Task的角色,以及DAGScheduler和TaskScheduler的任务调度。还深入讨论了Spark的Shuffle过程,包括Hash和Sort两种Shuffle Write的实现及优缺点,并列举了影响Shuffle性能的相关配置参数。最后,提到了RDD的容错机制、持久化策略和广播变量、计数器等共享变量的使用,以及如何解决数据倾斜问题。
摘要由CSDN通过智能技术生成

实现步骤:
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程序运行架构图。
在这里插入图片描述

  1. Driver Program
    用户编写的Spark程序称为Driver Program。每个Driver程序包含一个代表集群环境的
    SparkContext对象,程序的执行从Driver程序开始,所有操作执行结束后回到Driver程序
    中,在Driver程序中结束。如果你是用spark shell,那么当你启动 Spark shell的时候,系统
    后台自启了一个 Spark 驱动器程序,就是在Spark shell 中预加载的一个叫作 sc 的
    SparkContext 对象。如果驱动器程序终止,那么Spark 应用也就结束了。
  2. SparkContext对象
    每个Driver Program里都有一个SparkContext对象,职责如下:
    1)SparkContext对象联系 cluster manager(集群管理器),让 cluster manager 为
    Worker Node分配CPU、内存等资源。此外, cluster manager会在 Worker Node 上启动
    一个执行器(专属于本驱动程序)。
    2)和Executor进程交互,负责任务的调度分配。
  3. 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调度模块
概述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值