Spark內存并行計算框架

  • spark核心概念

  • spark集群架構

  • spark集群安裝部署

  • spark-shell的使用

  • 通過IDEA開發spark程序

1. Spark是什么

Apache Spark? is a unified analytics engine for large-scale data processingspark是針對于大規模數據處理的統一分析引擎

spark是在Hadoop基礎上的改進,是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計算框架,Spark基于map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的map reduce的算法。 ? spark是基于內存計算框架,計算速度非常之快

輸入 計算 輸出

分發 計算 收集

第一步 保存中間結果 第二步

2. Spark

2.1 速度快

相對于hadoop來說,有使用hadoop MR經驗會有體會

  • 運行速度提高100倍

    Apache Spark使用最先進的DAG調度程序,查詢優化程序和物理執行引擎,實現批量和流式數據的高性能。

  • spark比mapreduce快的2個主要原因

    基于內存

    mapreduce任務后期再計算的時候,每一個job的輸出結果會落地到磁盤,后續有其他的job需要依賴于前面job的輸出結果,這個時候就需要進行大量的磁盤io操作。性能就比較低。 ? spark任務后期再計算的時候,job的輸出結果可以保存在內存中,后續有其他的job需要依賴于前面job的輸出結果,這個時候就直接從內存中獲取得到,避免了磁盤io操作,性能比較高

    進程與線程

    mapreduce任務以進程的方式運行在yarn集群中,比如程序中有100個MapTask,一個task就需要一個進程,這些task要運行就需要開啟100個進程。 ? spark任務以線程的方式運行在進程中,比如程序中有100個MapTask,后期一個task就對應一個線程,這里就不在是進程,這些task需要運行,這里可以極端一點:只需要開啟1個進程,在這個進程中啟動100個線程就可以了。進程中可以啟動很多個線程,而開啟一個進程與開啟一個線程需要的時間和調度代價是不一樣。 開啟一個進程需要的時間遠遠大于開啟一個線程。

2.2 易用性
  • 可以快速去編寫spark程序通過 java/scala/python/R/SQL等不同語言

2.3 通用性
  • spark框架不在是一個簡單的框架,可以把spark理解成一個生態系統,它內部是包含了很多模塊,基于不同的應用場景可以選擇對應的模塊去使用

    sparksql、api

    通過sql去開發spark程序做一些離線分析

    sparkStreaming

    主要是用來解決公司有實時計算的這種場景

    Mlib

    它封裝了一些機器學習的算法庫

    Graphx 圖計算

2.4 兼容性
  • spark程序就是一個計算邏輯程序,這個任務要運行就需要計算資源(內存、cpu、磁盤),哪里可以給當前這個任務提供計算資源,就可以把spark程序提交到哪里去運行

    standAlone

    少量的節點,比較純粹的spark任務

    它是spark自帶的集群模式,整個任務的資源分配由spark集群的老大Master負責

    yarn

    yarn有接口,可以對接其他的計算框架 mr flink spark java

    可以把spark程序提交到yarn中運行,整個任務的資源分配由yarn中的老大ResourceManager負責

    mesos

    云原生支持的比較快

    它也是apache開源的一個類似于yarn的資源調度平臺。

3. Spark與Yarn

mesos standalone yarn cpu 磁盤 內存

spark提交任務到yarn

  • Driver

    它會執行客戶端寫好的main方法,它會構建一個名叫SparkContext對象

  • Task

    spark任務是以task線程的方式運行在worker節點對應的executor進程中

spark是調用了yarn的接口,將任務提交給yarn來執行計算,實際的計算邏輯就是我們driver中的代碼

4. Spark集群安裝部署

  • 事先搭建好hadoop分布式環境

  • 下載安裝包

  • 解壓安裝包到指定的安裝目錄/root

  • 重命名解壓目錄

    mv spark-3.1.1-bin-hadoop3.2 spark

  • 修改配置文件,進入到spark的安裝目錄下對應的conf文件夾

    vim spark-env.sh ( mv spark-env.sh.template spark-env.sh)

    vim slaves ( mv slaves.template salves)

    #指定spark集群的worker節點
    hadoop01
    hadoop02
    hadoop03
  • 分發安裝目錄到其他機器

    xsync /root/spark /root/spark
  • 8、修改spark環境變量(也可以不配置,這里主要是為了)

    vim /etc/profile

    export SPARK_HOME=/root/spark
    export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

當啟動好spark集群之后,可以訪問這樣一個地址http://hadoop01:8080

5. Spark怎么使用

5.1 生產環境
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
examples/jars/spark-examples_2.12-3.1.1.jar \
10
?
##參數說明
--class:指定包含main方法的主類
--master:指定spark集群master地址
--executor-memory:指定任務在運行的時候需要的每一個executor內存大小
--total-executor-cores: 指定任務在運行的時候需要總的cpu核數
?
5.2 臨時調試環境

spark整合HDFS,在hadoop01節點vim /root/spark/conf/spark-env.sh

export HADOOP_CONF_DIR=/opt/bigdata/hadoop/etc/hadoop

分發到其他節點

xsync /root/spark/conf/spark-env.sh /root/spark/conf/spark-env.sh

執行spark-shell --master yarn

sc.textFile("/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
?
sc.textFile("hdfs://hadoop01:9000/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
5.3 開發環境

構建maven工程,添加pom依賴

 <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.1</version></dependency>
</dependencies>
?<build><sourceDirectory>src/main/scala</sourceDirectory><plugins><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals><configuration><args><arg>-dependencyfile</arg><arg>${project.build.directory}/.scala_dependencies</arg></args></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass></mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>

提交任務使用的腳本

spark-submit \
--class com.mejava.day02.WordCount \
--master yarn \
--executor-memory 1G \
scala_learn-1.0-SNAPSHOT.jar

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71047.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu 安裝 Nginx并配置反向代理

Ubuntu版本&#xff1a;Ubuntu 24.04.2 LTS 一、安裝Nginx ?更新系統軟件包? 安裝前需確保系統處于最新狀態&#xff0c;避免依賴沖突 sudo apt update && sudo apt upgrade -y ?安裝Nginx主程序? Ubuntu官方倉庫已包含穩定版Nginx&#xff0c;直接安裝即可 sudo…

Solr中得Core和Collection的作用和關系

Solr中得Core和Collection的作用和關系 一&#xff0c; 總結 在Apache Solr中&#xff0c;Core和Collection 是兩個核心概念&#xff0c;他們分別用于單機模式和分布式模式&#xff08;SolrCloud&#xff09;中&#xff0c;用于管理和組織數據。 二&#xff0c;Core 定義&am…

yolov8,yolo11,yolo12 服務器訓練到部署全流程 筆記

正在進行中&#xff0c;隨時更新 一. Anaconda配置 1.安裝anaconda (1)下載.sh文件 Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror (2)scp到服務器后&#xff0c;運行安裝包 bash Anaconda3-2020.07-Linux-x86_64.sh (3)安裝anacond…

從零開始開發純血鴻蒙應用之語音朗讀

從零開始開發純血鴻蒙應用 〇、前言一、API 選型1、基本情況2、認識TextToSpeechEngine 二、功能集成實踐1、改造右上角菜單2、實現語音播報功能2.1、語音引擎的獲取和關閉2.2、設置待播報文本2.3、speak 目標文本2.4、設置語音回調 三、總結 〇、前言 中華漢字洋洋灑灑何其多…

【AGI】DeepSeek開源周:The whale is making waves!

DeepSeek開源周&#xff1a;The whale is making waves&#xff01; 思維火花引言一、DeepSeek模型體系的技術演進1. 通用語言模型&#xff1a;DeepSeek-V3系列2. 推理優化模型&#xff1a;DeepSeek-R1系列3. 多模態模型&#xff1a;Janus系列 二、開源周三大工具庫的技術解析1…

25年前端如何走的更穩

2025年&#xff0c;隨著deepseek引起的AI大模型技術的深度革命&#xff0c;帶來了很多機會和挑戰&#xff0c;前端程序員作為互聯網里一個普通但必不可少的崗位&#xff0c;在當前形勢下&#xff0c;需要主動變革才能走的更穩。本文簡單介紹三個方向&#xff0c;Web3前端、全棧…

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順

DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ內でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…

市場加速下跌,但監管「堅冰」正在消融

作者&#xff1a;Techub 熱點速遞 撰文&#xff1a;Yangz&#xff0c;Techub News 與近日氣溫逐步回暖不同&#xff0c;自 2 月 25 日比特幣跌破 9 萬美元以來&#xff0c;加密貨幣市場行情一路下滑。今日 10 時 50 分左右&#xff0c;比特幣更是跌破 8 萬美元大關&#xff0c…

【Android】安卓付款密碼輸入框、支付密碼輸入框

如圖 代碼部分&#xff1a; public class PayPasswordDialog extends AppCompatDialogFragment {private String mPayPass "";private String mTitle, mMoney;private final TextView[] mPayPassTextViewArray new TextView[6];private List<Integer> mPayP…

Java數據結構_一篇文章了解常用排序_8.1

本文所有排序舉例均默認為升序排列。 目錄 1. 常見的排序算法 2. 常見排序算法的實現 2.1 插入排序 2.1.1 基本思想&#xff1a; 2.1.2 直接插入排序 2.1.3 希爾排序&#xff08;縮小增量排序&#xff09; 2.2 選擇排序 2.2.1 基本思想&#xff1a; 2.2.2 直接選擇排…

性能調優篇——索引優化與執行計劃解析

引言 當數據庫表數據突破千萬級時&#xff0c;一個未優化的索引可能讓查詢耗時從毫秒級暴增至分鐘級。某電商平臺曾因商品搜索接口的索引缺失&#xff0c;導致大促期間數據庫CPU飆升至98%&#xff0c;直接引發服務雪崩。本文將深入B樹索引的存儲奧秘&#xff0c;詳解慢查詢日志…

計算機畢業設計SpringBoot+Vue.js人口老齡化社區服務與管理平臺 (源碼+文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

C#上位機--三元運算符

引言 在 C# 上位機開發中&#xff0c;我們經常需要根據不同的條件來執行不同的操作。條件判斷是編程中不可或缺的一部分&#xff0c;而三元運算符就是一種簡潔而強大的條件判斷工具。本文將詳細介紹 C# 中的三元運算符&#xff0c;探討其在上位機開發中的應用場景&#xff0c;…

AI時代保護自己的隱私

人工智能最重要的就是數據&#xff0c;讓我們面對現實&#xff0c;大多數人都不知道他們每天要向人工智能提供多少數據。你輸入的每條聊天記錄&#xff0c;你發出的每條語音命令&#xff0c;人工智能生成的每張圖片、電子郵件和文本。我建設了一個網站(haptool.com)&#xff0c…

Hutool - POI:讓 Excel 與 Word 操作變得輕而易舉

各位開發者們&#xff0c;在日常的 Java 開發工作里&#xff0c;處理 Excel 和 Word 文件是相當常見的需求。無論是從 Excel 里讀取數據進行分析&#xff0c;還是將數據寫入 Excel 生成報表&#xff0c;亦或是對 Word 文檔進行內容編輯&#xff0c;傳統的 Apache POI 庫雖然功能…

數據庫操作命令詳解:CREATE、ALTER、DROP 的使用與實踐

引言? 數據庫是存儲和管理數據的核心工具&#xff0c;而 ?DDL&#xff08;Data Definition Language&#xff0c;數據定義語言&#xff09;?? 是構建和調整數據庫結構的基石。本文將通過實際示例&#xff0c;詳細講解 CREATE&#xff08;創建&#xff09;、ALTER&#xff0…

Asp.Net Core WebAPI開發教程(入門)

一、Asp.Net Core WebAPI項目創建 二、Asp.Net Core WebApi/Mvc路由定義 二、Asp.Net Core WebAPI 請求案例 Asp.Net WebApi Get請求整理&#xff08;一&#xff09; Asp.Net WebApi Post請求整理&#xff08;一&#xff09; Asp.Net WebApi Action命名中已‘Get’開頭問題 …

VSCode大的JSON數據不能折疊問題

修改editor.foldingMaximumRegions為10000解決&#xff0c;默認只支持5000 在 VSCode 中&#xff0c;默認的 JSON 文件折疊功能對嵌套層級較深的數據支持有限。以下是幾種解決嵌套 4 層以上數據無法折疊的方法&#xff1a; 1. 使用擴展插件 安裝支持更復雜折疊功能的插件&am…

IPoIB源碼深度解析:如何基于TCP/IP協議棧實現高性能InfiniBand通信

一、IPoIB的核心設計理念 IPoIB(IP over InfiniBand)是一種在InfiniBand網絡上承載IP流量的技術,其核心目標是在不修改上層應用的前提下,利用InfiniBand的高帶寬和低延遲特性。與自定義協議棧不同,IPoIB通過深度集成到Linux內核TCP/IP協議棧中,將InfiniBand設備抽象為標…

Vue學習教程-18Vue單文件組件

文章目錄 前言一、單文件組件的構成二、組件引用三、組件的應用舉例1.組件實例2.顯示結果 前言 Vue 單文件組件&#xff08;又名 *.vue 文件&#xff0c;縮寫為 SFC&#xff09;是一種特殊的文件格式&#xff0c;它允許將 Vue 組件的模板、邏輯 與 樣式封裝在單個文件中。組件…