Cho những ai chưa biết thì Spark 3.0 mới release ngày 18/06/2020. Sau đó vài ngày, DataBricks có tổ chức Spark AI Summit 2020. Tuy là 1 sự kiện trực tuyến do ảnh hưởng của Covid 19 nhưng các sessions vẫn rất chất lượng. Mình có join Keynotes 1 vài sessions về Spark và Architect. Bài hôm nay mình sẽ điểm qua 1 vài các tính năng mới của Spark 3.0. Nội dung từ sự kiện của DataBricks vừa rồi cũng như 1 phần mình nghiên cứu.

Apache Spark 3.0

Image for post

Bản cập nhật mới tập trung cải thiện lớn cho Spark SQL, ngoài ra cũng có fix 1 số bug cho các module khác như Spark Core/ ML…

Không phải ngẫu nhiên mà Spark đang ở phiên bản 2.4.x nhảy lên 3.0.0. Rất nhiều tính năng mới được bổ sung ở phiên bản này.

 

Image for post

Highlights các tính năng mới của Spark 3, có thể kể đến như:

  • Tập trung cải thiện hiệu năng cho Spark SQL.
  • Cải thiện các nguồn dữ liệu sẵn có, hỗ trợ thêm file nhị phân.
  • Thêm 1 số built-in functions, tối ưu Pandas UDF.
  • Hỗ trợ Hadoop3, Scala 2.12 và Java11.
  • Thêm UI cho Structured streaming, 1 số metric giúp đơn giản hóa việc vận hành giám sát.
  • Support various Hive metastore versions: “0.12”, “0.13”, “0.14”, “1.0”, “1.1”, “1.2”, “2.0”, “2.1”, “2.2”, “2.3”, “3.0”, “3.1”

Adaptive Query Execution (AQE)

Một số điểm hạn chế trong Query Optimization của Spark 2.x

 

Image for post
  • Việc collect các thông tin statistics phục vụ input cho optimizer có cost lớn, đặc biệt với các câu lệnh phức tạp.
  • Thông tin statistics có thể bị sai, VD với file nén, lúc estimate có dung lượng X nhưng khi compute thực tế lại là dung lượng Y hoặc trong hệ thống phức tạp hay với các hàm UDF (do người dùng định nghĩa).

 

Image for post

Với AQE, Spark 3.0 sẽ thực hiện tối ưu và thay đổi plan ngay lúc runtime. Bao gồm

  • Chuyển đổi Sort Merge Join sang Broadcast Hash Join linh hoạt
  • Hiệu chỉnh số reduces theo ngữ cảnh dữ liệu thực tế.
  • Kiểm soát được Skew join tự động

Dynamic Partition Pruning

Một cải tiến đặc biệt hữu ích trong mô hình dữ liệu dạng star-schema. (Thường dùng để thiết kế CSDL cho các hệ thống BI).

 

Image for post

Với Dynamic Partition Pruning, khi join bảng lớn (bảng fact) với bảng nhỏ hơn (bảng dimension hay bảng dim), thay vì toàn bộ dữ liệu của bảng lớn được load lên và transfer sang các executor cùng key để thực hiện join, Spark sẽ thực thi nhánh của bảng dim (bảng nhỏ) và filter các giá trị output của bảng dim ở bảng fact, giảm đáng kể số lượng dữ liệu cần load lên xử lý dư thừa.

DPP cải thiện rất lớn về hiệu năng, đặc biệt trong các cases mà dữ liệu bảng fact cóa quá nhiều key không thể join với bảng dim, sẽ được loại bỏ ngay từ ban đầu.

Join Optimization Hints

Bằng việc sử dung Adaptive Query Execution, Spark tự động lựa chọn join strategies, tuy nhiên trong trường hợp người dùng chưa hài lòng với tối ưu tự động của spark, ho có thể tự lựa chọn join strategies bằng các sử dụng Join Optimization Hints để lựa chọn join strategies mong muốn.

 

Image for post

ANSI Compliance

Phiên bản 3.0, Spark hỗ trợ ANSI (American National Standards Institute), 1 tiêu chuẩn cho SQL. Điều này cho phép tránh được việc insert dữ liệu khác kiểu vào 1 bảng. VD bảng có field là int hiện nay vẫn cho insert dữ liệu string vào, khi đọc ra mới lỗi.

 

Image for post

Có thể ghi dữ liệu int vào string nhưng không thể làm ngược lại, ANSI cho phép báo lỗi ngay từ khi insert dữ liệu.

 

Image for post

Có thể ghi dữ liệu long vào int khi giá trị long chưa vượt quá range của int (tức là có thể cast mà giá trị không đổi), khi giá trị long lớn hơn khoảng của int, Spark sẽ báo lỗi.

Performance

 

Image for post

Riêng với AQE, các cải thiện về thời gian truy vấn so với version cũ là tương đối tốt.

 

Image for post

Tương tự, Enable Dynamic Partition Pruning giúp các câu truy vấn nhanh hơn đáng kể, từ 2–18 lần.

 

Image for post

Trong các bài tiếp mình sẽ chi tiết hơn về AQE và Dynamic Partition Pruning.

Link bài viết gốc tại đây

Bài viết đăng tải lại dưới sự cho phép của tác giả : thầy Nguyễn Chí Thanh là giảng viên khoá Big Data tại Techmaster