Spark大數據處理 之 動手寫WordCount


Spark是主流的大數據處理框架,具體有啥能耐,相信不需要多說。我們開門見山,直接動手寫大數據界的HelloWorld:WordCount。

先上完整代碼,看看咋樣能入門。

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object WordCount {
  def main(args: Array[String]) {
    val conf = new SparkConf()
    conf.setAppName("WordCount")
    val sc = new SparkContext(conf)

    val file = "hdfs://127.0.0.1:9000/file.txt"
    val lines = sc.textFile(file)
    val words = lines.flatMap(_.split("\\s+"))
    val wordCount = words.countByValue()

    println(wordCount)
  }
}

寥寥10多行代碼,就已經完成了,比大家想象的要簡單,完全看不出大數據背后的存儲,分布式,容錯處理,這就是Spark給我們帶來的福利。

接下來我們逐步解析其中的核心概念。

Spark上下文

Spark集群的執行單位是Application,任何提交的任務都會產生一個Application。一個Application只會關聯上一個Spark上下文,也就是SparkContext。構建SparkContext時可以傳入Spark相關配置,也就是SparkConf,它可以用來指定Application的名稱,任務需要的CPU核數/內存大小,調優需要的配置等等。

val conf = new SparkConf()
conf.setAppName("WordCount")
val sc = new SparkContext(conf)

這三行語句創建了一個Spark上下文,並且運行時這個Application的名字就叫WordCount。

彈性分布式數據集RDD

Spark中最主要的編程概念就是彈性分布式數據集 (resilient distributed dataset,RDD),它是元素的集合,划分到集群的各個節點上,可以被並行操作。RDD的創建可以從HDFS(或者任意其他支持Hadoop文件系統) 上的一個文件開始,或者通過轉換Master中已存在的Scala集合而來。

val file = "hdfs://127.0.0.1:9000/file.txt"
val lines = sc.textFile(file)

這兩行語句從hdfs文件中創建了叫lines的RDD,它的每個元素就對應文件中的每一行,有了RDD我們就可以通過它提供的各種API來完成需要的業務功能。

RDD提供的API分為兩類:轉換(Transformation)和動作(Action)。

轉換

顧名思義,轉換就是把一個RDD轉換成另一個RDD。當然,光是拷貝產生一個新的RDD是沒有太大意義的,這里的轉換實際上是RDD中元素的映射和轉換。有一點必須要注意的是,RDD是只讀的,一旦執行轉換,一定會生成一個新的RDD。

val words = lines.flatMap(_.split("\\s+"))

flatMap是RDD眾多轉換中的一種,它的功能是把源RDD中的元素映射成目的RDD中的0個或者多個元素。上面語句把以文本行為元素的RDD轉換成了以單個單詞為元素的RDD。

動作

“動作”就不好望文生義了,可以簡單地理解成想要獲得結果時調用的API。

val wordCount = words.countByValue()

countByValue就是一個“動作”,它的功能是統計RDD中每個元素出現的次數,最終得到一個元素及其出現次數的Map。

那究竟哪些API是轉換,哪些是動作呢?有個很簡單的判斷准則:

提示:返回結果為RDD的API是轉換,返回結果不為RDD的API是動作。

運行

要運行Spark任務,首先要把代碼打成JAR包,額。。。這個不需要多言。

打包后,就只需在Spark集群上以命令行的方式用spark-submit提交就OK。

spark-submit --class "demo.WordCount" SparkDemo-1.0-SNAPSHOT.jar

其中demo.WordCount是main函數所在的ojbect,而SparkDemo-1.0-SNAPSHOT.jar就是打出來的jar包。

大數據處理,就這樣入門了。

下一篇文章我們將來探討WordCount是如何在集群中運行的,Spark究竟隱藏了些什么魔法。

推薦

動手寫Count

從WordCount看Spark大數據處理的核心機制(1)

從WordCount看Spark大數據處理的核心機制(2)

RDD粗粒度轉換的威力

查看《Spark大數據處理》系列文章,請進入YoyaProgrammer公眾號,點擊 核心技術,點擊 Spark大數據處理。

分類 Spark大數據處理

優雅程序員 原創 轉載請注明出處

圖片二維碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM