IntelliJ IDEA Windows下Spark开发环境部署

本文详细介绍了如何在Windows和CentOS环境下搭建Spark开发环境,并通过具体实例演示了如何使用Spark进行WordCount任务的开发流程。

0x01 环境说明

博客地址:http://www.cnblogs.com/ning-wang/p/7359977.html

1.1 本地

OS: windows 10
jdk: jdk1.8.0_121
scala: scala-2.11.11
IDE: IntelliJ IDEA ULTIMATE 2017.2.1

1.2 服务器

OS: CentOS_6.5_x64
jdk: jdk1.8.111
hadoop: hadoop-2.6.5
spark: spark-1.6.3-bin-hadoop2.6
scala: scala-2.11.11

0x02 windows端配置

2.1 安装jdk

配置环境变量

JAVA_HOME
CLASSPATH
Path

2.2 配置hosts

2.2.1 文件位置

C:\Windows\System32\drivers\etc

2.2.2 新增内容

和集群的hosts文件内容一样

192.168.1.100    master
192.168.1.101    slave1
192.168.1.102    slave2

2.2.3 安装IntelliJ IDEA

注意插件安装Maven

2.2.4 IDEA中安装scala插件

clipboard.png

0x03 服务器端配置

3.1 安装jdk

3.2 安装hadoop

配置远程访问权限

3.3 安装spark

0x04 测试

4.1 新建maven项目

clipboard.png

4.2 添加依赖包

File -> Project Structure -> Libraries添加spark-assembly-1.6.3-hadoop2.6.0.jar(位置在服务器端spark/lib/下)

clipboard.png

4.3 新建ConnectionUtil类

src\main\java目录下新建javaConnectionUtil

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;

public class ConnectionUtil {

    public static final String master = "spark://master:7077";

    public static void main(String[] args) {

        SparkConf sparkConf = new SparkConf().setAppName("demo").setMaster(master);
        JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
        System.out.println(javaSparkContext);
        javaSparkContext.stop();
  }
}

4.4 编译运行

clipboard.png

如果出现上图结果则证明,运行正确。

4.5 运行JavaWordCount

4.5.1 数据准备

随便准备一个文档格式不限,上传到hdfs上。

$ vim wordcount.txt
hello Tom
hello Jack
hello Ning
# 上传文件
$ hadoop fs -put wordcount.txt /user/hadoop/
# 查看文件是否上传成功
$ hadoop fs -ls /user/hadoop/

4.5.2 代码

spark安装包中的example,指定了jar包和输入文件的路径。

import scala.Tuple2;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public final class JavaWordCount {
    private static final Pattern SPACE = Pattern.compile(" ");
 public static void main(String[] args) throws Exception {
//      if (args.length < 1) {
//        System.err.println("Usage: JavaWordCount <file>");
//        System.exit(1);
//      }
  SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount")
            .setMaster("spark://master:7077")
            .set("spark.executor.memory", "512M");
  JavaSparkContext ctx = new JavaSparkContext(sparkConf);
  ctx.addJar("D:\\workspace\\spark\\JavaWordCount.jar");
  String path = "hdfs://master:9000/user/hadoop/wordcount.txt";
  JavaRDD<String> lines = ctx.textFile(path);
  JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
      @Override
  public Iterable<String> call(String s) {
        return Arrays.asList(SPACE.split(s));
  }
    });
  JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
        @Override
  public Tuple2<String, Integer> call(String s) {
            return new Tuple2<String, Integer>(s, 1);
  }
    });
  JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
        @Override
  public Integer call(Integer i1, Integer i2) {
            return i1 + i2;
  }
    });
  List<Tuple2<String, Integer>> output = counts.collect();
 for (Tuple2<?,?> tuple : output) {
        System.out.println(tuple._1() + ": " + tuple._2());
  }
    ctx.stop();
  }
}

4.5.3 打包

非常重要,否则运行会出现各种错误,甚至无法运行
File -> Project Structure ->Artifacts点击绿色“+”,Add-->JAR-->From Modules with Dependencies

clipboard.png

输入main class入口函数名,将Output Layout下所有jar包删掉(因为spark运行环境已经包含了这些包),如果已经存在META-INF要先将这个文件夹删除。然后Apply,OK
编译程序:Build-->Build Artifacts...,然后选择要编译的项目进行编译

clipboard.png

在当前工程生成的out目录下就可以找到输出的jar包,放到程序中指定的位置(就是addJar()方法中所设置的路径)

clipboard.png

4.5.4 运行程序

clipboard.png

0x05 出现的问题

5.1 找不到scala.Cloneable的类文件

问题描述:java: 无法访问scala.Cloneable 找不到scala.Cloneable的类文件
原因:原来使用的是spark-2.1.0-bin-hadoop2.4没有spark-assembly-1.6.3-hadoop2.6.0.jar依赖包所致。
解决:因为原来是用的hadoop版本为2.5.2相应的依赖包官网已经不再支持,所以更新的平台的hadoop环境为2.6.5,spark 2.X相应的文档很少,更改版本为1.6.3

Create: 2017-08-12 10:33:55 星期六
Update: 2017-08-14 20:10:47 星期一
update: 2017.10.17
由为知笔记迁移到SF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值