spark streaming 写hdfs问题

spark streaming 里面在做 foreach 操作时要注意数据与节点与进程「jvm」之间的关系;「这一点往往大家比较容易混淆」

我总结了一下,供大家参考

dstream.foreachRDD { rdd =>
     do something.....// 在driver内执行
     rdd.foreach { recordsinworker =>
         do something // 在worker上执行 「作用域是一个node」
               }
    rdd.foreachPartition{ recordsintask =>
         do someting // 在task上执行 「作用域是一个进程一个jvm」
              }

}

所以如果你的spark streaming code 在 dstream.foreachrdd 里面直接处理业务数据就是把所有的数据都拉到driver端进行处理,

1:dirver的生命周期是伴随程序的,也就是说它会固定在某个节点运行

2:   hdfs client 读写优先local

这样就会导致数据在当前节点肯定会有一份,从而导致数据分散不开。


你可能感兴趣的:(spark)