win7下IntelliJ IDEA使用Maven搭建本地spark開發環境及解決執行錯誤

開發環境:IntelliJ IDEA ULTIMATE 2017.2
運行環境:jdk1.8.0_2,scala-2.11.4

安裝jdk和scala

在win7機器上安裝jdk和scala,添加環境變量JAVA_HOME和SCALA_HOME,並追加到Path環境變量中:%JAVA_HOME\bin%;%JAVA_HOME\jre\bin%;%SCALA_HOME%\bin;


在這裏插入圖片描述在這裏插入圖片描述

IDEA導入jdk

安裝完IDEA激活後(激活網址:http://idea.lanyus.com/)進入主界面,點擊菜單File --> Project Structure --> SDKs,點擊+號選擇JDK,在右側選擇jdk的存放位置,點擊OK即可


在這裏插入圖片描述

IDEA導入scala插件

點擊菜單File --> Settings --> Plugins:


在這裏插入圖片描述

在2處搜索框輸入scala,右側出現3所示,如果沒有安裝過,會顯示instal按鈕,這裏我已經安裝了並且是2017.2.0版本所以顯示update,如果直接點擊install則會在線安裝。建議大家先離線下載好IDEA對應的scala插件,不同版本的IDEA對應不同版本的scala插件,插件下載地址:https://plugins.jetbrains.com/plugin/1347-scala。如下圖我找到自己的2017.2.0對應的版本下載:

在這裏插入圖片描述

離線下載好scala插件後,在plugins頁面下點擊Install plugin form disk後選擇插件的存放位置,點擊OK即可


在這裏插入圖片描述

IDEA導入sdk

點擊菜單File --> Project Settings --> Global Libraries,點擊+號的Scala SDK,右側選擇scala的存放路徑,點擊ok即可


在這裏插入圖片描述

IDEA利用Maven創建spark環境

點擊File --> New Project創建新項目,左側選擇Maven,右側依次選擇下圖紅框,點擊Next:


在這裏插入圖片描述

填寫GroupId和ArtifactId,名字任意就行,點擊Next


在這裏插入圖片描述

選擇Maven的目錄,這裏我選擇的是IDEA自帶的Maven,路徑在IDEA安裝目錄下plugins裏,你也可以自己下載Maven然後載入進來,User settings file就是Maven裏的settings.xml,Local repository可以選用默認位置也可以自己修改位置,存放通過Maven下載的各jar包,記得勾選上override,點擊next


在這裏插入圖片描述

填寫Project name和選擇Project存放路徑,點擊Finish即可完成創建


在這裏插入圖片描述

Maven創建好project後,我們修改在settings.xml裏面修改Maven爲國內鏡像,否則下載jar包的速度很慢,這裏我的settings.xml文件位於idea自帶的maven裏,具體是F:\ideaIU-2017.2.win\plugins\maven\lib\maven3\conf\settings.xml,打開settings.xml文件後,在mirrors標籤裏添加如下配置:

  </mirrors>
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

接下來在pom.xml里加入spark所依賴的包,我選用的spark版本是2.0.2,對應的scala版本是2.11.4,spark各種依賴包及其對應的scala version可在https://mvnrepository.com/artifact/org.apache.spark查看,我的spark依賴配置如下:

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spark.version>2.0.2</spark.version>
    <scala.version>2.11.4</scala.version>
    <hadoop.version>2.6.5</hadoop.version>
  </properties>

  <repositories>
    <repository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </pluginRepository>
  </pluginRepositories>

  <dependencies>
    <!-- scala -->
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.11.4</version>
    </dependency>

    <!-- spark -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
      <version>2.0.2</version>
    </dependency>

配置好以上依賴關係後,maven就自動下載所依賴的jar包,存放於Local repository路徑裏。

本地運行spark wordcount示例

在src/main/scala/com.boya下新建一個scala class,選擇類型爲object

package com.boya

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

object wordcount {
  def main(args: Array[String]) {
    /**
    * SparkContext 的初始化需要一個SparkConf對象
    * SparkConf包含了Spark集羣的配置的各種參數
    */
    val conf = new SparkConf()
                .setMaster("local[2]")//啓動本地化計算
                .setAppName("testRdd")//設置本程序名稱
    // Spark程序的編寫都是從SparkContext開始的
    val sc=new SparkContext(conf)
    //以上的語句等價與val sc=new SparkContext("local","testRdd")
    val data=sc.textFile("e://The_Man_of_Property.txt")//讀取本地文件
    data.flatMap(_.split(" "))//下劃線是佔位符,flatMap是對行操作的方法,對讀入的數據進行分割
        .map((_,1))//將每一項轉換爲key-value,數據是key,value是1
        .reduceByKey(_+_)//將具有相同key的項相加合併成一個
        //.sortBy(_._2,false).take(10) // 按照value進行降序排序,取value較大的前10個返回一個array
        .top(10)(Ordering.by(e => e._2))
        .foreach(println)//循環打印

  }
}

若直接運行,會報Failed to locate the winutils binary in the hadoop binary path的錯誤,若程序中用到saveAsTextFile,還會報(null) entry in command string: null chmod 0700的錯誤,解決方法如下:

此時我的win7機器上沒有安裝hadoop和spark,其jar包通過maven依賴引入的。在https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下分別下載winutils.exe、libwinutils.lib和hadoop.dll。
第一,新建hadoop/bin文件夾,將winutils.exe和libwinutils.lib放入hadoop/bin文件夾中,並添加HADOOP_HOME環境變量,比如我是放到E:\hadoop\bin下,則變量值爲E:\hadoop\,然後在Path變量裏追加%HADOOP_HOME%\bin。
第二,將hadoop.dll複製到C:\Windows\System32。

以上兩步完成即可,若還報錯,重啓機器(至少我是這樣解決的),wordcount運行結果如下:


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章