- 浏览: 146882 次
- 性别:
- 来自: 北京
最新评论
-
isaiah282485068:
怎么不出书出来啊,市场上好却这方面的书啊
mule in action翻译1 : 第一部分 mule 核心
文章列表
spark-学习笔记--25 executor
- 博客分类:
- spark
Executor
1、反序列化 task 交给 executor 执行
2、org.apache.spark.executor.Executor 的方法:
def launchTask(context: ExecutorBackend,taskId:
Long,attemptNumber: Int,taskName: String,
serializedTask: ByteBuffer): Unit = {
val tr = new TaskRunner(context, taskId ...
TaskScheduler
1、stage创建 taskSet 提交给--> taskScheduler --> 分配给 executor 执行
2、org.apache.spark.scheduler.TaskSchedulerImpl 的 submitTasks 是入口
3、每个taskSet 创建一个 TaskSetManager对象--负责taskSet的监视管理
4、taskSchedulerImpl 的 resourceOffer 执行任务分配算法 将各个task 分配到executor上去
4.1 ...
DAGScheduler 的stage划分
/** org.apache.spark.scheduler.DAGScheduler 中的 submitStage
* 提交stage, 先提交缺失的父stage
*/
private def submitStage(stage: Stage) {
val jobId = activeJobForStage(stage)
if (jobId.isDefined) {
logDebug("submitStage(" + stage + ")&q ...
RDD 转换为 DataFrame--使用编程接口
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("PersonDataFrame");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContex ...
RDD 转换为 DataFrame--使用反射
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("PersonDataFrame");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new org.apache.spark.sql.SQ ...
spark SQL入门
进化: hive --> shark --> spark sql
hive--底层依赖于 MR --给熟悉sql的人用的
shark -- 依赖于hive sql解析器等 比hive快一个数量级
spark sql :
1、多数据源支持 : Hive RDD JSON JDBC
2、多种性能优化技术:
2.1 内存列存储
2.2 字节码生成技术
2.3 scala代码编写的优化
3、组件扩展:
dataFrame: 以列的方式组织
...
spark-学习笔记--19 stage划分
- 博客分类:
- spark
stage划分
窄依赖 -- 每个父RDD的partition 最多被子RDD的一个partition 使用
宽依赖 -- 多个子RDD 的partition 依赖于同一个父RDD的 partition
宽依赖 是 划分stage的依据
stage 划分 从触发 action的操作开始向前倒推 若是窄依赖 就是当前的stage 若是宽依赖 就是一个新的 stage
一个stage内部 每个partition都会被分配一个计算任务--task 这些task并行执行
stage之间的依赖关系变成了 大粒度的 DAG
t ...
spark1.3 worker解析
Driver:
DriverRunner 创建Driver工作目录、 将用户jar包下载到工作目录中
使用 ProcessBuilder 启动进程
对Driver的退出状态进行处理
DriverRunner 向他所属的worker 和 actor 发送一个 DriverStateChanged事件
worker 将DriverStateChanged事件 发送给 master ,master会进行状态改变处理
将Driver从本地缓存移除
...
spark1.3 资源调度
1、判断当前是否为alive master ,不是直接返回
2、取状态为alive的 worker 并随机打乱
3、首先调度Driver-- yarn-cluster模式下会执行
3.1 当前Driver还没启动的话 ,遍历所有活着的worker
3.2 若这个worker空闲内存 >= Driver需要的内存 并且 worker的空闲cpu数量 >= Driver需要的cpu数量 则 启动Driver
并将Driver从waitingDrivers队列移除
3.2.1 启动 ...
spark1.3 状态改变
Driver:
状态是 错误、完成、被杀掉、失败 将其从 缓存中移除,
向completedDriver中添加Driver,
设置Driver的state、exception ,
将Driver所在的worker移除driver
调用Schedule()方法
executor:
-->找到executor对应的 app
-->获取app的executors缓存中的executor信息
-->设置executor的当前状态
-->向Driver发送 executorUpdated消息 ...
master注册机制
1、worker注册
1.1 worker启动之后向master注册
1.2 master将状态为dead的worker过滤掉、将状态为unknown 的worker清理掉旧的worker信息 替换为新的worker信息
1.3 master把worker加入内存缓存中
1.4 master使用持久化引擎 将worker信息进行持久化
1.5 调用 Schedule() 方法
2、Driv ...
master的主备切换
主备切换:
1、基于文件系统
2、基于zookeeper
ActiveMaster 挂掉
--> standby master使用持久化引擎(FileSystemPersistenceEngine、ZookeeperPersistenceEngine)
读取:storedApps、storedDrivers、storedWorkers
--> storedApps、storedDrivers、storedWorkers 有非空的
--> 将使用持 ...
spark1.3 SparkContext执行过程
Spark-学习笔记--12 宽依赖与窄依赖
- 博客分类:
- spark
宽依赖与窄依赖
窄依赖:
是指父RDD的每个分区只被子RDD的一个分区所使用,
子RDD分区通常对应常数个父RDD分区(O(1),与数据规模无关)
宽依赖: 是指父RDD的每个分区都可能被多个子RDD分区所使用,
子RDD分区通常对应所有的父RDD分区(O(n),与数据规模有关)