Các bài viết về Apache Spark
Phần 1: Hướng Dẫn Cài Apache Spark Trên Ubuntu
Phần 2: Một chương trình Apache Spark siêu đơn giản
Phần 3: Tạo Fat Jar cho chương trình Apache Spark
Trong bài viết này, mình hướng dẫn các bạn tạo 1 chương trình siêu đơn giản bằng ngôn ngữ Scala
Yêu cầu
Đã cài Apache Spark
1. Cài sbt
sbt là công cụ biên dịch (build tool) scala thành gói jar. Nó tương tự với Maven, Gradle mà chúng ta thường dùng để biên dịch Java.
Vào https://www.scala-sbt.org/download.html sẽ có hướng dẫn cụ thể, đúng với nền tảng bạn đang dùng (Windows, Linux, MacOS, …) . Mình khuyên các bạn nên dùng hệ điều hành Ubuntu.
Đối với Ubuntu thì câu lệnh như sau (cập nhật ngày 10 tháng 2 năm 2021) các bạn nên kiểm tra lại trong trường hợp link có thay đổi
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo apt-key add
sudo apt-get update
sudo apt-get install sbt
Kiểm tra bằng câu lệnh
sbt --version

2. Tạo cấu trúc tập tin cho chương trình siêu đơn giản
build.sbt
src/main/scala/SimpleApp.scala
Bạn tạo 2 tập tin, build.sbt và SimpleApp.scala.
2.1 Nội dung build.sbt
Đây là tập tin mà sbt đọc để biên dịch jar cho bạn. Trong đó, bạn phải chọn version của spark trùng với phiên bản bạn đã cài trong Phần 1.
name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.10"
// https://mvnrepository.com/artifact/org.apache.spark/spark-sql
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.0.1"
Hãy tham khảo mvnrepository để lấy mã, và xem scala version phù hợp. Ví dụ như mình đã cài spark 3.0.1
Bạn search từ khóa sau “maven spark sql” sẽ tìm ra https://mvnrepository.com/artifact/org.apache.spark/spark-sql

Chọn dòng 3.0.1, ta được như sau:

Chọn tab SBT và copy đoạn mã vào build.sbt.
Đồng thời kiểm tra mục Scala Target (2.12) phải giống với dòng scalaVersion trong build.sbt của bạn (2.12.10 cũng thuộc version 2.12, nhưng 2.11 hay 2.13 sẽ không chạy được)
2.2 Nội dung SimpleApp.scala
Đây là mã thực thi của chương trình.
/* SimpleApp.scala */ import org.apache.spark.sql.SparkSession /* * SimpleApp follow example on Apache Spark quick start documentation. * Original URL: https://spark.apache.org/docs/latest/quick-start.html */ object SimpleApp { def main(args: Array[String]) { var mySparkHome = "/home/tt/Software/spark-3.0.1-bin-hadoop2.7" val logFile = mySparkHome + "/README.md" // Should be some file on your system val spark = SparkSession.builder.appName("Simple Application").getOrCreate() val logData = spark.read.textFile(logFile).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println(s"log file dir is $logFile") println(s"Lines with a: $numAs, Lines with b: $numBs") spark.stop() } }
3. Biên dịch và thực thi
3.1 Biên dịch
Từ thư mục gốc của chương trình (nơi chứa build.sbt) ,chạy lệnh
sbt package
Thấy [success] là được

Tập tin được tạo
target/scala-2.12/simple-project_2.12-1.0.jar
3.2 Thực thi
/home/tt/Software/spark-3.0.1-bin-hadoop2.7/bin/spark-submit \
--class "SimpleApp" \
--master local[4] \
target/scala-2.12/simple-project_2.12-1.0.jar
Ý nghĩa:
- class là tên ScalaObject bạn chọn để chạy hàm main
- master local[4] bạn nói cho spark sử dụng 4 nhân CPU
- target/scala-2.12/simple-project_2.12-1.0.jar là đường dẫn tới file .jar bạn vừa tạo ra ở lệnh sbt package
- Dấu xẹt \ là dấu nối dòng, rất hữu dụng để tách câu lệnh dài ra thành nhiều dòng cho dễ nhìn
Ví dụ về tách câu lệnh ra nhiều dùng bằng dấu \
Câu lệnh sau
cmd a b
Có thể được viết ra 3 dòng
cmd \
a \
b
Ví dụ hoàn chỉnh trên Github