为什么80%的码农都做不了架构师?>>>
本文主要介绍在window平台上,spark官方代码例子直接在idea中运行和测试。
1、saprk官网(http://spark.apache.org/downloads.html)下载spark 2.3.2,并解压在D:\project\idea_spark\spark-2.3.2目录
2、执行maven命令下载相关依赖包
设置环境变量path的git命令目录
不然执行后边maven命令时,可能会报下边错误:
Execute failed: java.io.IOException: Cannot run program "bash"
设好环境变量后
命令行在D:\project\idea_spark\spark-2.3.2目录中运行命令
mvn idea:idea
这个命令主要是为了下载spar源码依赖的相关jar包和插件,如果直接使用idea导入spark源码,有可能会因为下载jar包(网速过慢)导致加载源码失败而运行不成功。
这个过程网速好的话,可能10来分钟执行完成,也可能执行大半天才完成。
3、idea导入,菜单File->New->Project from Existing Source..,选中D:\project\idea_spark\spark-2.3.2目录导入,Import Project中选中maven导入
按上图选择框选择,然后其它窗口一路Next。
4、导入完成后,菜单File->Project Structure,设置spark-expamples_2.11项目的maven依赖包的scope值由provided改为Compile
5、Build->Rebuild Project重新建项目,
如果不rebuild,可能会出现下边报错
Exception in thread "main" java.lang.Exception: Could not find resource path for Web UI: org/apache/spark/ui/static
6、spark运行是依赖于hadoop的,因此需要添加hadopp程序。如果不添加,会报下边错误
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
下载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
7、运行代码
以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 l = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
l.add(i);
}
JavaRDD 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中直接鼠标右键运行,运行结果如下