分享

sprakstreaming多个app同时运行资源问题

dlh 发表于 2015-12-18 09:50:05 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 11 18550
我之前测试验证的时候都是一个app把所有core都占用,现在我要很多个app同时跑,这样每个app占用的core就很少了。而且是这些app大部分时间都在空跑,用户一般只会同时给一个app传数据处理。比如我集群上有128个core,我跑8个app,每个app才能使用16个core。用户实际上每次给一个app传数据的时候只有16个core来处理数据。怎么让每个app都能占用128个core

已有(11)人评论

跳转到指定楼层
regan 发表于 2015-12-18 12:37:05
本帖最后由 regan 于 2015-12-18 12:38 编辑

    每一个Driver在使用./spark-submit脚本提交的时候,都会向master注册,在Master中,master知道集群中所有的资源(核,内存等),根据各个节点资源情况,将Driver launch到某一个节点(资源满足运行要求),在该节点上运行Driver程序,这个Driver程序占用了多少个核,多少内存都在master得到跟踪并记录,下一个Driver向master注册的时候,master将会根据集群剩下的资源来判断是否加载该Driver。
   如你所说,你有8个app,每个app都占用了一定的核,该占用情况在master得到记录,要想再分配到核那是办不到了。除非你每次只运行一个app,一个app运行完了停用后再调度另一个app。
   你其实可以写一个脚本,轮询调度app到集群中运行,要想运行另一个app,需要先停掉该app,启动另一个运行,这样每个app可得到集群中所有的资源(处理核)
回复

使用道具 举报

dlh 发表于 2015-12-18 13:34:20
regan 发表于 2015-12-18 12:37
每一个Driver在使用./spark-submit脚本提交的时候,都会向master注册,在Master中,master知道集群中所 ...

用户要求数据处理延迟很低1s内,每个app关掉启动都比较耗时,每个得7、8秒。用户不可接受。所以我才用spark streaming。
回复

使用道具 举报

regan 发表于 2015-12-18 14:07:21
dlh 发表于 2015-12-18 13:34
用户要求数据处理延迟很低1s内,每个app关掉启动都比较耗时,每个得7、8秒。用户不可接受。所以我才用spa ...

那你那8个app都是不同的app吗?处理不同的业务吗?

回复

使用道具 举报

regan 发表于 2015-12-18 14:13:36
dlh 发表于 2015-12-18 13:34
用户要求数据处理延迟很低1s内,每个app关掉启动都比较耗时,每个得7、8秒。用户不可接受。所以我才用spa ...

你可以把这几个app逻辑写在一个Driver里面啊,每一个逻辑在windowDuration时间窗口到达时,一起提交,这样你每次同时执行多个job,每一个job就是执行你一个app中的全部逻辑,这样多个job同时提交就相当于你多个app在集群上运行了。
      写成一个driver的好处就是你可以把集群中所有核分配给该Driver运行,而每一次job的提交都会执行你那8个app的处理逻辑(8个job)

回复

使用道具 举报

dlh 发表于 2015-12-21 14:52:59
regan 发表于 2015-12-18 14:13
你可以把这几个app逻辑写在一个Driver里面啊,每一个逻辑在windowDuration时间窗口到达时,一起提交,这 ...

我按照你说的意思试了试。出现这个问题:我提交间隔是500ms,17个job同时跑,每个job空跑一次需要3秒,一下子延时就变成3秒了,不可接受,这个正常么?
回复

使用道具 举报

dlh 发表于 2015-12-21 15:07:10
regan 发表于 2015-12-18 14:13
你可以把这几个app逻辑写在一个Driver里面啊,每一个逻辑在windowDuration时间窗口到达时,一起提交,这 ...

还有一个延伸的问题:我发现不管有没有给app传数据,app都会把整个处理流程跑一边,能不能在处理数据的第一步就判断没数据后边的转换和行为都不执行,这样就能省一些资源
回复

使用道具 举报

regan 发表于 2015-12-21 15:43:10
本帖最后由 regan 于 2015-12-21 15:49 编辑
dlh 发表于 2015-12-21 15:07
还有一个延伸的问题:我发现不管有没有给app传数据,app都会把整个处理流程跑一边,能不能在处理数据的第 ...

每一次都会执行完整的业务逻辑,这是不可避免的,数据量少了,开销自然少,空跑的话,也不会废多少资源,只是有一些调度开销。因为action触发的时候才会触发作业的提交,其他transaction操作都是懒操作,只有action操作触发之后,才会实际运行前面的transaction,运行的时候DAG已经划分好,也就是说必定会执行

回复

使用道具 举报

regan 发表于 2015-12-21 15:51:13
本帖最后由 regan 于 2015-12-21 15:58 编辑
dlh 发表于 2015-12-21 14:52
我按照你说的意思试了试。出现这个问题:我提交间隔是500ms,17个job同时跑,每个job空跑一次需要3秒,一 ...

sparkStreaming是一个准时是的流处理框架,没有达到那么高的实时性,如果你追求实时,storm在这方面比sparkStreaming快。还有就是,不一定提交的时间间隔越短性能就越好,你要考虑到系统整体的配置,在500ms内是否作业都已经完成,如果没有完成,那么你下一次提交的作业必须排队等待,等前一批作业执行完了才会执行。时间间隔是一个性能优化的一个选项之一,可以视情况适当放宽
回复

使用道具 举报

dlh 发表于 2015-12-21 17:08:56
regan 发表于 2015-12-21 15:51
sparkStreaming是一个准时是的流处理框架,没有达到那么高的实时性,如果你追求实时,storm在这方面比spa ...

非常感谢,我还是得想办法在优化优化,storm我也尝试过,storm运行起来对内存和cpu开销相比spark streaming要高很多,尤其是资源有限的情况下,对系统稳定行威胁很大
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条