Spark任务拆分-并发问题

现有的结构是Spark从HBase中提取数据,进行计算操作。

Spark的并发是由:

可用CPU核数*Worker数量,来确定上限的,这种情况针对于单节点。

并发数还受到RDD的分区数量影响的,说回Hbase的话,就是受到Region数影响,基本与其一致;

 

所以如果在HbaseConf中确定的Region数量只有1个的话,那么会出现Spark单线程执行的情况;

这个时候可以考虑使用coalesce方法来进行分区动作,但是这个方法需要注意的是,如果当前的分区数小于你期望的分区,单纯的使用coalesce加分区数的方法并没有什么用,需要强制进行shuffle动作。

coalesce(numPart,true)

此方式可有效进行分区动作,但是意味着大量的shuffle动作;

 

其实我理解可以Spark生成任务时,在外部进行任务拆分,例如按天,或者按年等;相较于在内部进行分区动作,可能不会出现shuffle的情况。

但是,如果你单个节点的并发数并不是很高的情况下,那么任务被派发到其它节点执行,而数据还是需要从另外节点来获取,其实跟shuffle的动作相差并不是太大,这个可以自行考虑;

 

 分区的数量可以设定为集群任务的最高值。

 

以上仅为个人浅见,欢迎大家讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值