IntelliJ IDEA Windows下Spark開發環境部署

0x01 環境說明

1.1 本地

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

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.11java

0x02 windows端配置

2.1 安裝JDK

配置環境變量apache

JAVA_HOME
CLASSPATH
Path

2.2 配置hosts

文件位置vim

C:\Windows\System32\drivers\etcwindows

新增以下內容(和集羣的hosts文件內容同樣,根據本身集羣的實際狀況修改)api

192.168.1.10    master
192.168.1.11    slave1
192.168.1.12    slave2

2.3 安裝IntelliJ IDEA

  • 注意插件安裝Maven

2.4 IDEA中安裝scala插件

0x03 服務器端配置

3.1 安裝JDK

3.2 安裝Hadoop

3.3 安裝Spark

0x04 測試

4.1 新建maven項目

4.2 添加依賴包

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

4.3 新建ConnectionUtil類

src\main\java目錄下新建javaConnectionUtilintellij-idea

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 編譯運行

若是出現上圖結果則證實,運行正確。maven

4.5 運行JavaWordCount

  • 數據準備,隨便準備一個文檔格式不限,上傳到hdfs上。
$ vim wordcount.txt
hello Tom
hello Jack
hello Ning
# 上傳文件
$ hadoop fs -put wordcount.txt /user/hadoop/
# 查看文件是否上傳成功
$ hadoop fs -ls /user/hadoop/
  • 代碼(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();
  }
}
  • 打包很是重要,不然運行會出現各類錯誤,甚至沒法運行

File -> Project Structure ->Artifacts點擊綠色「+」,Add-->JAR-->From Modules with Dependencieside

輸入main class入口函數名,將Output Layout下全部jar包刪掉(由於spark運行環境已經包含了這些包),若是已經存在META-INF要先將這個文件夾刪除。而後Apply,OK
編譯程序:Build-->Build Artifacts...,而後選擇要編譯的項目進行編譯

在當前工程生成的out目錄下就能夠找到輸出的jar包,放到程序中指定的位置(就是addJar()方法中所設置的路徑)

  • 運行程序,結果以下

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 星期六 Update1: 2017-08-14 20:10:47 星期一

相關文章
相關標籤/搜索