spark学习三

sparkStandalone

集群资源管理和任务调度的框架(类似mapreduce)

主节点:Master

从节点:Worker

spark Application运行的过程

spark程序包含2部分(Driver和Executor都是JVM进程)

Driver program:程序Main,创建sparkContext对象

Executor s:相当于线程池(有很多线程,每个线程可以运行一个Task,需要1core cpu)

spark历史服务器

spark也有历史服务器,监控已经运行完成的spark application

start-history-server.sh

如何实现的:将application运行的日志信息保存起来(MapReduce运行的时候,启动了日期聚集功能:将日志信息 上传到HDFS目录),启动一个服务读取日志信息,以便前端页面展示(MrHistoryServer)

数据倾斜

hive中某个MapReduce程序可能出现数据倾斜的问题

解决问题的具体方案

第一个阶段:局部聚合
在key上添加指定返回的随机数

第二个阶段
将key前缀随机数给删除

spark性能优化

(1)相邻2个Map可以合并

(2)top N ,可以在各个分区先进行topn
例:找出年级前三,如果你还是班里第四,跟你没关系

(3)聚合函数

spark application运行Yarn上

过程:
1.启动Yarn集群

  • ResourceManager/nodeManager
  • 向Yarn集群提交应用,找到的是ResourceManager服务(8032),告知应用运行RM的运行的主机。

2.配置spark
配置文件:conf/spark-env.sh
配置内容:
JAVA_HOME
SCALA_HOME
HADOOP_CONF_DIR
提交应用的时候,将会去读取该目录下所有的属性文件
-a.HDFS集群的位置,读写HDFS数据
-b.Yarn集群的位置,提交应用到Yarn上运行。

3.提交应用

部署模式(决定Driver运行在哪里)

–deploy-mode DEPLOY_MODE

Whether to launch the driver program locally (“client”)
or
on one of the worker machines inside the cluster (“cluster”)

(Default: client).

(1)client(默认值)

  • 表示Driver程序(JVM进程)运行在本地客户端,不是运行在集群的从节点上(worker或Nodemanager)
  • 本地提交之后,可以看到相关日志的输出
  • 官方给我们提供spark-shell 只能运行在client端
  • 在交互式命令行中编写代码,就相当于*.scala文件中main方法的代码

(2)cluster

  • 表示将Driver进程运行在集群的从节点上,就是运行在worker或者Nodemanager

spark on yarn架构
在这里插入图片描述

job调度(面试题,重点)

整个程序sparkContext调度的

DAGScheduler
DAG调度:就是调度stage
DAG:有向无环图
每个job划分为多个stage(阶段)
a)倒推法划分 -栈
从Job的最后一个RDD向前推依赖关系
b)判定子RDD和父RDD之间的依赖关系
宽依赖,产生shuffle,划分stage

TaskScheduler
task的调度
调度各个Stage中Task的执行,按照从前往后顺序执行stage中的task即可,
task放到executor中执行。

stage分成2种

  • shuffleMapStage
    除去最后一个Stage中其他stage
    每个stage中的task产生的结果,类似于MapTask一样
  • resultStage
    job 中的最后一个,产生结果数据,类似于MapReduce中reduceTask
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值