OS: windows 10
JDK: jdk1.8.0_121
Scala: scala-2.11.11
IDE: IntelliJ IDEA ULTIMATE 2017.2.1html
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
配置環境變量apache
JAVA_HOME CLASSPATH Path
文件位置vim
C:\Windows\System32\drivers\etc
windows
新增以下內容(和集羣的hosts文件內容同樣,根據本身集羣的實際狀況修改)api
192.168.1.10 master 192.168.1.11 slave1 192.168.1.12 slave2
Maven
File -> Project Structure -> Libraries添加spark-assembly-1.6.3-hadoop2.6.0.jar
(位置在服務器端spark/lib/
下)服務器
在src\main\java
目錄下新建java
類ConnectionUtil
intellij-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(); } }
若是出現上圖結果則證實,運行正確。maven
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()
方法中所設置的路徑)
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 星期一