您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Spark的基本概念是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Apache Spark是專為大規模數據處理而設計的快速通用的計算引擎。目前已經形成一個高速發展應用廣泛
的生態系統。
Apache Spark特性:
1,快速
大多數操作均在內存中迭代,只有少部分函數需要落地到磁盤。
2,易用性
支持scala、Java、Python、R等語言;提供超過80個算子,API使用及其方便。
3,通用性
Spark提供了針對數據處理的一站式解決方案,計算時用Spark Core算子(替代Hadoop Map/Reduce)
,批處理時用Spark SQL(替代HiveSQL),實時計算用Spark Streaming(替代Stom),機器學習用
Spark MLlib(替代Mahout);另外,通過Spark GraphX進行圖計算。
4,跨平臺
Spark可以使用Local模式,Standalone模式,Cluster模式運行。
Local模式:在本地運行調試,支持斷點,可以指定并行線程數。
Standalone模式:Spark管理資源,有Master和Worker,相當于ResourceManager和NodeManager。
Cluster模式:分布式模式,用于生產環境。資源管理器使用Yarn或者Mesos。
Spark的適用場景
目前大數據處理場景有以下幾個類型:
復雜的批量處理(Batch Data Processing),偏重點在于處理海量數據的能力,至于處理速度可忍受,通常的時間可能是在數十分鐘到數小時;
基于歷史數據的交互式查詢(Interactive Query),通常的時間在數十秒到數十分鐘之間
基于實時數據流的數據處理(Streaming Data Processing),通常在數百毫秒到數秒之間
Spark成功案例
目前大數據在互聯網公司主要應用在金融、廣告、報表、推薦系統等業務上。在廣告業務方面需要大數據做應用分析、效果分析、定向優化等,在推薦系統方面則需要大數據優化相關排名、個性化推薦以及熱點點擊分析等。這些應用場景的普遍特點是計算量大、效率要求高。 騰訊 / 小米 / 淘寶 / 優酷土豆
Scala介紹
Scala 是一門多范式(multi-paradigm)的編程語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。Scala 運行在Java虛擬機上,并兼容現有的Java程序。
特性
1,面向對象
Scala是一種純面向對象的語言,每個值都是對象。對象的數據類型以及行為由類和特質(trait)描述。
2,函數式編程
Scala也是一種函數式語言,其函數也能當成值來使用。Scala提供了輕量級的語法用以定義匿名函數,支持高階函數,允許嵌套多層函 數,并支持柯里化。Scala的case class及其內置的模式匹配相當于函數式編程語言中常用的代數類型。
3,靜態類型
Scala具備類型系統,通過編譯時檢查,保證代碼的安全性和一致性。
4,并發性
Scala使用Actor作為其并發模型,Actor是類似線程的實體,通過郵箱發收消息。Actor可以復用線程,因此可以在程序中可以使用數百萬個Actor,而線程只能創建數千個。在2.10之后的版本中,使用Akka作為其默認Actor實現。
函數式編程
函數式編程是種編程方式,它將電腦運算視為函數的計算。函數編程語言最重要的基礎是λ演算(lambda calculus),而且λ演算的函數可以接受函數當作輸入(參數)和輸出(返回值)。
特性
1,函數是第一等公民
函數編程支持函數作為第一類對象,有時稱為閉包或者仿函數(functor)對象。
2,惰性計算
在惰性計算中,表達式不是在綁定到變量時立即計算,而是在求值程序需要產生表達式的值時進行計算。延遲的計算使您可以編寫可能潛在地生成無窮輸出的函數。
3,支用表達式不用語句
"表達式"(expression)是一個單純的運算過程,總是有返回值;"語句"(statement)是執行某種操作,沒有返回值。函數式編程要求,只使用表達式,不使用語句。也就是說,每一步都是單純的運算,而且都有返回值。
sc.thriftParquetFile(fileStr, classOf[SomeClass], force = true).filter(infor => infor.classId == CLASSID_REPAY).persist(StorageLevel.DISK_ONLY)
4,沒有"副作用"
所謂"副作用"(side effect),指的是函數內部與外部互動(最典型的情況,就是修改全局變量的值),產生運算以外的其他結果。
函數式編程強調沒有"副作用",意味著函數要保持獨立,所有功能就是返回一個新的值,沒有其他行為,尤其是不得修改外部變量的值。
RDD(Resilient Distributed Datasets),彈性分布式數據集,它是對分布式數據集的一種內存抽象,通過受限的共享內存方式來提供容錯性,同時這種內存模型使得計算比傳統的數據流模型要高效。RDD具有5個重要的特性,如下圖所示:
1.一組分區,數據集的基本組成單位。
2.計算每一個數據分區的函數。
3.對parent RDD的依賴,這個依賴描述了RDD之間的lineage(血統)。
4.可選,對于鍵值對RDD,有一個Partitioner(通常是HashPartitioner,RangePartitioner)。
5.可選,一組Preferred location信息(例如,HDFS文件的Block所在location信息)。
Spark對數據的處理過程包括輸入、運行轉換、輸出等過程,而這些過程在Spark中以算子的形式定義。 算子是RDD中定義的函數,可以對RDD中的數據進行轉換和操作。
從大方向來說,Spark算子大致可以分為以下兩類:
1)Transformation 變換/轉換算子:這種變換并不觸發提交作業,完成作業中間過程處理。
Transformation 操作是延遲計算的,也就是說從一個RDD 轉換生成另一個 RDD 的轉換操作不是馬上執行,
需要等到有 Action 操作的時候才會真正觸發運算。
按照處理數據的結構類型,Transformation算子又可以分為以下兩類:
a)Value數據類型的Transformation算子,這種變換并不觸發提交作業,針對處理的數據項是Value型數據
b)Key-Value數據類型的Transformation算子,這種變換并不觸發提交作業,針對處理的數據項是
Key-Value型的數據對。
2)Action行動算子:這類算子會觸發SparkContext提交Job作業。
Action 算子會觸發 Spark 提交作業(Job),并將數據輸出 Spark系統。
1)Value型數據類型的Transformation算子 A)輸入分區與輸出分區一對一型 a) map算子 b) flatMap算子 c) mapPartitions算子 d) glom算子 B)輸入分區與輸出分區多對一型 a) union算子 b) cartesian算子 C)輸入分區與輸出分區多對多型 a) groupBy算子 D)輸出分區為輸入分區子集型 a) filter算子 b) distinct算子 c) subtract算子 d) sample算子 e) takeSample算子 E)Cache型 a) cache算子 d) persist算子 2)Key-Value型數據類型的Transformation算子 A)輸入分區與輸出分區一對一型 a) mapValues算子 B)對單個RDD聚集 a) combineByKey算子 b) reduceByKey算子 c) partitionBy算子 C)對兩個RDD聚集 a) Cogroup算子 D)連接 a) join算子 b) leftOutJoin算子 c) rightOutJoin算子 3)Action算子 A)無輸出 a) foreach算子 B)HDFS a) saveAsTextFile算子 b) saveAsObjectFile算子 C)集合和數據類型 a) collect算子 b) collectAsMap算子 c) reduceByKeyLocally算子 d) lookup算子 e) count算子 f) top算子 g) reduce算子 h) fold算子 i) aggregate算子 4)數據加載的Transformation算子 A)文件讀取 a) textFile算子 B)內存生成 a) makeRDD算子 b) parallelize算子
1)map: 對RDD中的每個元素都執行一個指定的函數類(映射)產生一個新的RDD。任何原RDD中的元素在新RDD中都有且只有一個元素與之對應。當然map也可以把Key元素變成Key-Value對。
2)flatMap:將原來 RDD 中的每個元素通過函數 f 轉換為新的元素,并將生成的 RDD 的每個集合中的元素合并為一個集合。
3) mapPartiions:map是對rdd中的每一個元素進行操作,而mapPartitions (foreachPartition)則是對rdd中的每個分區的迭代器進行操作mapPartitions效率比map高的多。mapPartitions函數獲取到每個分區的迭代器,在函數中通過這個分區整體的迭代器對整個分區的元素進行操 作。
4) glom:將分區元素轉換成數組。
5) union:相同數據類型RDD進行合并,并不去重。
6)cartesian:對RDD內的所有元素進行笛卡爾積操作
7) groupBy:將元素通過函數生成相應的 Key,數據就轉化為 Key-Value 格式,之后將 Key 相同的元素分為一組。
8)filter:對RDD元素進行過濾操作
9)distinct:對RDD中的元素去重操作
10)subtract:RDD間進行減操作,去除相同數據元素(去掉含有重復的項)
11)sample:對RDD元素進行采樣操作,獲取所有元素的子集(按照比例隨機抽樣)
12)takesample:上面的sample函數是一個原理,不同的是不使用相對比例采樣,而是按設定的采樣個數進行采樣
1)mapValues:(對Value值進行變換)原RDD中的Key保持不變,與新的Value一起組成新的RDD中的元素。因此,該函數只適用于元素為KV對的RDD。即針對(Key, Value)型數據中的 Value 進行 Map 操作,而不對 Key 進行處理。
2)combineByKey:(按key聚合)相當于將元素為 (Int, Int) 的 RDD轉變為了 (Int,Seq[Int]) 類型元素的 RDD。
3)reduceByKey:reduceByKey 是比 combineByKey 更簡單的一種情況,只是兩個值合并成一個值,即相同的key合并value。
4)partitionBy:按key值對RDD進行重新分區操作。
5)cogroup:按key值聚集操作。
6)join:按key值聯結。
1)foreach:循環遍歷每一個元素。
2)saveAsTextFile:將最終的結果數據以文本格式保存到指定的HDFS目錄中
3)saveAsObjectFile:將最終的結果數據以二進制文件格式保存到指定的HDFS目錄中
4)collect:收集元素
5)collectAsMap: 收集key/value型的RDD中的元素
6)reduceByKeyLocally:實現的是先reduce再collectAsMap的功能,先對RDD的整體進行reduce操作,然后再收集所有結果返回為一個HashMap
7)lookup:查找元素,對(Key,Value)型的RDD操作,搜索指定Key對應的元素
8)count:計算元素個數
9)top:top(n)尋找值最大的前n個元素
10)reduce:通過函數func先聚集各分區的數據集,再聚集分區之間的數據,func接收兩個參數,返回一個新值,新值再做為參數繼續傳遞給函數func,直到最后一個元素
11)fold:合并
12)aggregateByKey:采用歸并的方式進行數據聚合操作,這種聚集是并行化的,通過key進行聚合。
看完上述內容,你們對Spark的基本概念是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。