我在使用sparkstreaming的时候遇见了一个奇怪的现象:spark进行reduce等计算的时候只是使用了其中的一部分excutor,并且很规律的是这些excutor都是在一台机子上,不清楚这是什么原因,有人遇见过这种情况吗吗,一起讨论一下?

解决方案 »

  1.   

    是你数据都来自于这台机吧?你可以尝试reparation后cache。然后在cache后的rdd/dataset上进行后续操作
      

  2.   

    不是的,我的数据来自kafka完全不是同一台机子,同时我也进行了reparation,因为kafka上面有只四个分区,所以我就将RDD分区数目调高到了36,不是单单是分区数目影响的,我尝试将所有数据分到0区,有时候还是能正常分配,所以跟分区数应该关系不是太大
      

  3.   

    不是的,我的数据来自kafka完全不是同一台机子,同时我也进行了reparation,因为kafka上面有只四个分区,所以我就将RDD分区数目调高到了36,不是单单是分区数目影响的,我尝试将所有数据分到0区,有时候还是能正常分配,所以跟分区数应该关系不是太大
    是指你从kafka读取数据的receiver是一台机子。另外关键是cache,而不是reparation。cache可以在spark内部设置最多2个的数据分区副本,也就是理论上会把数据分布到每台机子(只要分区数够分配)。sparkStreaming的receiver,本质也是一个executor。对于一个流的RDD,这executor的机器,就是数据来源机。
      

  4.   

    不是的,我的数据来自kafka完全不是同一台机子,同时我也进行了reparation,因为kafka上面有只四个分区,所以我就将RDD分区数目调高到了36,不是单单是分区数目影响的,我尝试将所有数据分到0区,有时候还是能正常分配,所以跟分区数应该关系不是太大
    是指你从kafka读取数据的receiver是一台机子。另外关键是cache,而不是reparation。cache可以在spark内部设置最多2个的数据分区副本,也就是理论上会把数据分布到每台机子(只要分区数够分配)。sparkStreaming的receiver,本质也是一个executor。对于一个流的RDD,这executor的机器,就是数据来源机。
    昨天忘了说了,其实我是有过reparation后cache的,因为后面有两个地方会用到这个rdd,因此我进行了cache
      

  5.   

    楼主好。我也遇到了这个问题,所有的task全部都集中到了一台机器上,但是确定是数据在多台机器上的。
      

  6.   

    楼主好,我也遇到了这个问题,所有的job都集中到了一台机器上算,但是数据是在多台机器上的。请问楼主怎么解决了。
      

  7.   

    问题已经解决了,通过查看work的错误日志发现,slave节点与主节点netty通信出现了异常,然后查看SPARK_CLASSPATH路径下的netty相关的jar包冲突了。去掉一个就好了。