本文主要介紹在window平臺上,spark官方代碼例子直接在idea中運行和測試。
一、saprk官網(http://spark.apache.org/downloads.html)下載spark 2.3.2,並解壓在D:\project\idea_spark\spark-2.3.2目錄html
二、執行maven命令下載相關依賴包
設置環境變量path的git命令目錄java
否則執行後邊maven命令時,可能會報下邊錯誤:
Execute failed: java.io.IOException: Cannot run program "bash"git
設好環境變量後
命令行在D:\project\idea_spark\spark-2.3.2目錄中運行命令github
mvn idea:idea
這個命令主要是爲了下載spar源碼依賴的相關jar包和插件,若是直接使用idea導入spark源碼,有可能會由於下載jar包(網速過慢)致使加載源碼失敗而運行不成功。
這個過程網速好的話,可能10來分鐘執行完成,也可能執行大半天才完成。sql
三、idea導入,菜單File->New->Project from Existing Source..,選中D:\project\idea_spark\spark-2.3.2目錄導入,Import Project中選中maven導入apache
按上圖選擇框選擇,而後其它窗口一路Next。windows
四、導入完成後,菜單File->Project Structure,設置spark-expamples_2.11項目的maven依賴包的scope值由provided改成Compileapi
五、Build->Rebuild Project從新建項目,
若是不rebuild,可能會出現下邊報錯
Exception in thread "main" java.lang.Exception: Could not find resource path for Web UI: org/apache/spark/ui/staticbash
六、spark運行是依賴於hadoop的,所以須要添加hadopp程序。若是不添加,會報下邊錯誤
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.app
下載https://hadoop.apache.org/releases.html,下載hadoop Binary 2.7.6版本,解壓在D:\hadoop\hadoop-2.7.6
訪問https://github.com/steveloughran/winutils,這個庫提供hadoop在windows上運行的相關文件,把hadoop-2.7.1/bin/(選擇與本地hadoop對應的winutils版本)目錄下的相關文件都放進D:\hadoop\hadoop-2.7.6\bin
七、運行代碼
以spark-2.3.2\examples\src\main\java\org\apache\spark\examples\JavaSparkPi.java爲例子代碼,
package org.apache.spark.examples; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.SparkSession; import java.util.ArrayList; import java.util.List; public final class JavaSparkPi { public static void main(String[] args) throws Exception { System.setProperty("hadoop.home.dir", "D:/hadoop/hadoop-2.7.6"); // 修改:增長hadoop System.setProperty("HADOOP_USER_NAME", "root"); // 修改:增長用戶 SparkSession spark = SparkSession .builder() .appName("JavaSparkPi") // 修改:添加master("local[*]")爲本地運行模式,必須設置爲 local才能在idea本地上運行 .master("local[*]") .getOrCreate(); JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext()); int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2; int n = 100000 * slices; List<Integer> l = new ArrayList<>(n); for (int i = 0; i < n; i++) { l.add(i); } JavaRDD<Integer> dataSet = jsc.parallelize(l, slices); int count = dataSet.map(integer -> { double x = Math.random() * 2 - 1; double y = Math.random() * 2 - 1; return (x * x + y * y <= 1) ? 1 : 0; }).reduce((integer, integer2) -> integer + integer2); System.out.println("Pi is roughly " + 4.0 * count / n); spark.stop(); } }
完成上邊設置,能夠idea中直接鼠標右鍵運行,運行結果以下