溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在IDEA中編寫spark程序

發布時間:2020-07-10 17:32:43 來源:網絡 閱讀:2052 作者:原生zzy 欄目:大數據

這里以一個scala版本的word count 程序為例:
①創建一個maven項目:
在IDEA中編寫spark程序在IDEA中編寫spark程序
②填寫maven的GAV:
在IDEA中編寫spark程序
③填寫項目名稱:
在IDEA中編寫spark程序
④ 創建好 maven 項目后,點擊 Enable Auto-Import
在IDEA中編寫spark程序
⑤配置pom.xml文件:

<properties>
    <project.build.sourceEncoding>UTF8</project.build.sourceEncoding> 
  <maven.compiler.source>1.8</maven.compiler.source> 
  <maven.compiler.target>1.8</maven.compiler.target> 
  <encoding>UTF-8</encoding> 
  <scala.version>2.11.8</scala.version> 
  <spark.version>2.3.1</spark.version> 
  <hadoop.version>2.7.6</hadoop.version> 
  <scala.compat.version>2.11</scala.compat.version> 
 </properties>
 <dependencies>
  <dependency>
  <groupId>org.scala-lang</groupId> 
  <artifactId>scala-library</artifactId> 
  <version>${scala.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.spark</groupId> 
  <artifactId>spark-core_2.11</artifactId> 
  <version>${spark.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.spark</groupId> 
  <artifactId>spark-sql_2.11</artifactId> 
  <version>${spark.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.spark</groupId> 
  <artifactId>spark-streaming_2.11</artifactId> 
  <version>${spark.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.spark</groupId> 
  <artifactId>spark-graphx_2.11</artifactId> 
  <version>${spark.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.spark</groupId> 
  <artifactId>spark-mllib_2.11</artifactId> 
  <version>${spark.version}</version> 
  </dependency>
  <dependency>
  <groupId>org.apache.hadoop</groupId> 
  <artifactId>hadoop-client</artifactId> 
  <version>${hadoop.version}</version> 
  </dependency>
</dependencies>

編寫代碼:

object WordCount {
    def main(args: Array[String]): Unit = {
        //獲取集群入口
        val conf: SparkConf = new SparkConf()
        conf.setAppName("WordCount")
        val sc = new SparkContext(conf)
        //從 HDFS 中讀取文件
        val lineRDD: RDD[String] = sc.textFile("hdfs://zzy/data/input/words.txt")
        //做數據處理
        val wordRDD: RDD[String] = lineRDD.flatMap(line=>line.split("\\s+"))
        val wordAndCountRDD: RDD[(String, Int)] = wordRDD.map(word=>(word,1))
        //將結果寫入到 HDFS 中
        wordAndCountRDD.reduceByKey(_+_).saveAsTextFile("hdfs://zzy/data/output")
        //關閉編程入口
        sc.stop()
    }
}

打jar包:
在pom.xml中加入相應的插件:

<build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

然后:
在IDEA中編寫spark程序
在IDEA中編寫spark程序
在IDEA中編寫spark程序
在IDEA中編寫spark程序

將jar包上傳到集群中運行:

spark-submit \
--class com.zy.scala.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 200M \
--executor-memory 200M \
--total-executor-cores 1 \
hdfs://zzy/data/jar/ScalaTest-1.0-SNAPSHOT.jar \

此時在yarn的web就能查看相應的程序的運行進度。
這時候,程序總是異常的結束:
在IDEA中編寫spark程序
我就使用:
yarn logs -applicationId application_1522668922644_40211 查看了一下報錯信息。
結果:not fount class :scala.WordCount.
然后我就在想是不是jar包出現了問題,我就打開了,之前上傳的jar包,果然根本找不到 我打jar的程序,只有一個,META-INF,此時 我就百思不得不得解,然后由重新反復嘗試了很多次,還是解決不了。后來吃個飯回來,突然想到是不是maven不能將scala編寫的程序打成jar包,后來通過百度,發現了:
maven 默認只編譯java 的文件,而不會編譯scala 文件。但是maven 提供了 能夠編譯scala 的類庫。
好心的博主:scala 在IDEA打jar包相關問題:https://blog.csdn.net/freecrystal_alex/article/details/78296851
然后 我修改了pom.xml文件:
http://down.51cto.com/data/2457588
按照上述的步驟,重新的向集群提交了一次任務,結果不盡人意,又出錯了:
但是這一次錯誤和上次的不同(說明上一個問題已經解決):
在IDEA中編寫spark程序
這才明白,原來是Driver進程分配的內存太小了,最少應該大于450M,之后我又修改了 --driver-memory 512M --executor-memory 512M,重新提交任務。結果運行成功?。?!

注意
這里使用的是yarn的任務調用,不是spark自帶的standalone,需要加入的參數:
--master yarn
--deploy-mode cluster
這里的--deploy-mode,使用的是cluster集群模式,client是客戶端模式。
二者的區別是:client表示,在哪個節點提交,Driver就哪里啟動,而cluster模式表示當將Driver放入到集群中啟動。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女