環境如下:(更新了林子雨教程中不可使用的部分)
Hadoop 2.6.0以上
java JDK 1.7以上
Spark 3.0.0-preview2
二、java獨立應用編程(在下載依賴jar包的過程中如遇到卡頓現象可以Ctrl+C停止下載,然后重新執行本條命令即可繼續下載相應的依賴jar包)
1、安裝maven
ubuntu中沒有自帶安裝maven,需要手動安裝maven。可以訪問maven官方下載自己下載。這里直接給出apache-maven-3.6.3-bin.zip的下載地址,直接點擊下載即可。
選擇安裝在/usr/local/maven中:
sudo unzip ~/下載/apache-maven-3.6.3-bin.zip -d /usr/local
cd /usr/local
sudo mv apache-maven-3.6.3/ ./maven
sudo chown -R hadoop ./maven
2、Java應用程序代碼
在終端執行如下命令創建一個文件夾sparkapp2作為應用程序根目錄
cd ~ #進入用戶主文件夾
mkdir -p ./sparkapp2/src/main/java
在 ./sparkapp2/src/main/java 下建立一個名為 SimpleApp.java 的文件(vim ./sparkapp2/src/main/java/SimpleApp.java),添加代碼如下:
/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
public class SimpleApp {
public static void main(String[] args) {
String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
"file:///usr/local/spark/", new String[]{"target/simple-project-1.0.jar"});
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);
}
}
該程序依賴Spark Java API,因此我們需要通過Maven進行編譯打包。在./sparkapp2中新建文件pom.xml(vim ./sparkapp2/pom.xml),添加內容如下,聲明該獨立應用程序的信息以及與Spark的依賴關系:
<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>
<repositories>
<repository>
<id>Akka repository</id>
<url>http://repo.akka.io/releases</url>
</repository>
</repositories>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0-preview2</version>
</dependency>
</dependencies>
<!-- 如果不加下面這段可能會報錯 -->
<build> <pluginManagement> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> </plugin> </plugins> </pluginManagement> </build>
</project>
關於Spark dependency的依賴關系,可以訪問
The Central Repository。搜索spark-core可以找到相關依賴關系信息。

3、使用maven打包java程序
為了保證maven能夠正常運行,先執行如下命令檢查整個應用程序的文件結構:
cd ~/sparkapp2
find
文件結構如下圖:
接着,我們可以通過如下代碼將這整個應用程序打包成Jar(注意:電腦需要保持連接網絡的狀態,而且首次運行同樣下載依賴包,同樣消耗幾分鍾的時間(筆者耗時2個小時左右,下載時的實時網速只有十幾K,具體原因暫時不詳)):
/usr/local/maven/bin/mvn package
如出現下圖,說明生成Jar包成功:
4、通過spark-submit 運行程序
最后,可以通過將生成的jar包通過spark-submit提交到Spark中運行,如下命令:
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar 2>&1 | grep "Lines with a"
最后得到的結果如下:
本博客參考了林子雨的大數據原理與應用 第十六章 Spark 學習指南 http://dblab.xmu.edu.cn/blog/804-2/