大數(shù)據(jù)看了一段時間叹坦,發(fā)現(xiàn)大數(shù)據(jù)是架構(gòu)學(xué)習(xí)一個必須學(xué)習(xí)的領(lǐng)域。大數(shù)據(jù)是面向數(shù)字化領(lǐng)域的基礎(chǔ)設(shè)施卑雁,底層是分布式為基礎(chǔ)募书,或者說分布式為本質(zhì);是一種不同的思維模式测蹲,有自己的理論基礎(chǔ)和發(fā)展脈絡(luò)莹捡,典型的如Google的三架馬車論文,每個經(jīng)典的開源組件下都有若干理論論文支撐扣甲;大數(shù)據(jù)是個龐大的技術(shù)棧篮赢,開源組件中提供了對于人工智能等前沿的支撐。需要開始學(xué)習(xí)琉挖,長遠(yuǎn)積累启泣。
spark和flink是兩個經(jīng)典的大數(shù)據(jù)流批一體框架,先選擇spark示辈,因為spark的領(lǐng)域更早寥茫,上手更簡單。現(xiàn)在先從helloworld入手
安裝
選擇的unbuntu系統(tǒng)顽耳,安裝java和scala坠敷,因為spark是用scala編寫的妙同,所以要安裝好scala的環(huán)境。
sudo apt install openjdk-11-jre-headless
sudo apt install scala
然后到spark官網(wǎng)下載
http://spark.apache.org/downloads.html
到本地解壓設(shè)置環(huán)境變量
tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz
設(shè)置環(huán)境變量spark安裝目錄下的bin目錄到.prifile膝迎,執(zhí)行source .proile讓設(shè)置生效
spark-shell --version
檢查是否安裝好
helloworld的例子
準(zhǔn)備一個文件粥帚,隨意一個英文文章就可以
在spark-shell交互界面下輸入腳本代碼
import org.apache.spark.rdd.RDD
val file: String = s"/temp/test.txt"
// 讀取文件內(nèi)容
val lineRDD: RDD[String] = spark.sparkContext.textFile(file)
// 以行為單位做分詞
val wordRDD: RDD[String] = lineRDD.flatMap(line => line.split(" "))
val cleanWordRDD: RDD[String] = wordRDD.filter(word => !word.equals(""))
// 把RDD元素轉(zhuǎn)換為(Key,Value)的形式
val kvRDD: RDD[(String, Int)] = cleanWordRDD.map(word => (word, 1))
// 按照單詞做分組計數(shù)
val wordCounts: RDD[(String, Int)] = kvRDD.reduceByKey((x, y) => x + y)
// 打印詞頻最高的5個詞匯
wordCounts.map{case (k, v) => (v, k)}.sortByKey(false).take(5)
如上代碼看起來非常眼熟限次,在erlang學(xué)習(xí)的時候?qū)W習(xí)函數(shù)式編程芒涡,最經(jīng)典的三件套是 map/filter/falt,這里的代碼就和函數(shù)式的界面接口一樣卖漫,非常簡單易懂费尽。
這個代碼使用的是Spark RDD的API,這里RDD是一個數(shù)據(jù)集操作的抽象羊始,按照函數(shù)式的理解旱幼,這些flatmap、filter突委、map柏卤、reduceByKey每個操作返回的都是一個高階函數(shù),都沒有發(fā)生真正的計算匀油,只有最后一步take的時候真正發(fā)生計算缘缚。
小結(jié)
一個spark的helloword還是非常簡單,但是要學(xué)習(xí)的內(nèi)容還非常多敌蚜,特別是雖然這里封裝了非常簡單易用的接口桥滨,但是接口低下的分布式計算怎么發(fā)生的?還有那些其它原理弛车,值得好好探究學(xué)習(xí)齐媒。