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究竟隱藏了些什么魔法。
推薦
查看《Spark大數據處理》系列文章,請進入YoyaProgrammer公眾號,點擊 核心技術,點擊 Spark大數據處理。
分類 Spark大數據處理
優雅程序員 原創 轉載請注明出處