1. 程式人生 > >用idea在Windows下構建spark2.2.0的環境

用idea在Windows下構建spark2.2.0的環境

首先,本人菜雞一隻,如果有說的不對的地方,還請各位指點指點!如果有什麼問題也可以相互交流,給我留言或者私信~

說明下,之前的環境是:

jdk-1.7,scala-2.10.4,spark-1.6.1,開發工具是idea

然後鄙人想測試下最新的spark2.2.0的版本
因此基於之前的環境配置了些新的東西:

這是新的版本

jdk-1.8.0_77,spark-2.2.0,scala-2.11.8

思考:需要做的其實就是在idea中新建一個簡單的java的maven專案,然後新增scala的sdk,然後修改pom檔案(把spark的相關依賴新增進去)

一、

下載對應的工具:可以自行百度,去各自官網上下載,然後這裡我提供個java+scala的包,免安裝版的(手動配置環境變數)

scala2.11.8下載點:(下載對應版本)http://www.scala-lang.org/download/2.11.8.html

java的我不用說了吧。

spark就官網下載下就可以了,甚至Windows上執行spark直接都不用下載,直接maven新增pom就可以了,最後會給大家提供一個pom簡單的

二、

接下來,最好配置下環境變數,就JAVA_HOME,SCALA_HOME。

三、

隨便建立一個java的maven專案,然後新增scala的環境




這樣你就能在這個maven專案中寫scala程式碼了。


四、

修改pom檔案,這裡提供一個簡單的給大家

<?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>spark2.2</groupId>
    <artifactId>spark2.2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <scala.version>2.11.8</scala.version>
        <scala.binary.version>2.11</scala.binary.version>
        <spark.version>2.2.0</spark.version>
    </properties>
    <repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </repository>
    </repositories>
    <dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11 -->
    <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>
</dependencies>

<build>
<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.3</version>
        <configuration>
            <classifier>dist</classifier>
            <appendAssemblyId>true</appendAssemblyId>
            <descriptorRefs>
                <descriptor>jar-with-dependencies</descriptor>
            </descriptorRefs>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>
</project>

這只是最簡單的core,sql,streaming三個模組,如果要新增其他的,去中央倉庫查詢,或者去spark的官網上找對應的模組(注意版本)

如果你有讀取各種各樣型別的資料來源的需求,又不知道jar在哪裡,

請使用如下的兩個網站:

https://spark-packages.org/
https://github.com/databricks/

五、

然後就可以建立一個scala的object來測試了!

(附上官網的案例,或者你可以自己隨便寫,和1.x的版本的區別就是多了個SparkSession)。

import org.apache.spark.sql.SparkSession

object sparksessionDemo {
  def main(args: Array[String]) {
    val logFile = "data/groupsort.txt" // Should be some file on your system
    val spark = SparkSession.builder.master("local").appName("Simple Application").getOrCreate()
    val logData = spark.read.textFile(logFile).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    spark.stop()
  }
  
}

六、在環境除錯中遇到的各自各樣的報錯,在此稍微整理下

1、java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$

這個問題理論上來說應該是jar包有問題,要麼是版本不對,要麼是jar包沒引入,就是說pom裡面寫的有問題,按照我上面給的模板去修改,應該是可以避免這個錯誤。

2、Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/network/util/ByteUnit : Unsupported major.minor version 52.0

這個問題,其實是java的問題,就是你的scala2.11.8用的其實是jdk1.8的環境編譯的,但是你的專案當中的jdk是1.7的結果就會導致這個問題,把這個專案的jdk換成1.8的就可以。




3、Error:scalac: bad option: '-make:transitive'


當版本都確定好了之後,又報了這個錯誤,很煩!

這個是idea上寫scala的關閉idea

解決方法如下:
-1、開啟專案所在位置找到.idea這個資料夾,進入

-2、修改scala_compiler.xml檔案

-3、刪除掉引數行包含-make:transitive

-4、儲存後退出編輯並重啟idea開啟專案

-5、再次執行,解決該問題


以上的東西,差不多就是鄙人這次搭建這個環境所遇到的問題,如果大家在測試的過程中,還有遇到一些奇奇怪怪的問題,歡迎一起探討!~