雖然 Spark本身也支援 Java開發,但是要使用 java lib 則需用 scala or python call java library
這個練習目的是 單純使用 java 語法呼叫 Spark API 利用 Maven build jar
之後使用 spark-submit 來執行程式
首先當然需要安裝 Maven,我是將 Maven 安裝在我的 Windows環境(可對外),原因是我的Spark環境不可連網, Maven請至 這裡 Download , 因為 Maven build jar 會利用到 JDK 所以也請您事先安裝好 JDK 版本,都安裝好後請使用 mvn --version 來確認是否安裝完成
這邊建議您的JDK版本不要太新,我先前使用了1.8.0.51的版本,發現我使用 mvn package時會失敗,而且記得設定 JAVA_HOME至環境變數
待會我們將在Windows環境利用 Maven 建置 java jar,之後利用 WinSCP將檔案傳至 Spark Linux 環境後執行程式
首先我在桌面建置了名為Spark的目錄,接著再建立了一個名為 java_source的目錄,此時使用記事本建立一個檔名為 pom.xml 的檔案(maven 建置時所使用的檔案)
檔案內容如下:
<project>
<groupId>edu.berkeley</groupId>
<artifactId>simple-project</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Simple Project</name>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
</project>
然後依目錄結構 依序建立了 3個目錄 /src,/src/main,/src/main/java
在最後的java目錄下建立了一個檔案名為 SimpleApp.java
檔案內容如下:
/* SimpleApp.java */
import org.apache.spark.api.java.*;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;
public class SimpleApp {
public static void main(String[] args) {
String logFile = "/opt/SparkLogFile.log"; // Should be some file on your system
SparkConf conf = new SparkConf().setAppName("Simple Application");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> logData = sc.textFile(logFile).cache();
long numAs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("a"); }
}).count();
long numBs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("b"); }
}).count();
System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
}
}
注意一下內容 /opt/SparkLogFile.log 是我在 Linux 環境所要測試的資料目錄,請記得修改成您的檔案路徑,此程式主要是調用 Spark API 並計算文件中包含字母"a"和"b"的行數各有幾行
接著請在命令提示字元,至java_source目錄下(pom.xml所在)執行指令 mvn package
結果如下
這時會發現與 src同一層的目錄中出現了一個名為 target 的目錄點連去就有建立好的 simple-project-1.0.jar了,該檔案就是待會要在 Spark 環境中執行的 jar 檔
接著請該檔案複製至 Spark Linux環境(我是使用WinSCP工具)
我將該檔案複製至我在Linux上已事先建立的目錄/install_source/java_source下
在執行 Spark-submit之前,如果您還記得程式內容的話,我們必須指定一個file讓Spark來分析
因此我們必須依照程式所設定的路徑/opt下建立一個名為 SparkLogFile.log,我的範例內容如下
如果您上述工作都沒問題的話,就可以執行 spark-submit嘍! 本來應該要至你安裝Spark的bin目錄下執行指令,但是參考前面文章我們已經先將執行目錄設在 Path 了
於是 執行指令看看吧! (請切換至jar所在目錄)
#spark-submit --class simpleApp simple-project-1.0.jar
結果如下圖
#還記得嗎?先前的文章已經在spark-env.sh中預設了我們要執行的instance為2個,所以假設您的環境想run在4個instance下的話,可執行(記得至 spark-env.sh將 worker-instance mark掉,除非您之前尚未預設)
#spark-submit --class simpleApp --master local[4] simple-project-1.0.jar
我的環境執行結果如下
你會發現計算結果已經出現 在 SparkLogFile.log中 含有"a"的有9行,"b"的只有1行
恭喜成功嘍XD
沒有留言:
張貼留言