Spark分布式计算原理

目录

  • 一、RDD依赖与DAG原理
    • 1.1 RDD的转换

一、RDD依赖与DAG原理

        Spark根据计算逻辑中的 RDD的转换与动作生成 RDD的依赖关系,同时这个计算链也形成了逻辑上的 DAG。

1.1 RDD的转换

e.g.(以wordcount为例)

package spark

import org.apache.spark.{SparkConf,SparkContext}

object WordCount{
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[1]")

    val sc = new SparkContext(conf)

    val rdd = sc.textFile("hdfs://192.168.182.130:9000/test/word.txt")

    val result=rdd.flatMap(_.split("\\s")).map((_, 1)).reduceByKey(_ + _)
	result.collect().foreach(println)
	println("--------------------------")
    println(result.toDebugString)

  }
}
"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" ...
(scala,2)
(hadoop,1)
(python,2)
(word,2)
(hello,2)
(class,1)
(java,1)
--------------------------
(1) ShuffledRDD[4] at reduceByKey at WordCount.scala:18 []
 +-(1) MapPartitionsRDD[3] at map at WordCount.scala:18 []
    |  MapPartitionsRDD[2] at flatMap at WordCount.scala:18 []
    |  hdfs://192.168.182.130:9000/test/word.txt MapPartitionsRDD[1] at textFile at WordCount.scala:16 []
    |  hdfs://192.168.182.130:9000/test/word.txt HadoopRDD[0] at textFile at WordCount.scala:16 []

Process finished with exit code 0
  • 首先从HDFS中读取文件,产生一个HadoopRDD;然后进行RDD转换,转换结果为MapPartitionsRDD。也就是说,rdd实际上是一个MapPartitionsRDD,其父RDD是HadoopRDD;
  • flatMap操作将 lines中的所有行,以空格切分 ,然后返回一个单词列表,以每个单词为元素的列表保存到新的 MapPartitionsRDD;
  • 将第二行生成的MapPartitionsRDD再次经过map操作将每个单词 word转化为 (word,1)的二元组,返回一个新的 MapPartitionsRDD包含这些元组;
  • reduceByKey操作会生成一个ShuffledRDD;
  • collect动作将提交Job开始执行,到此Application结束;

Tips:result.toDebugString”实现了上述 RDD转换过程的验证


PS:如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!

原创作者:wsjslient

作者主页:https://blog.csdn.net/wsjslient


你可能感兴趣的:(#,Spark,apache,spark,spark)