1. 程式人生 > >RDD工作機制例項詳解

RDD工作機制例項詳解

RDD工作機制

RDD指的是一個只讀的,可分割槽的分散式資料集,這個資料集的全部或部分可以快取在記憶體中,在多次計算間重用,是Spark進行大資料處理計算的核心,在設計演算法的時候,就是在設計RDD的操作,那麼下面通過WordCount例項來詳細介紹RDD的工作機制。關於RDD的特性和理論請參考“Spark 入門文件”。

1、在介紹RDD工作原理之前再回顧一下WordCount的例子:

   第一步:建立saprk的配置物件SparkConf

          val conf = new SparkConf()

          conf.setAppName("My First Spark App!").setMaster("local")

   第二步:建立SparkContext物件

          val sc  = new SparkContext(conf)

   第三步:根據具體資料來源(HDFS,Hbase等)通過SparkContext來建立RDD

          val lines = sc.textFile(“hdfs://{檔案路徑}/ helloSpark.txt”)

   第四步:將每行字元拆分為單個單詞

          val words = lines.flatMap { line =>line.split(" ") }

   第五步:在單詞拆分的基礎上對每個單詞例項計數為1

          val pairs = lines.map{word => (word, 1)}

   第六步:在每個單詞例項為1的基礎之上統計每個單詞出現的總次數

          val wordcount = pairs.reduceByKey(_+_)

   第七步:輸出統計結果

wordcount.foreach(wordNumberPair=> println(wordNumberPair._1 + ":" + wordNumberPair._2))

sc.stop()

2、根據上述的程式圖解spark RDD中資料流動過程

補充說明:第一張圖主要描述的是RDD的transformation,第二張圖描述的是action。在第一張圖中hadoopRDD的方塊內的資料1,資料2,資料3表示把檔案系統中helloSpark.txt檔案的內容分到了三個工作節點上去。(helloSpark.txt檔案內容有四行每行分別是:helloSpark ;hello scala;hello Hadoop ; hello flink。)在第一張圖中所有的map操作都是在各自自己的節點上進行的計算,當執行reduceBykey操作是進行了shuffle通訊,收集各個節點上的資料然後進行單詞統計。最後一個RDD是為儲存結果而準備的。在shuffleRDD中只有兩個節點這個是由分割槽策略決定的,具體需要深入學習。