1. 程式人生 > >【Spark筆記】Windows10 本地搭建單機版Spark開發環境

【Spark筆記】Windows10 本地搭建單機版Spark開發環境

語句 spl 嘗試 spa efi 下載界面 RR 是否 錯誤

0x00 環境及軟件

1、系統環境

OS:Windows10_x64 專業版

2、所需軟件或工具

  • JDK1.8.0_131
  • spark-2.3.0-bin-hadoop2.7.tgz
  • hadoop-2.8.3.tar.gz
  • scala-2.11.8.zip
  • hadoop-common-2.2.0-bin-master.zip(主要使用裏面的winutils.exe)
  • IntelliJ IDEA(版本:2017.1.2 Build #IU-171.4249.32,built on April 21,2017)
  • scala-intellij-bin-2017.1.20.zip(IntelliJ IDEA scala插件)
  • apache-maven-3.5.0

0x01 搭建步驟

1、安裝JDK

從http://www.oracle.com/technetwork/java/javase/downloads/index.html處下載相應版本的JDK安裝文件,安裝教程不再贅述,最終安裝後的路徑如下(由於之前就安裝過JDK了,所以此處顯示時間為2017年的):

技術分享圖片

在環境變量中配置JDK信息,新建變量JAVA_HOME=C:\SelfFiles\Install\Java\jdk1.8.0_131,並在Path中添加JDK信息%JAVA_HOME%\bin,如下:

技術分享圖片

然後,打開一個命令行界面,驗證JDK是否正確安裝,如下:

技術分享圖片

說明JDK已經正常安裝。

2、安裝Scala

從https://www.scala-lang.org/download/all.html 處下載scala-2.11.8,然後解壓並存放在本地電腦C:\SelfFiles\Install\scala-2.11.8處,然後配置環境變量並添加到Path變量中(%SCALA_HOME%\bin),類似於JDK的環境變量配置,如下:

技術分享圖片

然後,打開一個命令行界面驗證是否安裝成功,如下:

技術分享圖片

說明安裝成功。

3、安裝Hadoop

在http://hadoop.apache.org/releases.html下載hadoop-2.8.3,其實下一步“安裝Spark”中我們選擇下載的Spark版本為spark-2.3.0-bin-hadoop2.7,該版本Spark要求對應的Hadoop要在2.7及以上版本,所以此處我們選擇Hadoop-2.8.3,選擇其他更高的版本也是可以的。然後解壓並存放在C:\SelfFiles\Spark\hadoop-2.8.3,並添加環境變量並添加到Path變量中(%HADOOP_HOME%和%HADOOP_HOME%\bin):

技術分享圖片

4、安裝Spark

在http://spark.apache.org/downloads.html下載對應版本的Spark,此處我們下載的Spark版本信息如下:

技術分享圖片

下載到本地之後解壓,並存放在目錄C:\SelfFiles\Spark\spark-2.3.0-bin-hadoop2.7,然後添加環境變量和Path變量中(%SPARK_HOME%和%SPARK_HOME%\bin):

技術分享圖片

到此,單機版的Spark環境應該安裝好了,此時我們在命令行界面中運行spark-shell來驗證是否成功:

技術分享圖片

雖然最終進入到了spark shell中,但是中間報了一個錯誤,提示找不到C:\SelfFiles\Spark\hadoop-2.8.3\bin\winutils.exe文件,通過查看發現確實不存在該文件,此時我們需要從https://github.com/srccodes/hadoop-common-2.2.0-bin/tree/master/bin此處下載winutils.exe文件,並保存到本地C:\SelfFiles\Spark\hadoop-2.8.3\bin\目錄下。然後再次運行spark-shell,結果如下:

技術分享圖片

可以發現,已經不再報找不到winutils.exe文件的錯誤了,至於提示“WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform...”的錯誤,嘗試了網上大多數的方法,都未解決,此處暫時未解決。

至此,Spark的環境算是基本搭建完成了。下面就開始搭建使用Scala的開發環境。

5、安裝IDEA及scala插件

至於IDEA的下載和安裝,此處不再贅述,讀者可以去https://www.jetbrains.com/自行下載並安裝。此處主要記錄下scala插件的安裝,IDEA的插件安裝支持在線安裝和離線安裝,我們此處采用的是離線安裝,即手動下載將要安裝的scala插件,然後在IDEA中加載安裝。

首先,我們從JetBrains官網上的插件庫(http://plugins.jetbrains.com/)搜索scala插件,如下所示:

技術分享圖片

然後,點擊第一個Scala進入下載界面,如下:

技術分享圖片

上面列舉了兼容不同IDEA構建版本的scala插件,所以此處我們應該選擇兼容自己所用IDEA版本的scala插件。從從前面的0x00一節知道,我這裏使用的IDEA版本為2017.1.2 Build #IU-171.4249.32,built on April 21,2017,所以此時我們應該選擇COMPATIBLE BUILDS一列的值範圍包括171.4249.32的版本,可選擇的比較多,我們隨便選擇一個下載即可,然後保存到本地的某個路徑下,最好是保存在IDEA安裝目錄裏的plugins目錄下,我的保存路徑為:C:\SelfFiles\Install\IntelliJIDEA\plugins\Scala\scala-intellij-bin-2017.1.20.zip。

接著,打開IDEA,選擇File-->Settings...,可見如下界面:

技術分享圖片

然後單擊右下角的“Install plugin from disk...”,選擇剛剛我們保存的scala插件文件即可,安裝成功後重啟IDEA即可使用。

其實,如果網絡比較好的話,使用在線安裝更方便,此處也提一下在線安裝的方法:在上面界面中,點擊“Install JetBrains plugin...”或“Browse repositories...”,出現以下界面:

技術分享圖片

在上述界面搜索框中輸入scala即可找到scala插件,然後點擊右側的“Install”安裝即可。然後,我們可以通過新建項目來驗證scala插件是否安裝成功,如下:

技術分享圖片

6、配置maven

maven的下載和配置網絡上面已經有很多教程,此處不再贅述。

7、編寫測試代碼

下面我們就是用IDEA來編寫一個使用Spark進行數據處理的簡單示例,該例子來自https://my.oschina.net/orrin/blog/1812035,並根據自己項目的名稱做輕微修改,創建maven工程,項目結構如下所示:

技術分享圖片

pom.xml文件內容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.hackhan.demo</groupId>
 8     <artifactId>jacklee</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11 
12     <properties>
13         <spark.version>2.3.0</spark.version>
14         <scala.version>2.11</scala.version>
15     </properties>
16 
17     <dependencies>
18         <dependency>
19             <groupId>org.apache.spark</groupId>
20             <artifactId>spark-core_${scala.version}</artifactId>
21             <version>${spark.version}</version>
22         </dependency>
23         <dependency>
24             <groupId>org.apache.spark</groupId>
25             <artifactId>spark-streaming_${scala.version}</artifactId>
26             <version>${spark.version}</version>
27         </dependency>
28 
29         <dependency>
30             <groupId>org.apache.spark</groupId>
31             <artifactId>spark-sql_${scala.version}</artifactId>
32             <version>${spark.version}</version>
33         </dependency>
34         <dependency>
35             <groupId>org.apache.spark</groupId>
36             <artifactId>spark-hive_${scala.version}</artifactId>
37             <version>${spark.version}</version>
38         </dependency>
39         <dependency>
40             <groupId>org.apache.spark</groupId>
41             <artifactId>spark-mllib_${scala.version}</artifactId>
42             <version>${spark.version}</version>
43         </dependency>
44 
45     </dependencies>
46 
47     <build>
48         <plugins>
49 
50             <plugin>
51                 <groupId>org.scala-tools</groupId>
52                 <artifactId>maven-scala-plugin</artifactId>
53                 <version>2.15.2</version>
54                 <executions>
55                     <execution>
56                         <goals>
57                             <goal>compile</goal>
58                             <goal>testCompile</goal>
59                         </goals>
60                     </execution>
61                 </executions>
62             </plugin>
63 
64             <plugin>
65                 <groupId>org.apache.maven.plugins</groupId>
66                 <artifactId>maven-compiler-plugin</artifactId>
67                 <version>3.6.0</version>
68                 <configuration>
69                     <source>1.8</source>
70                     <target>1.8</target>
71                 </configuration>
72             </plugin>
73 
74             <plugin>
75                 <groupId>org.apache.maven.plugins</groupId>
76                 <artifactId>maven-surefire-plugin</artifactId>
77                 <version>2.19</version>
78                 <configuration>
79                     <skip>true</skip>
80                 </configuration>
81             </plugin>
82 
83         </plugins>
84     </build>
85 
86 </project>

WordCount.scala文件內容如下:

 1 package com.hackhan.demo
 2 
 3 import org.apache.spark.{SparkConf, SparkContext}
 4 
 5 
 6 /**
 7   *
 8   * @author migu-orrin on 2018/5/3.
 9   */
10 object WordCount {
11   def main(args: Array[String]) {
12 
13     /**
14       * SparkContext 的初始化需要一個SparkConf對象
15       * SparkConf包含了Spark集群的配置的各種參數
16       */
17     val conf=new SparkConf()
18       .setMaster("local")//啟動本地化計算
19       .setAppName("WordCount")//設置本程序名稱
20 
21     //Spark程序的編寫都是從SparkContext開始的
22     val sc=new SparkContext(conf)
23     //以上的語句等價與val sc=new SparkContext("local","testRdd")
24     val data=sc.textFile("C:/SelfFiles/Spark/test/wordcount.txt")//讀取本地文件
25     var result = data.flatMap(_.split(" "))//下劃線是占位符,flatMap是對行操作的方法,對讀入的數據進行分割
26       .map((_,1))//將每一項轉換為key-value,數據是key,value是1
27       .reduceByKey(_+_)//將具有相同key的項相加合並成一個
28 
29     result.collect()//將分布式的RDD返回一個單機的scala array,在這個數組上運用scala的函數操作,並返回結果到驅動程序
30       .foreach(println)//循環打印
31 
32     Thread.sleep(10000)
33     result.saveAsTextFile("C:/SelfFiles/Spark/test/wordcountres")
34     println("OK,over!")
35   }
36 }

其中處理的目標文件C:/SelfFiles/Spark/test/wordcount.txt的內容為(你也可以自己隨意填寫):

this is my first test.

運行結果如下:

技術分享圖片

IDEA打印結果:

技術分享圖片

0x02 總結

因本人也是剛剛接觸Spark,對其中的一些原理還不是很了解,此處寫此博文只為搭建環境的一個記錄,後面隨著學習的深入,可以逐漸了解其中的原理。以後也許會考慮搭建集群環境!

在此,感謝網友為知識和技術傳播做出的貢獻!

0x03 參考內容

  • https://my.oschina.net/orrin/blog/1812035
  • https://blog.csdn.net/songhaifengshuaige/article/details/79480491

【Spark筆記】Windows10 本地搭建單機版Spark開發環境