Spark: Convert Text (CSV) to Parquet để tối ưu hóa Spark SQL và HDFS
Note: This post is over 10 years old. The information may be outdated.
Lưu trữ dữ liệu dưới dạng Columnar như Apache Parquet [1] (https://parquet.apache.org) góp phần tăng hiệu năng truy xuất trên Spark lên rất nhiều lần. Bởi vì nó có thể tính toán và chỉ lấy ra 1 phần dữ liệu cần thiết (như 1 vài cột trên CSV), mà không cần phải đụng tới các phần khác của data row. Ngoài ra Parquet còn hỗ trợ flexible compression do đó tiết kiệm được rất nhiều không gian HDFS.
Nếu bạn chứa dữ liệu dạng text trên HDFS và dùng Spark SQL để xử lý, một biện pháp tối ưu bạn nên thử là chuyển đổi text đó sang Parquet, tăng tốc độ truy xuất và tối ưu bộ nhớ.
Theo một bài viết của IBM[2], chuyển đổi sang Parquet giúp tăng tốc độ truy xuất lên 30 lần (hoặc hơn) tùy trường hợp, bộ nhớ tiết kiệm đến 75%!
Let’s convert to Parquet!
Spark SQL hỗ trợ đọc và ghi Parquet files, và giữ nguyên được meta data. Parquet schema cho phép data files "self-explanatory" to the Spark SQL applications.
Đoạn chương trình sau sử dụng databricks.csv để đọc flat file, sau đó lưu lại dạng Parquet kèm Schema.
Đoạn mã trên tự động convert tất cả các file hadoopdsPath+"/catalog_page/* và lưu Parquet vào thư mục /user/spark/data/parquet/, mặc định Spark sử dụng chuẩn nén gzip, bạn có thể sử dụng compression codec uncompressed, snappy, hoặc lzo.
Convert 1TB mất bao lâu?
Mất 50 phút, tức khoảng 20GB/phút khi sử dụng 6-datanode Spark 1.5.1. Tổng lượng bộ nhớ sử dụng là 500GB. Kết quả Parquet files trên HDFS có dạng:
hdfs:///user/spark/data/parquet1000g/catalog_page/_SUCCESS
hdfs:///user/spark/data/parquet1000g/catalog_page/_common_metadata
hdfs:///user/spark/data/parquet1000g/catalog_page/_metadata
hdfs:///user/spark/data/parquet1000g/catalog_page/part-r-00000-a9341639-a804-45bd-b594-8e58220190f4.gz.parquet
hdfs:///user/spark/data/parquet1000g/catalog_page/part-r-00001-a9341639-a804-45bd-b594-8e58220190f4.gz.parquet
Bộ nhớ tiết kiệm được
$ hadoop fs -du -h -s /user/spark/data/text1000g897.9 G /user/spark/data/text1000g
$ hadoop fs -du -h -s /user/spark/data/parquet1000g231.4 G /user/spark/data/parquet1000g
Từ 897.9GB text, với Parquet chỉ còn lại 231.4GB, tiết kiệm được khoảng 75%.
Tham khảo
Related Posts
Cài Apache Spark standalone bản pre-built
Mình nhận được nhiều phản hồi từ bài viết BigData - Cài đặt Apache Spark trên Ubuntu 14.04 rằng sao cài khó và phức tạp thế. Thực ra bài viết đó mình hướng dẫn cách build và install từ source.
vnTokenizer trên PySpark
Trong blog này mình sẽ custom lại vn.vitk để có thể chạy như một thư viện lập trình, sử dụng ngôn ngữ python (trên PySpark và Jupyter Notebook).
PySpark - Thiếu thư viện Python trên Worker
Apache Spark chạy trên Cluster, với Java thì đơn giản. Với Python thì package python phải được cài trên từng Node của Worker. Nếu không bạn sẽ gặp phải lỗi thiếu thư viện.
Spark on Kubernetes Performance Tuning
Spark Performance tuning is a process to improve the performance of Spark. In this post, I will focus on Spark running on Kubernetes.
