spark原理

yarn 资源动态调度和资源共享

运行多种作业(spark MapReduce)运行在yarn上的两个角色(application master 程序 worker资源,worker数量就是excutor数量)

 

spark

一个程序只有一个driver(application master集成driver yarncluster模式 yarnclient模式则是运行在client端) excutor运行task

 

 

HDFS无法进行修改,如果有修改的需求可以进行追加。

 

stage划分由shuffle进行划分的。

 

shuffle 相同的key的值shuffle到同一个分区,减少每个机器的数量。hash的思想就是散列。混洗的作用。对key进行hash取模进行分发。

 

 

merge sort 归并排序

 

 

1Tb数据 1g内存进行排序 每个小文件内部为有序。

presto整个流程是在内存中的,因此比较耗费资源,但是快。

 

 

物理上是每一行执行完一个stage内所有算子,stage与stage之间会有落盘(优化的话可以放在内存中,数据量足够小的时候)。

 

reducebykey可以指定并行度

colese分区数只能减少,因为没有shuffle。repartition可以输入任何分区数,可以减少也可以增加。

 

 

core数量对应task的数量

action操作对应一个job,job顺序执行。

 

 

task>=excutor 避免资源浪费

 

shuffle write端是要做排序的shuffle read不做排序。

 

 

jobhistoryserver 启动才可以看日志历史记录

 

 

fsck 可以查看block数量

 

如何确定excutor大小,多尝试,期待的运行时间

 

excutor中task不均匀,task如果比较少,stage执行分先后的

 

stage skip掉是由于有的stage已经执行过,shuffle时候已落盘可以重用。

 

 

 

推测执行 ( 写数据库时候 和 数据倾斜 不适用)

 

 

数据倾斜解决方案:对倾斜的key加随机数后缀,打散后重新分布,最后map把后缀去掉

 

输入本身不均匀就可以用repatition减轻倾斜(轮询),如果shuffle操作之后就不适用了。

 

存储与计算分离

 

 

 

bin/spark-submit \

  --master yarn-cluster \

 --class org.training.spark.core.Java8WordCount\

  --name "Java8WordCount"\

  --driver-memory 1g \

  --executor-memory 1g \

  --executor-cores 1 \

  --num-executors 2 \

/home/bigdata/datasource/AuraSparkTraining-1.0-SNAPSHOT-jar-with-dependencies.jar\

/data/Hamlet.txt /data/input

 

 

 

调优:

colesce 可以减少task数量,repatition不可以。尽量避免使用repatition

避免使用笛卡尔积,容易造成数据膨胀。

join什么时候不需要shuffle?

 

core的数量不是越多越好,多了反而资源浪费。

并行执行的时候的时候rdd就不能共享了。并行执行可以提高集群资源利用率。

 

hdfs fsck blocks 查看block的分

 

查看sparkjob运行情况前必须要启动 Hadoop 下的 ./mr-jobhistory-daemon.sh start historyserver

同时要启动spark下 ./start-history-server.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值