【Spark筆記】Windows10 本地搭建單機版Spark開發環境
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開發環境