柚子快報(bào)激活碼778899分享:Spark編程基礎(chǔ)
柚子快報(bào)激活碼778899分享:Spark編程基礎(chǔ)
目錄
一,Spark設(shè)計(jì)與運(yùn)行原理
1,Spark簡(jiǎn)介
2,Spark與Hadoop對(duì)比
二,Spark運(yùn)行架構(gòu)
1,RDD設(shè)計(jì)與運(yùn)行原理
方法1.parallelize()
方法2.makeRDD()
方法3.通過HDFS文件創(chuàng)建 RDD
方法4.通過 Linux 本地文件創(chuàng)建 RDD
2,RDD方法歸納
1.使用map()方法轉(zhuǎn)換數(shù)據(jù)?
2.使用 sortBy()方法進(jìn)行排序??
?3.使用flatMap()方法轉(zhuǎn)換數(shù)據(jù)?
4.使用take()方法查詢某幾個(gè)值??
?5.使用union()方法合并多個(gè)RDD?
6.使用distinct()方法進(jìn)行去重??
3, 使用簡(jiǎn)單的集合操作?
?(1)intersection()方法?
?(2)subtract()方法?
(3)cartesian()方法??
任務(wù)實(shí)現(xiàn):?
三,Spark快速上手
?1,創(chuàng)建Maven項(xiàng)目
(1)增加Scala插件?
(2)增加依賴關(guān)系?
?(3)WordCount
(4)異常處理
四,Spark運(yùn)行環(huán)境?
1,Local模式
上傳并解壓縮文件
啟動(dòng)local環(huán)境
命令行工具?
退出本地模式
提交應(yīng)用
五,Spark運(yùn)行架構(gòu)
1,運(yùn)行架構(gòu)
2,核心概念
(1)Executor與Core
一,Spark設(shè)計(jì)與運(yùn)行原理
1,Spark簡(jiǎn)介
Spark 是一種基于內(nèi)存的快速、通用、可擴(kuò)展的大數(shù)據(jù)分析計(jì)算引擎
特點(diǎn):運(yùn)行速度快、容易使用、通用性、運(yùn)行模式多樣
2,Spark與Hadoop對(duì)比
Hadoop存在的缺點(diǎn):
表達(dá)能力有限 ,磁盤IO開銷大 ,延遲高
Spark優(yōu)點(diǎn):
編程模型更靈活,迭代運(yùn)算效率更高,任務(wù)調(diào)度機(jī)制更優(yōu)
二,Spark運(yùn)行架構(gòu)
1,RDD設(shè)計(jì)與運(yùn)行原理
創(chuàng)建RDD
方法1.parallelize()
parallelizeO方法有兩個(gè)輸人參數(shù),說明如下: (1)要轉(zhuǎn)化的集合:必須是 Seq集合。Seq 表示序列,指的是一類具有一定長(zhǎng)度的、可迭代訪問的對(duì)象,其中每個(gè)數(shù)據(jù)元素均帶有一個(gè)從0開始的、固定的索引。 (2)分區(qū)數(shù)。若不設(shè)分區(qū)數(shù),則RDD 的分區(qū)數(shù)默認(rèn)為該程序分配到的資源的 CPU核心數(shù)。 通過 parallelizeO方法用一個(gè)數(shù)組的數(shù)據(jù)創(chuàng)建RDD,并設(shè)置分區(qū)數(shù)為4,創(chuàng)建后查看該 RDD 的分區(qū)數(shù)
方法2.makeRDD()
makeRDD0方法有兩種使用方式,第一種使用方式與 parallelize0方法一致;第二種方式是通過接收一個(gè) Seq[(T,Seq[String])]參數(shù)類型創(chuàng)建 RDD。第二種方式生成的RDD中保存的是T的值,Seq[String]部分的數(shù)據(jù)會(huì)按照 Seqf(T,Seq[String])的順序存放到各個(gè)分區(qū)中,一個(gè) Seq[Stringl對(duì)應(yīng)存放至一個(gè)分區(qū),并為數(shù)據(jù)提供位置信息,通過preferredLocations0方法可以根據(jù)位置信息查看每一個(gè)分區(qū)的值。調(diào)用 makeRDD0時(shí)不可以直接指定 RDD 的分區(qū)個(gè)數(shù),分區(qū)的個(gè)數(shù)與 Seq[String]參數(shù)的個(gè)數(shù)是保持一致的,使用 makeRDD0方法創(chuàng)建 RDD,并根據(jù)位置信息查看每一個(gè)分區(qū)的值
方法3.通過HDFS文件創(chuàng)建 RDD
這種方式較為簡(jiǎn)單和常用,直接通過 textFile()方法讀取 HDFS文件的位置即可。 在HDFS 的/user/toot 目錄下有一個(gè)文件test.txt,讀取該文件創(chuàng)建一個(gè) RDD
方法4.通過 Linux 本地文件創(chuàng)建 RDD
本地文件的讀取也是通過 sc.textFile("路徑")的方法實(shí)現(xiàn)的,在路徑前面加上“file://”表示從Linux 本地文件系統(tǒng)讀取。在 IntelliJIDEA 開發(fā)環(huán)境中可以直接讀取本地文件;但在 spark-shell 中,要求在所有節(jié)點(diǎn)的相同位置保存該文件才可以讀取它,例如,在Linux的/opt 目錄下創(chuàng)建一個(gè)文件 test.txt,任意輸入4行數(shù)據(jù)并保存,將 test.txt 文件遠(yuǎn)程傳輸至所有節(jié)點(diǎn)的/opt 目錄下,才可以讀取文件 test.txt。讀取 test.txt 文件,并且統(tǒng)計(jì)文件的數(shù)據(jù)行數(shù)
2,RDD方法歸納
1.使用map()方法轉(zhuǎn)換數(shù)據(jù)
2.使用 sortBy()方法進(jìn)行排序?
?3.使用flatMap()方法轉(zhuǎn)換數(shù)據(jù)
4.使用take()方法查詢某幾個(gè)值?
?5.使用union()方法合并多個(gè)RDD
6.使用distinct()方法進(jìn)行去重?
3, 使用簡(jiǎn)單的集合操作
?(1)intersection()方法
?(2)subtract()方法
(3)cartesian()方法?
任務(wù)實(shí)現(xiàn):?
三,Spark快速上手
?1,創(chuàng)建Maven項(xiàng)目
(1)增加Scala插件
(2)增加依賴關(guān)系?
? ? 修改Maven項(xiàng)目中的POM文件,增加Spark框架的依賴關(guān)系
?(3)WordCount
? ?為了能直觀地感受Spark框架的效果,接下來我們實(shí)現(xiàn)一個(gè)大數(shù)據(jù)學(xué)科中最常見的教學(xué)案例? ? ? ? ?WordCount
/**
* spark實(shí)現(xiàn)單詞計(jì)數(shù)
*/
object WordCountSpark {
def main(args: Array[String]): Unit = {
//創(chuàng)建spark運(yùn)行配置對(duì)象
val spark: SparkConf = new SparkConf()
.setMaster("local[*]")
.setAppName("WordCountSparkApps")
//創(chuàng)建spark上下文對(duì)象
val sc: SparkContext = new SparkContext(spark)
//讀文件數(shù)據(jù)
val wordsRDD: RDD[String] = sc.textFile("data/word.txt")
//講文件中的數(shù)據(jù)進(jìn)行分詞
val word: RDD[String] = wordsRDD.flatMap(_.split(","))
//轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)word ---->(word,1)
val word2: RDD[(String, Int)] = word.map((_, 1))
//將轉(zhuǎn)換結(jié)構(gòu)后的數(shù)據(jù)按照相同的單詞進(jìn)行分組聚合
val word2CountRDD: RDD[(String, Int)] = word2.reduceByKey(_ + _)
//將數(shù)據(jù)聚合結(jié)果采集到內(nèi)存中
val word2Count: Array[(String, Int)] = word2CountRDD.collect()
//打印結(jié)果
word2Count.foreach(println)
//關(guān)閉spark連接
sc.stop()
}
}
(4)異常處理
如果本機(jī)操作系統(tǒng)是Windows,在程序中使用了Hadoop相關(guān)的東西,比如寫入文件到HDFS,則會(huì)遇到如下異常:
出現(xiàn)這個(gè)問題的原因,并不是程序的錯(cuò)誤,而是windows系統(tǒng)用到了hadoop相關(guān)的服務(wù),解決辦法是通過配置關(guān)聯(lián)到windows的系統(tǒng)依賴就可以了?
在IDEA中配置RunConfiguration,添加HADOOP_HOME變量或者在windows上配置環(huán)境變量:?
四,Spark運(yùn)行環(huán)境?
1,Local模式
上傳并解壓縮文件
(1)上傳文件至/usr/local/packages中
(2)解壓縮到指定目錄?
[root@master local]# tar -zxvf spark-2.4.5-bin-hadoop2.6.tgz -C /usr/local/soft/
(3)重命名?
[root@master soft]# mv spark-2.4.5-bin-hadoop2.6/ spark-local
啟動(dòng)local環(huán)境
(1)進(jìn)入解壓縮(spark-local)目錄
(2)啟動(dòng)成功后,可以輸入網(wǎng)址進(jìn)行Web UI監(jiān)控頁(yè)面訪問?
命令行工具?
sc.textFile("data/word.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).collect
退出本地模式
scala> :quit?
提交應(yīng)用
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[1] \
./examples/jars/spark-examples_2.11-2.4.5.jar \
10
五,Spark運(yùn)行架構(gòu)
1,運(yùn)行架構(gòu)
Spark框架的核心是一個(gè)計(jì)算引擎,整體來說,它采用了標(biāo)準(zhǔn)master-slave的結(jié)構(gòu)。如下圖所示,它展示了一個(gè) Spark 執(zhí)行時(shí)的基本結(jié)構(gòu)。圖形中的Driver表示 master,負(fù)責(zé)管理整個(gè)集群中的作業(yè)任務(wù)調(diào)度。圖形中的Executor則是 slave,負(fù)責(zé)實(shí)際執(zhí)行任務(wù)。
2,核心概念
(1)Executor與Core
柚子快報(bào)激活碼778899分享:Spark編程基礎(chǔ)
相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。