spark學習(9)-spark的安裝與簡單使用

来源:https://www.cnblogs.com/wpbing/archive/2019/08/09/11273362.html
-Advertisement-
Play Games

spark和mapreduce差不多,都是一種計算引擎,spark相對於MapReduce來說,他的區別是,MapReduce會把計算結果放 在磁碟,spark把計算結果既放在磁碟中有放在記憶體中,mapreduce把可能會把一個大任務分成多個stage,瓶頸發生在IO,spark有一個叫DAG(有向 ...


spark和mapreduce差不多,都是一種計算引擎,spark相對於MapReduce來說,他的區別是,MapReduce會把計算結果放

在磁碟,spark把計算結果既放在磁碟中有放在記憶體中,mapreduce把可能會把一個大任務分成多個stage,瓶頸發生在IO,spark有一個叫DAG(有向無環圖)的東西,可以把多個運算元都放在一個stage進行合併。

spark shuffle的時候一定會把數據放在磁碟中,因為如果在shuffle的時候數據丟失,代價特別的昂貴

 

spark和mapreduce最大的區別是,spark可以把中間結果即放在記憶體,又可以放在磁碟中。
因為現在記憶體和以前比已經很大了,能放在記憶體就放在記憶體里。但mapreduce是把中間結果放在磁碟中的
,磁碟的IO速度太慢了,所以spark比mapreduce快很多了
spark僅僅可以替代的是mapreduce。spark有個很重要的東西是DAG(有向無環圖)
可以將多個相同的運算元合併到一個stage裡面(以後學。。)
spark在shuffle的時候一定是在記憶體中的,但為了保證數據的安全性,也會把數據寫入磁碟,不然恢復的時候代價比較大

spark可以運行在hadoop,yarn,Mesos(Apache的一個資源調度框架),standalone(spark自帶的)。。。

spark主節點master,工作節點worker,master可以部署兩個,解決單點故障,這時候可以引入zookeeper

安裝

首先我們的電腦上要有jdk8以上的版本

還有hadoop的hdfs就行

我們機器的規劃可以是兩個master,一個zookeeper

我們現在官網上下載一個spark,然後傳到你的機器集群中,解壓安裝到指定目錄

然後進入到conf目錄

然後修改兩個配置文件

 

 vim spark-env.sh

裡面含義,指定你的jdk路徑,指定你的zookeeper機器都有哪台,指定每台機器的內核數(線程數量),每台機器的使用記憶體

 這裡面不用安裝scala了,因為spark裡面已經安裝好了

:r! echo /root/spark   //小知識在vim裡面輸出

linux腳本
一個簡單的for迴圈
for i in {5..8}; do echo $i; done
scp的時候如果機器太多可以寫個腳本
for i in {1..5}; do scp -r /root/apps/spark/ hdp-0$i:/root/apps/; done

 

然後修改slaves文件,把你的worker機器給寫入進去就行了

 

然後把你的spark  給拷貝到其他機器上

然後啟動的話sbin下有一個start-all.sh

sbin/start-all.sh  啟動即可,這個最好首先配置好master上對其他機器的免密登錄

 master上的網頁顯示埠是8080,內部通信埠是7077

 

 


現在可以試著配置spark的高可用
修改spark-env.sh
export JAVA_HOME=/root/apps/jdk1.8.0_141/
#export SPARK_MASTER_HOST=hdp-01
#export SPARK_MASTER_PORT=7077export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp-01:2181,hdp-02:2181,hdp-03:2181,hdp-04:2181 -Dspark.deploy.zookeeper.dir=/root/zk_spark"
export SPARK_WORKER_CORES=8
export SPARK_WORKER_MEMORY=6g


修改後啟動你的zookeeper
縣啟動你的集群
sbin/start-all.sh
然後再一臺有zookeeper的機器上在啟動一個master
sbin/start-master.sh


提交第一個spark程式
提交一個程式需要一個客戶端 人家名字叫sparkSubmit(Driver)
給活躍的master提交任務,
隨便找一臺機器當做客戶端,在安裝包里有一個example
[root@hdp-02 spark-2.4.3-bin-hadoop2.7]# bin/spark-submit --master spark://hdp-01:7077 --class org.apache.spark.examples.SparkPi examples/jars/spark-examples_2.11-2.4.3.jar 500
這裡只是用了人家的樣例,最後數字是採多少樣本
在執行任務的時候,master會啟動sparksubmit,還有個coarserGrainedExecutorBackend
這個東西是真正執行任務的東西
程式執行完,這幾個進程就會被釋放。
可以指定參數,可以指定多個master,比如用多大記憶體,內核數

 

參數說明:

--master spark://node1.edu360.cn:7077 指定Master的地址

--executor-memory 2g 指定每個worker可用記憶體為2G

--total-executor-cores 2 指定整個集群使用的cup核數為2個


[root@hdp-02 spark-2.4.3-bin-hadoop2.7]# bin/spark-submit --master spark://hdp-01:7077,hdp-02:7077 --class org.apache.spark.examples.SparkPi --executor-memory 2048mb --total-executor-cores 12 examples/jars/spark-examples_2.11-2.4.3.jar 500

 

spark shell互動式命令行,方便學習和測試,可以寫spark程式,也是一個客戶端
啟動spark shell
bin/spark-shell,這樣啟動沒有啟動master,是local模式運行的,是模擬的
bin/spark-shell --master spark://hdp-01:7077
此時執行spark-shell的機器也會執行subsubmit
workder也會啟動coarserGrainedExecutorBackend,即使現在還沒有提交任務,他們在準備工作


在spark-shell中提交一個wordcount程式.....scale一句搞定

sc.textFile 指定讀取哪裡的文件,註意要是所有的機器都能訪問的,不能只是本地的,最好是HDFS的
sc.textFile("hdfs://hdp-01:9000/wordcount/input").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect
sc是spark core(RDD)的執行入口

spark都有哪些進程
首先啟動master,然後啟動worker,worker會向master註冊,然後不停發送心跳檢測
master,如果只有一個,會把這些信息保存到磁碟,如果有多個,會保存在zookeeper

1.客戶端通過命令行參數知道master在哪,並設置一些參數,比如記憶體資源和內核數,會先添加任務,然後向master申請資源

2.然後master就會在worker裡面查找,負責資源調度(就是將executor在哪些worker啟動)

3.master和work進行RPC通信,讓worker啟動executor(將分配的參數傳遞過去)然後worker啟動executor。

4.接下來,executor和客戶端sparksubmit進行通信(通過master-》worker-》execotor這樣知道客戶端在哪)。

5.然後把sparksubmit把真正的計算邏輯生成task發送給executor。

6.然後再executor執行真正的計算邏輯


yarn和spark的standalone調度模式對比
resourcemanager      master 管理子節點,資源調度,接受任務請求
nodemanager            worker 管理當前結點,並管理子進程
yarnchild                    executor 運行真正的計算邏輯的
client sparksubmit     (client+ApplicationMaster)提交任務,管理該任務的executor,並將task提交給集群
ApplicationMaster

用scala語言簡單寫一個wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/
object wordcount {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    //spark程式的入口
    val sc = new SparkContext(conf)
    //得到在哪開始讀取數據
    val lines: RDD[String] = sc.textFile(args(0))
    //切分壓平
    val words: RDD[String] = lines.flatMap(_.split(" "))
    //把每個單詞都變成(單詞,1)的元組
    val wordAndOne: RDD[(String,Int)] = words.map((_,1))
    //然後進行聚合
    val reduced: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
    //排序
    val sorts = reduced.sortBy(_._2, false)
    //保存
    sorts.saveAsTextFile(args(1))
    sc.stop()
  }
}

然後把這個程式打包放到集群中

./spark-submit --master spark://hdp-01:7077 --class test.ScalaWordCount /root/test.jar hdfs://hdp-01:9000/wc hdfs://hdp-01:9000/wcout

 


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

-Advertisement-
Play Games
更多相關文章
  • --方法1.PLSQL代碼塊 SQL> set serveroutput onSQL> declare 2 v_sal emp_pl.sal%type; 3 begin 4 v_sal :=get_sal(7902); 5 dbms_output.put_line('7902的工資是'||v_sal ...
  • PostgreSQL是一個功能強大的開源對象關係資料庫管理系統(ORDBMS),在開源資料庫使用上與MySQL各領風騷。但也有不少人質疑postgresql的未來,正所謂,贊揚或批判一種資料庫都必須先瞭解它,然後才可有話語權。為了更多的瞭解postgresql,我們就先部署一套實例作為瞭解它的基礎。 ...
  • 0 學習路線的知識點概括 學習電腦組成原理,就是學習電腦是如何協調運行的 電腦組成原理的英文叫Computer Organization Organization 意"組織機構"。 該組織機構能夠進行各種計算、控制、讀取輸入,進行輸出,達成各種強大的功能。 把整個電腦組成原理的知識點拆分成了 ...
  • 拿一個小規模的5節點ES集群做冷熱分離嘗試,它上面已經有60多個索引,有些索引按月、每月生成一個索引,隨著數據的不斷寫入,歷史數據(只需保留三個月數據,三個月之前的數據視為歷史數據)越來越占磁碟空間和記憶體資源,影響搜索響應時間。因此想把集群中節點分成2種類型,一種是hot節點,配置大記憶體和SSD,用 ...
  • 1、根據類全名定位對應類型ID select Local_ID,FullName from ubf_md_class where FullName like '命名空間' 2、根據類型ID定位對應數據表欄位屬性 select Local_ID,Local_Class_ID,Name,Length f ...
  • /** 為了清晰化的顯示:所有固定命令都是用大寫格式顯示 SQL語法分類:DML,DDL,DCL (1)DML(Data Manipulation Language ,資料庫操作語言): 數據:增加,修改,刪除 (2)DDL(Data Definition Language,資料庫定義語言 ): 數 ...
  • 最詳細的Oracle安裝步驟就在這裡,話不多說直接給大家上安裝Oracle的詳細教程 如果沒有安裝包,可以先點擊下載下載地址:http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.ziphttp:// ...
  • Elasticsearch 如何進行分頁查詢? 如果起始頁、頁大小很大會有性能上的損耗嗎? 本文從分頁查詢開始, 引出其deep paging (即深層分頁) 問題, 並分析其優劣, 給出解決方法. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...