Spark學習一:Spark概述

来源:https://www.cnblogs.com/chenxiaoge/archive/2019/07/24/11237927.html
-Advertisement-
Play Games

1.1 什麼是Spark ​ Apache Spark 是專為大規模數據處理而設計的 快速通用 的計算引擎。 ​ 一站式管理大數據的所有場景(批處理,流處理,sql) ​ spark不涉及到數據的存儲,只做數據的計算 ​ Spark是UC Berkeley AMP lab (加州大學伯克利分校的AM ...


1.1 什麼是Spark

​ Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。

​ 一站式管理大數據的所有場景(批處理,流處理,sql)

​ spark不涉及到數據的存儲,只做數據的計算

​ Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行計算框架,Spark擁有Hadoop MapReduce所具有的優點;

​ 但不同於MapReduce的是Job中間輸出結果可以保存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的演算法。

註意:spark框架不能替代Hadoop,只能替代MR,spark的存在完善了Hadoop的生態系統.

​ Spark是Scala編寫,方便快速編程。

​ 學習spark的三個網站
​ 1) http://spark.apache.org/
​ 2) https://databricks.com/spark/about
​ 3) https://github.com/apache/spark

​ 官網:http://spark.apache.org

  • Apache Spark™ is a fast and general engine for large-scale data processing.
  • Apache Spark is an open source cluster computing system that aims to make data analytics fast
  • both fast to run and fast to write

​ 目前,Spark生態系統已經發展成為一個包含多個子項目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子項目,Spark是基於記憶體計算的大數據並行計算框架。除了擴展了廣泛使用的
MapReduce 計算模型,而且高效地支持更多計算模式,包括互動式查詢和流處理。Spark 適用於各種各樣原先需要多種不同的分散式平臺的場景,包括批處理、迭代演算法、互動式查詢、流處理。通過在一個統一的框架下支持這些不同的計算,Spark 使我們可以簡單而低耗地把各種處理流程整合在一起。而這樣的組合,在實際的數據分析 過程中是很有意義的。不僅如此,Spark 的這種特性還大大減輕了原先需要對各種平臺分別管理的負擔。

​ 大一統的軟體棧,各個組件關係密切並且可以相互調用,這種設計有幾個好處:1、軟體棧中所有的程式庫和高級組件 都可以從下層的改進中獲益。2、運行整個軟體棧的代價變小了。不需要運 行 5 到 10 套獨立的軟體系統了,一個機構只需要運行一套軟體系統即可。系統的部署、維護、測試、支持等大大縮減。3、能夠構建出無縫整合不同處理模型的應用。

​ Spark的內置項目如下:
Spark的內置項目

  • Spark Core:實現了 Spark 的基本功能,包含任務調度、記憶體管理、錯誤恢復、與存儲系統交互等模塊。Spark Core 中還包含了對彈性分散式數據集(resilient distributed dataset,簡稱RDD)的 API 定義。
  • Spark SQL:是 Spark 用來操作結構化數據的程式包。通過 Spark SQL,我們可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)來查詢數據。Spark SQL 支持多種數據源,比如 Hive 表、Parquet 以及 JSON 等。
  • Spark Streaming:是 Spark 提供的對實時數據進行流式計算的組件。提供了用來操作數據流的 API,並且與 Spark Core 中的 RDD API 高度對應。
  • Spark MLlib:提供常見的機器學習(ML)功能的程式庫。包括分類、回歸、聚類、協同過濾等,還提供了模型評估、數據 導入等額外的支持功能。
  • 集群管理器:Spark 設計為可以高效地在一個計算節點到數千個計算節點之間伸縮計 算。為了實現這樣的要求,同時獲得最大靈活性,Spark 支持在各種集群管理器(cluster manager)上運行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自帶的一個簡易調度器,叫作獨立調度器。

1.2 Spark特點

與Hadoop的MapReduce相比,Spark基於記憶體的運算要快100倍以上,基於硬碟的運算也要快10倍以上。Spark實現了高效的DAG執行引擎,可以通過基於記憶體來高效處理數據流。計算的中間結果是存在於記憶體中的。

易用

Spark支持Java、Python和Scala的API,還支持超過80種高級演算法,使用戶可以快速構建不同的應用。而且Spark支持互動式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark集群來驗證解決問題的方法。

通用

Spark提供了統一的解決方案。Spark可以用於批處理(Spark Core)、互動式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不同類型的處理都可以在同一個應用中無縫使用。Spark統一的解決方案非常具有吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減少開發和維護的人力成本和部署平臺的物力成本。

相容性

Spark可以非常方便地與其他的開源產品進行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調度器,並且可以處理所有Hadoop支持的數據,包括HDFS、HBase和Cassandra等。這對於已經部署Hadoop集群的用戶特別重要,因為不需要做任何數據遷移就可以使用Spark的強大處理能力。Spark也可以不依賴於第三方的資源管理和調度器,它實現了Standalone作為其內置的資源管理和調度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。

1.3 Spark的用戶和用途

​ 我們大致把Spark的用例分為兩類:數據科學應用和數據處理應用。也就對應的有兩種人群:數據科學家和工程師。

數據科學任務

​ 主要是數據分析領域,數據科學家要負責分析數據並建模,具備 SQL、統計、預測建模(機器學習)等方面的經驗,以及一定的使用 Python、 Matlab 或 R 語言進行編程的能力。

數據處理應用

​ 工程師定義為使用 Spark 開發 生產環境中的數據處理應用的軟體開發者,通過對接Spark的API實現對處理的處理和轉換等任務。

1.4 Spark技術棧

Spark技術棧:HDFS,Hadoop,Hive,MR,Storm,SparkCore,SparkSQL,SparkStreaming

mesos相當於yarn 資源調度框架

tachyon基於記憶體:記憶體文件系統

HDFS存儲層(基於磁碟存儲 block存儲策略)

mesos資源調度/任務調度層

Spark SQL : 延遲應該在毫秒級別

Spark core:批處理 延遲度非常高

Spark streaming :流式處理 延遲5s左右

BlinkDB:支持精確度查詢的資料庫

SparkCore處理批數據

SparkSql使用SQL處理分散式數據

SparkStreaming處理流式數據

一站式管理大數據的所有場景(批處理,流處理,sql)

  • Spark Core:實現了 Spark 的基本功能,包含任務調度、記憶體管理、錯誤恢復、與存儲系統交互等模塊。Spark Core 中還包含了對彈性分散式數據集(resilient distributed dataset,簡稱RDD)的 API 定義。
  • Spark SQL:是 Spark 用來操作結構化數據的程式包。通過 Spark SQL,我們可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)來查詢數據。Spark SQL 支持多種數據源,比 如 Hive 表、Parquet 以及 JSON 等。
  • Spark Streaming:是 Spark 提供的對實時數據進行流式計算的組件。提供了用來操作數據流的 API,並且與 Spark Core 中的 RDD API 高度對應。
  • Spark MLlib:提供常見的機器學習(ML)功能的程式庫。包括分類、回歸、聚類、協同過濾等,還提供了模型評估、數據 導入等額外的支持功能。
  • 集群管理器:Spark 設計為可以高效地在一個計算節點到數千個計算節點之間伸縮計 算。為了實現這樣的要求,同時獲得最大靈活性,Spark 支持在各種集群管理器(cluster manager)上運行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自帶的一個簡易調度器,叫作獨立調度器。

1.5 Spark演變歷史

Spark 相比 hadoop歷史

  • 發展尤為迅速
  • Hadoop歷史2006~2017 11年時間
  • Spark2012~2017 5年時間

Spark是美國加州大學伯克利分校的AMP實驗室(主要創始人lester和Matei)開發的通用的大
數據處理框架
• 2009伯克利大學開始編寫最初的源代碼
• 2010年才開放的源碼
• 2012年2月發佈了0.6.0版本
• 2013年6月進入了Apache孵化器項目
• 2013年年中Spark的主要成員成立的DataBricks公司
• 2014年2月成為了Apache的頂級項目( 8個月的時間)
• 2014年5月底Spark1.0.0發佈
• 2014年9月Spark1.1.0發佈
• 2014年12月spark1.2.0發佈
• 2015年3月Spark1.3.0發佈
• 2015年6月Spark1.4.0發佈
• 2015年9月Spark1.5.0發佈
• 2016年1月Spark1.6.0發佈
• 2016年5月Spark2.0.0預覽版發佈
• 2016年7月Spark2.0.0正式版發佈
• 2016年12月Spark2.1.0正式版發佈
• 2017年7月Spark2.2發佈

1.6 Spark與MapReduce的區別

都是分散式計算框架,Spark基於記憶體,MR基於HDFS。Spark處理數據的能力一般是MR的十倍以上,Spark中除了基於記憶體計算外,還有DAG有向無環圖切分任務的執行先後順序。

spark不涉及到數據的存儲,只做數據的計算

spark與Hadoop MR不同的是,任務的中間結果可以保存到記憶體中,大大地提高了計算性能.

基於記憶體存儲

  • MR作業之間如果有依賴關係的話,每個作業都是從磁碟獲取數據,處理完成之後數據落盤。

    如:磁碟-MR作業-磁碟-MR作業-磁碟

  • Spark作業之間如果有依賴關係的話,spark程式處理完成之後可以將數據先存於記憶體中,不落盤,下一個spark程式就可以直接從記憶體中獲取數據然後進行處理

    如:磁碟-spark作業-記憶體-spark作業-記憶體-spark作業-磁碟

具體不同點

  1. Spark相比於MR處理數據是可以基於記憶體來處理數據的
  2. spark與Hadoop MR不同的是,任務的中間結果可以保存到記憶體中,大大地提高了計算性能.
  3. Spark中有DAG有向無環圖來切分任務的執行先後順序
  4. Spark存儲數據可以指定副本個數(持久化存儲),MR預設3個。
  5. spark中做了很多已有的運算元的封裝,提供了各種場景的運算元,而MR中只有map和reduce 相當於Spark中的map和reduceByKey兩個運算元
  6. Spark是粗粒度資源申請,Application執行快
  7. Spark中shuffle map端自動聚合功能,MR手動設置
  8. Spark中shuffle ByPass機制有自己靈活的實現

MR

Spark

1.7 Spark API

API就是用這些語言進行編碼的時候使用的方法

應用可以通過使用Spark提供的庫獲得Spark集群的計算能力,這些庫都是Scala編寫的,但是Spark提供了面向各種語言的API,例如Scala、 Python Java等, 所以可以使用以上語言進行Spark應用開發。

Spark的API主要由兩個抽象部件組成: SparkContext和RDD ,應用程式通過這兩個部件和Spark進行交互,連接到
Spark-集群並使用相關資源。

SparkContext

是定義在Spark庫中的一個類,作為Spark庫的入口。 包含應用程式main ()方法的Driver program通過SparkContext對象訪問Spark,因為SparkContext對象表示與Spark集群的一 個連接。每個Spark應用都有且只有一個激活的SparkContext類實例,如若需要新的實例,必須先讓當前實例失活。(在shell中SparkContext已經自動創建好,就是sc)

RDD基礎概念

  • 彈性分散式數據集(Resilient Distributed Dataset)
  • 並行分佈在整個集群中
    把指定路徑下的文本文件載入到ines這個RDD中,這個lines就是一個RDD, 代表是就是整個文本文件
  • RDD是Spark分發數據和計算的基礎抽象類
    例如: lines.count()
    在.count(的函數操作是在RDD數據集上的,而不是對某一具體分片
  • 一個RDD是一個不可改變的分散式集合對象
    就lines來說,如果我們對其所代表的源文件進行了增刪改操作,則相當於生成了一個新的RDD,來存放修改後的數據集
  • Spark中所有的計算都是通過RDD的創建、轉換,操作完成的
  • 一個RDD內部由許多partitions (分片)組成
    partitions:
    每個分片包括一部分數據, 分片可在集群不同節點上計算
    分片是Spark並行處理的單元,Spark順序的,並行的處理分片

1.8 Spark運行模式(部署模式)

  • Local

    在本地eclipse、IDEA中寫spark代碼運行程式,一般用於測試

  • Standalone

    spark自帶的資源調度框架(可以拋開hdfs,拋開yarn去運行),支持完全分散式集群搭建。Spark可以運行在standalone集群上

  • Yarn

    Hadoop生態圈裡面的一個資源調度框架,Spark也是可以基於Yarn來計算的。

    要基於Yarn來進行資源調度,必須實現AppalicationMaster介面,Spark實現了這個介面,所以可以基於Yarn。

  • Mesos

    運行在 mesos 資源管理器框架之上,由 mesos 負責資源管理,Spark 負責任務調度和計算,(很少用)

總結


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天遇到了,隨手記錄一下。 sql server 存儲數據裡面 NVARCHAR 記錄中文的時候是 一個中文對應一個字元串長度,記錄英文也是一個字母一個長度 標點符號也是一樣。 VARCHAR 記錄中文的時候一個中文對應兩個字元串長度,記錄英文是一個字母長度,標點符號空格的沒測。 優缺點暫時不列,記 ...
  • Redis部分 ...
  • "Hadoop集群搭建 05安裝配置YARN" "Hadoop集群搭建 04安裝配置HDFS " "Hadoop集群搭建 03編譯安裝hadoop" "Hadoop集群搭建 02安裝配置Zookeeper" "Hadoop集群搭建 01前期準備" 整個搭建hadoop集群的流程,包括 1. 前期準備 ...
  • MySQL部分 ...
  • 對於廣大剛剛接觸“圖數據分析”的用戶而言,一個十分具有迷惑性的問題是:圖資料庫和圖計算系統有什麼區別?今天,我們就從技術層面來簡單地說一說兩者的不同之處。 圖資料庫適合需要對子圖進行併發操作的場景;圖計算系統適合需要對全圖進行迭代式計算的場景。 圖計算系統 我們先從圖計算系統開始。 圖計算系統面向的 ...
  • mapreduce是一個運算框架,讓多台機器進行並行進行運算, 他把所有的計算都分為兩個階段,一個是map階段,一個是reduce階段 map階段:讀取hdfs中的文件,分給多個機器上的maptask,分文件的時候是按照文件的大小分的 比如每個maptask都會處理128M的文件大小,然後有個500 ...
  • 這一系列操作需要powerDesigner,PL/SQL工具 1、首先使用powerDesigner建立概念模型 2、概念模型界面例子 3、其中建立概念模型操作圖標詳解 4、建立物理模型 5、生成數據字典 6、生成sql語句 7、進入pl/sql工具建立表空間,賬戶,給賬戶賦許可權 8、將powerD ...
  • 安裝命令: 我的終端是zsh,所以添加環境變數到 之後運行 一直報錯如下: 百度以及 Stack Overflow 上試了很多方法,最終依靠重裝解決了問題,重裝步驟如下: 啟動資料庫: 之後的一些基本操作 創建資料庫: 進入資料庫: 創建用戶: 修改密碼: 查看用戶列表: 查看資料庫列表: 切換數據 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...