spark导入在idea中运行

原创
2019/01/22 16:40
阅读数 3.8K

本文主要介绍在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

Caused by: org.apache.spark.SparkException: Could not find spark-version-info.properties
 

resource文件夹增加文件:spark-version-info.properties
version=3.2.0  #当前spark版本号

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<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中直接鼠标右键运行,运行结果如下

 

 

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部