Spark學(xué)習(xí)筆記

Spark

開頭別的不多說(shuō)了,就說(shuō)Spark為啥存在愉棱。他來(lái)到這就是為了代替MapReduce的唆铐!

MR的缺點(diǎn)

為啥要被代替呢?學(xué)過Hadoop知道奔滑,Hadoop早期艾岂,MR是基于數(shù)據(jù)集的計(jì)算,面向的是數(shù)據(jù)朋其⊥踉。基本運(yùn)算規(guī)則是從存儲(chǔ)介質(zhì)中采集數(shù)據(jù),然后進(jìn)行計(jì)算梅猿,所以它的計(jì)算往往是一次性的氓辣,這就存在一定的局限性,不適用于數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)這樣的迭代計(jì)算和圖形挖掘計(jì)算袱蚓。而且因?yàn)槲募鎯?chǔ)筛婉,性能不好!MR和Hadoop耦合癞松,沒法換爽撒。

后來(lái)Hadoop 2.x 就引入了Yarn,這個(gè)東西好啊响蓉,資源管理器RM(ResourceManager)硕勿。這里面有AM(ApplicationMaster)就是應(yīng)用管理器,AM中的Driver管理NodeManager中的Task枫甲。

也就是說(shuō):

RM現(xiàn)在管理NodeManager源武,其中的Driver管理Task扼褪,這樣實(shí)現(xiàn)了解耦。所以這個(gè)Task不一定非要是MR任務(wù)粱栖,此時(shí)變成Spark任務(wù)或者Flink任務(wù)或者Strom任務(wù)话浇,都可以!

hadoop2.x版本yarn.png

引入了container闹究,雖然增加了內(nèi)存的消耗幔崖,但是大大提高了擴(kuò)展性,于是Spark渣淤、Flink赏寇、Strom才可以搭配使用。

Spark為啥適合价认?

基于內(nèi)存計(jì)算嗅定,由Scala語(yǔ)言開發(fā)。

Spark結(jié)構(gòu).png

Spark重要角色

1.Driver 驅(qū)動(dòng)器

是執(zhí)行程序main方法的進(jìn)程用踩。負(fù)責(zé)執(zhí)行SparkContext渠退、創(chuàng)建RDD、以及RDD轉(zhuǎn)化操作和行動(dòng)操作代碼的執(zhí)行脐彩。如果啟動(dòng)Spark Shell智什,系統(tǒng)會(huì)后臺(tái)啟動(dòng)一個(gè)Spark Driver程序就是在Spark Shell中預(yù)加載一個(gè)SparkContext叫sc。如果驅(qū)動(dòng)器程序終止丁屎,那么Spark應(yīng)用也結(jié)束荠锭。工作:

  1. 把用戶程序轉(zhuǎn)為JOB
  2. 跟蹤Executor的運(yùn)行狀況
  3. 為執(zhí)行器節(jié)點(diǎn)調(diào)度任務(wù)
  4. UI展示運(yùn)行情況

2.Executor 執(zhí)行器

是一個(gè)工作進(jìn)程,負(fù)責(zé)在Spark作業(yè)中運(yùn)行任務(wù)晨川,任務(wù)間相互獨(dú)立证九。Spark應(yīng)用啟動(dòng)時(shí),Executor節(jié)點(diǎn)被同時(shí)啟動(dòng)共虑,伴隨Spark應(yīng)用整個(gè)生命周期愧怜。如果有Executor節(jié)點(diǎn)故障或崩潰,Spark應(yīng)用也可以繼續(xù)執(zhí)行妈拌,會(huì)將出錯(cuò)節(jié)點(diǎn)上的任務(wù)調(diào)度到其他Executor節(jié)點(diǎn)拥坛。工作:

  1. 負(fù)責(zé)運(yùn)行組成Spark應(yīng)用的任務(wù),并將結(jié)果返回給驅(qū)動(dòng)器進(jìn)程
  2. 通過自身的塊管理器(Block Manager)為用戶程序中要求緩存的RDD提供內(nèi)存式存儲(chǔ)尘分。RDD是直接緩存在Executor進(jìn)程內(nèi)的猜惋,所以任務(wù)可以再運(yùn)行時(shí)充分利用緩存數(shù)據(jù),加速運(yùn)算培愁。

Spark Yarn-cluster搭建

前提是HDFS和YARN集群正常啟動(dòng)了著摔!

1.先去配置hadoop的yarn-site.xml

是否啟動(dòng)一個(gè)線程檢查每個(gè)任務(wù)使用虛擬內(nèi)存量,如果超出分配值定续,則直接kill掉谍咆,默認(rèn)true:

<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
 </property>

是否啟動(dòng)一個(gè)線程檢查每個(gè)任務(wù)使用物理內(nèi)存量禾锤,如果超出分配值,則直接kill掉摹察,默認(rèn)true:

<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
 </property>

2.修改spark-env.sh 添加如下配置

YARN_CONF_DIR=/opt/soft/hadoop-2.7.1/etc/hadoop

去找自己的路徑恩掷,別亂復(fù)制!

3.分發(fā)配置文件

把這個(gè)配置文件給Slave1和Slave2(其實(shí)不發(fā)也行供嚎,Yarn模式的話一個(gè)機(jī)器能發(fā)Spark就足夠了)

4.試一下例子

bin/spark-submit \ 
--class org.apache.spark.examples.SparkPi \ 
--master yarn \
 --deploy-mode client \ 
./examples/jars/spark-examples_2.11-2.4.1.jar \ 
100

日志查看

1.修改配置文件spark-defaults.conf

添加內(nèi)容:

spark.yarn.historyServer.address=Master:10020 
spark.history.ui.port=19888

端口別亂填黄娘!根據(jù)自己hadoop的mapred-site.xml的配置去對(duì)應(yīng)填寫!2槠骸!

2.重啟Spark歷史服務(wù)

./sbin/stop-history-server.sh 
./sbin/start-history-server.sh

3.提交個(gè)任務(wù)到Y(jié)ARN看效果

bin/spark-submit \ 
--class org.apache.spark.examples.SparkPi \
--master yarn \ 
--deploy-mode client \ 
./examples/jars/spark-examples_2.11-2.4.1.jar \ 
100

這回看日志宁炫。

YARN部署運(yùn)行流程:

YARN調(diào)度Spark.png

1.Client 提交任務(wù)

2.RM創(chuàng)建ApplicationMaster

3.AM向RM申請(qǐng)資源

4.RM向AM提供資源列表

5.AM選擇NM節(jié)點(diǎn)并創(chuàng)建Spark執(zhí)行器對(duì)象

6.被選中的NM節(jié)點(diǎn)Executor反向注冊(cè)偿曙,通知AM已經(jīng)準(zhǔn)備好執(zhí)行了。

7.AM分解并調(diào)度任務(wù)

Spark提交

1.基本語(yǔ)法

bin/spark-submit \ 
--class <main-class> \ 
--master <master-url> \ 
--deploy-mode <deploy-mode> \
 --conf<key>=<value> \
 ... # other options <application-jar> \
 [application-arguments]

2.參數(shù)說(shuō)明

--master:指定的Master地址羔巢,默認(rèn)為L(zhǎng)ocal
--class:你的應(yīng)用啟動(dòng)類 (例如:org.apache.spark.examples.SparkPi)
--deploy-mode:是否發(fā)布你的驅(qū)動(dòng)到worker節(jié)點(diǎn)(cluster)或者作為本地客戶端client望忆。默認(rèn)是client
--conf:任意的Spark配置屬性,格式key=value竿秆,如果值包含空格启摄,可以加引號(hào)"key=value"。
application-jar:打包好的應(yīng)用jar包含依賴幽钢,這個(gè)URL在集群全局可見歉备。
application-argument:傳給main方法的參數(shù)
--executor-memory 1G 指定每個(gè)Executor可用內(nèi)存1G

寫程序

IDEA創(chuàng)建maven項(xiàng)目,然后POM:
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.george.sparktest</groupId>
    <artifactId>sparktest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.1</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>WordCount</finalName>
        <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>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>WordCount</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

純屬手敲匪燕。蕾羊。。

然后可以使用Scala開發(fā)了帽驯。后面可以把程序打成jar包龟再。
idea能看target文件夾里面,有個(gè)with-dependencies.jar這個(gè)很大尼变,因?yàn)橐蕾嚩即蜻M(jìn)去了利凑。
Windows在運(yùn)行hadoop相關(guān)的時(shí)候可能會(huì)有報(bào)錯(cuò)!是個(gè)winutils.exe啥啥的嫌术,其實(shí)不影響我們使用哀澈,那個(gè)問題主要是源碼里有一段這個(gè):

String home = System.getProperty("hadoop.home.dir");

一看就是環(huán)境變量的事,HADOOP_HOME為空的話度气,就會(huì)null\bin\winutils.exe日丹。找不到。
所以下載一個(gè)common的jar包蚯嫌。配置好環(huán)境變量哲虾。path添加上%HADOOP_HOME%\bin
聽說(shuō)需要重啟丙躏??束凑?

或者還有一個(gè)辦法:

我們寫程序的時(shí)候前面加上

System.setProperty("hadoop.home.dir", "D:\\hadoop")

等打包的時(shí)候把這個(gè)干掉就完事了晒旅。。汪诉。但是這個(gè)要記得刪7狭怠!0羌摹S愎摹!该编!千萬(wàn)別忘F尽!?慰ⅰ嘉赎!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市于樟,隨后出現(xiàn)的幾起案子公条,更是在濱河造成了極大的恐慌,老刑警劉巖迂曲,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靶橱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡路捧,警方通過查閱死者的電腦和手機(jī)抓韩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鬓长,“玉大人谒拴,你說(shuō)我怎么就攤上這事∩娌ǎ” “怎么了英上?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啤覆。 經(jīng)常有香客問我苍日,道長(zhǎng),這世上最難降的妖魔是什么窗声? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任相恃,我火速辦了婚禮,結(jié)果婚禮上笨觅,老公的妹妹穿的比我還像新娘拦耐。我一直安慰自己耕腾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布杀糯。 她就那樣靜靜地躺著扫俺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪固翰。 梳的紋絲不亂的頭發(fā)上狼纬,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音骂际,去河邊找鬼疗琉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歉铝,可吹牛的內(nèi)容都是我干的盈简。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼犯戏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼送火!你這毒婦竟也來(lái)了拳话?” 一聲冷哼從身側(cè)響起先匪,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弃衍,沒想到半個(gè)月后呀非,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镜盯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年岸裙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速缆。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡降允,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艺糜,到底是詐尸還是另有隱情剧董,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布破停,位于F島的核電站翅楼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏真慢。R本人自食惡果不足惜毅臊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黑界。 院中可真熱鬧管嬉,春花似錦皂林、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至求厕,卻和暖如春著隆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呀癣。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工美浦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人项栏。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓浦辨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沼沈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子流酬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Scala語(yǔ)法 至于scala語(yǔ)法而言,大致上和Java的語(yǔ)法類似列另,增加了一些函數(shù)式編程芽腾,具體語(yǔ)法可以參考Scal...
    卡卡xx閱讀 2,795評(píng)論 0 1
  • Spark學(xué)習(xí)筆記 Data Source->Kafka->Spark Streaming->Parquet->S...
    哎喲喂嘍閱讀 6,607評(píng)論 0 51
  • 本文是對(duì)Spark基礎(chǔ)知識(shí)的一個(gè)學(xué)習(xí)總結(jié),包含如下幾部分的內(nèi)容: 概述 運(yùn)行模式 Spark Shell RDD/...
    我是老薛閱讀 1,711評(píng)論 0 2
  • Zookeeper用于集群主備切換页衙。 YARN讓集群具備更好的擴(kuò)展性摊滔。 Spark沒有存儲(chǔ)能力。 Spark的Ma...
    Yobhel閱讀 7,258評(píng)論 0 34
  • spark-submit的時(shí)候如何引入外部jar包 在通過spark-submit提交任務(wù)時(shí)店乐,可以通過添加配置參數(shù)...
    博弈史密斯閱讀 2,736評(píng)論 1 14