您可以自行編寫並構建包含商務邏輯的JAR包,上傳此業務JAR包後,即可便捷地開發Spark JAR。本文通過兩個樣本,為您示範如何進行JAR任務的開發與部署。
前提條件
-
已建立工作空間,詳情請參見管理工作空間。
-
已提前完成商務應用程式開發,並構建好JAR包。
操作步驟
步驟一:開發JAR包
在EMR Serverless Spark中,不直接提供整合的JAR包開發環境,因此需要您在本地或獨立的開發平台上完成Spark應用的編碼和打包成JAR檔案。本文提供兩個樣本供您參考。
在Maven專案的pom.xml檔案中,需添加與Spark相關的依賴項。鑒於 Serverless Spark 運行環境已內建這些依賴,將 scope 設定為 provided 可避免重複打包和版本衝突,同時仍保留編譯和測試階段的可用性。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
查詢DLF表
public class HiveTableAccess {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.appName("DlfTableAccessExample")
.enableHiveSupport()
.getOrCreate();
spark.sql("SELECT * FROM test_table").show();
spark.stop();
}
}
計算圓周率π近似值
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SparkSession;
import java.util.ArrayList;
import java.util.List;
/**
* Computes an approximation to pi
* Usage: JavaSparkPi [partitions]
*/
public final class JavaSparkPi {
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession
.builder()
.appName("JavaSparkPi")
.getOrCreate();
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2;
int n = 100000 * slices;
List<Integer> l = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
l.add(i);
}
JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);
int count = dataSet.map(integer -> {
double x = Math.random() * 2 - 1;
double y = Math.random() * 2 - 1;
return (x * x + y * y <= 1) ? 1 : 0;
}).reduce((integer, integer2) -> integer + integer2);
System.out.println("Pi is roughly " + 4.0 * count / n);
spark.stop();
}
}
單擊SparkExample-1.0-SNAPSHOT.jar,直接下載測試JAR包。
步驟二:上傳JAR包
-
進入資源上傳頁面。
-
在左側導覽列,選擇EMR Serverless > Spark。
-
在Spark頁面,單擊目標工作空間名稱。
-
在EMR Serverless Spark頁面,單擊左側導覽列中的文件管理。
-
在文件管理頁面,單擊上传文件。
-
在上传文件對話方塊中,單擊待上傳檔案地區選取項目本地JAR包,或者直接拖拽JAR包到待上傳檔案地區。
本文樣本是上傳SparkExample-1.0-SNAPSHOT.jar。
步驟三:開發並運行任務
-
在EMR Serverless Spark頁面,單擊左側的数据开发。
-
在开发目录頁簽下,單擊
表徵圖。 -
輸入名稱,類型選擇,然後單擊确定。
-
在右上方選擇隊列。
添加隊列的具體操作,請參見管理資源隊列。
-
在建立的任務開發中,配置以下資訊,其餘參數無需配置,然後單擊运行。
參數
說明
主 jar 资源
選擇前一個步驟中上傳的JAR包。本文樣本是SparkExample-1.0-SNAPSHOT.jar。
Main Class
提交Spark任務時所指定的主類。
-
計算圓周率π近似值:樣本填寫為
org.example.JavaSparkPi。 -
查詢Hive表:樣本填寫為
org.example.HiveTableAccess。
-
-
運行任務後,在下方的运行记录地區,單擊任務操作列的 日誌探查 ,您可以查看相關的日誌資訊。
在日誌探查面板中,選擇Driver 日誌 > Stdout,查看 stdout.log,輸出結果為
Pi is roughly 3.1403,表示 Spark 任務已成功運行。樣本輸出為一張格式化表格,包含一條記錄:
id=1, name=jay。
步驟四:發布任務
發行的任務可以作為工作流程節點的任務。
-
任務運行完成後,單擊右側的发布。
-
在彈出的對話方塊中,可以輸入發布資訊,然後單擊确定。
(可選)步驟五:查看Spark UI
任務正常運行後,您可以在Spark UI上查看任務的運行情況。
-
在左側導覽列,單擊任务历史。
-
在Application頁面,單擊目標任務操作列的Spark UI。
-
在Spark Jobs頁面,您可以查看任務詳情。
頁面顯示 User 為 root,Scheduling Mode 為 FIFO,Completed Jobs 為 1。已完成的 Job Id 為 0,Description 為
reduce at SparkPi.scala:38,Duration 為 4 s,Stages 為 1/1,Tasks 為 2/2,表示 Spark Pi 任務已成功執行。
相關文檔
任務發布完成後,您可以在工作流程調度中使用,詳情請參見管理工作流程。任務編排完整的開發流程樣本,請參見SparkSQL開發快速入門。