本文主要介绍在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中直接鼠标右键运行,运行结果以下