黑猴子的家:Spark 在 IDEA 中編寫 WordCount 程序

spark shell 僅在測試和驗證我們的程序時使用的較多姐霍,在生產(chǎn)環(huán)境中鄙麦,通常會在IDE中編制程序,然后打成jar包镊折,然后提交到集群胯府,最常用的是創(chuàng)建一個Maven項目,利用Maven來管理jar包的依賴

1恨胚、打開IDEA工具

2骂因、單擊Plugins

3、單擊Install plugin from disk

4赃泡、選擇scala的plugins

5侣签、Restart IntelliJ IDEA

6、創(chuàng)建一個項目

7急迂、選擇maven項目→ Next

8、填寫GroupId 和 ArtifactId → Next

9蹦肴、填寫項目名稱 → Finish

10僚碎、選擇Enable Auto-Import

11、為項目添加scala的framework


尖叫提示:創(chuàng)建的maven項目默認是不支持scala

12阴幌、選擇scala進行配置

13勺阐、配置Maven 的 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.victor</groupId>
    <artifactId>spark</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <log4j.version>1.2.17</log4j.version>
        <slf4j.version>1.7.22</slf4j.version>
        <camel.version>2.18.2</camel.version>
        <spark.version>2.1.1</spark.version>
        <scala.version>2.11.8</scala.version>
        <hadoop.version>2.8.2</hadoop.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
            <!--聲明包作用域-->
            <!-- <scope>provided</scope>-->
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
            <!-- <scope>provided</scope> -->
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
            <!-- <scope>provided</scope> -->
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- Logging End -->
    </dependencies>

    <build>
        <finalName>wordcount</finalName>
        <plugins>
        <!-- 添加對Scala語言的支持。使得其能夠同時編譯Java和Scala語言的文件 -->
            <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>com.victor.spark.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>

14矛双、將src/main/scala設(shè)置成源代碼目錄

(1)New -> Directory

(2)scala -> ok

(3)Open Module Settings

(4)scala -> Sources

15渊抽、添加IDEA Scala

執(zhí)行此操作后,pom文件中不用添加scala依賴议忽,因為已經(jīng)以lib庫的方式加入

(1)File -> Project Structure

(2)Global Libraries -> + -> Scala SDK

(3)System Scala -> ok

(4)Global Libraries -> Scala -> Add to Modules ...

16懒闷、新建一個Scala的WordCount類

(1)New -> Scala Class

(2)WordCount -> Object -> ok

17、編寫程序

package com.victor.spark

import org.apache.spark.{SparkConf, SparkContext}
import org.slf4j.LoggerFactory

object WordCount {

  val logger = LoggerFactory.getLogger(WordCount.getClass)

  def main(args: Array[String]) {

    //創(chuàng)建SparkConf()并設(shè)置App名稱栈幸, local或local[*],*表示多線程
    //打成jar包愤估,放到集群上運行,
    //".setMaster("local[*]")"注釋掉就可以了速址,最好不要寫死  
    val conf = new SparkConf().setAppName("WC").setMaster("local[*]")

    //創(chuàng)建SparkContext玩焰,該對象是提交spark App的入口
    val sc = new SparkContext(conf)

    //使用sc創(chuàng)建RDD并執(zhí)行相應(yīng)的transformation和action
    sc.textFile(args(0)).flatMap(_.split(" "))
                    .map((_,1)).reduceByKey(_+_, 1)
                    .sortBy(_._2, false).saveAsTextFile(args(1))
    

    logger.info("complete!")

    //停止sc,結(jié)束該任務(wù)
    sc.stop()
  }
}

18芍锚、使用Maven打包昔园,修改pom.xml

19蔓榄、打包

20、編譯成功的jar包默刚,上傳到服務(wù)器節(jié)點上

21甥郑、啟動集群

(1)啟動HDFS

[victor@node1 hadoop-2.8.2]$ sbin/start-dfs.sh

(2)啟動spark

[victor@node1 spark]$ sbin/start-all.sh

22、使用spark-submit命令提交Spark應(yīng)用

1)spark-submit

上傳hdfs 數(shù)據(jù)

[victor@node1 hadoop]$ bin/hdfs dfs -put README.txt /

spark submit 提交

[victor@node1 spark]$ bin/spark-submit \
> --class com.victor.spark.WordCount \
> --master spark://node1:7077 \ (--master local[*])//本地多線程執(zhí)行
> --executor-memory 1G \
> --total-executor-cores 2 \
> wordcount.jar \
> hdfs://node1:9000/RELEASE \
> hdfs://node1:9000/RWC_out

尖叫提示:注意參數(shù)的順序
一個jar 就是一個Application
一個Action 操作就是一個job
每個job又分多個task組
每個task組就稱為stage
每個task又被分配到多個節(jié)點上
由Executor執(zhí)行
每個task只能執(zhí)行在一個節(jié)點的一個分區(qū)上
多個task并行計算一個RDD

2)參數(shù)解析

(1)--class 指定jar包中的主類
(2)--master 指定集群的地址
(3)--deploy-mode 可選羡棵,默認是client模式壹若,注意client模式和cluster模式的區(qū)別
(4)--conf 指定配置屬性
(5)指定jar包地址
(6)指定jar包的參數(shù)

3)提交的組件總結(jié)

Standalone模式
(1)Master:整個集群的管理器,負責分配資源皂冰,單獨的JVM進程
(2)Worker:負責管理Executor店展,單獨的JVM進程
(3)Driver:負責提交Jar包的客戶端,
(4)client模式:Driver運行在提交端
(5)cluster模式:Driver運行在某一個Executor中秃流。
(6)Executor:具體執(zhí)行任務(wù)的容器赂蕴,單獨的JVM進行。
cluster大部分應(yīng)用于企業(yè)開發(fā)舶胀,client應(yīng)用于Debug測試

Yarn模式
(1)ResourceManager
(2)NodeManager
(3)我不用啟動Spark集群
(4)client模式:Driver運行在提交端
(5)cluster模式:spark app master 在Executor 運行

23概说、查看程序執(zhí)行結(jié)果

[victor@node1 hadoop-2.8.2]$ bin/hadoop fs -cat /RWC_out/*
(-Psparkr,1)
(Spark,1)
(-Pyarn,1)
(Build,1)
(built,1)
(-DzincPort=3036,1)
(flags:,1)
(-Phive-thriftserver,1)
(-Pmesos,1)
(for,1)
(-Phive,1)
(2.7.3,1)
(-Phadoop-2.7,1)
(2.2.0,1)
(Hadoop,1)

尖叫提示:hdfs dfs -cat hdfs://node1:9000/RWC_out/p* 方式查看也可以

Job

Stage

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嚣伐,隨后出現(xiàn)的幾起案子糖赔,更是在濱河造成了極大的恐慌,老刑警劉巖轩端,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件放典,死亡現(xiàn)場離奇詭異,居然都是意外死亡基茵,警方通過查閱死者的電腦和手機奋构,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拱层,“玉大人弥臼,你說我怎么就攤上這事「疲” “怎么了径缅?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烙肺。 經(jīng)常有香客問我芥驳,道長,這世上最難降的妖魔是什么茬高? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任兆旬,我火速辦了婚禮,結(jié)果婚禮上怎栽,老公的妹妹穿的比我還像新娘丽猬。我一直安慰自己宿饱,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布脚祟。 她就那樣靜靜地躺著谬以,像睡著了一般。 火紅的嫁衣襯著肌膚如雪由桌。 梳的紋絲不亂的頭發(fā)上为黎,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音行您,去河邊找鬼铭乾。 笑死,一個胖子當著我的面吹牛娃循,可吹牛的內(nèi)容都是我干的炕檩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼捌斧,長吁一口氣:“原來是場噩夢啊……” “哼笛质!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捞蚂,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤妇押,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姓迅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敲霍,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年队贱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潭袱。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柱嫌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屯换,到底是詐尸還是另有隱情编丘,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布彤悔,位于F島的核電站嘉抓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晕窑。R本人自食惡果不足惜抑片,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杨赤。 院中可真熱鬧敞斋,春花似錦截汪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焰枢,卻和暖如春蚓峦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背济锄。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工暑椰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拟淮。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓干茉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親角虫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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