Parquet vs ORC vs ORC với Snappy


87

Tôi đang chạy một vài thử nghiệm trên các định dạng lưu trữ có sẵn với Hive và sử dụng Parquet và ORC làm các tùy chọn chính. Tôi đã bao gồm ORC một lần với nén mặc định và một lần với Snappy.

Tôi đã đọc nhiều tài liệu nói rằng Parquet có độ phức tạp về thời gian / không gian tốt hơn so với ORC nhưng các thử nghiệm của tôi lại trái ngược với các tài liệu tôi đã xem qua.

Làm theo một số chi tiết về dữ liệu của tôi.

Table A- Text File Format- 2.5GB

Table B - ORC - 652MB

Table C - ORC with Snappy - 802MB

Table D - Parquet - 1.9 GB

Sàn gỗ là tồi tệ nhất cho đến khi nén cho bàn của tôi có liên quan.

Các thử nghiệm của tôi với các bảng trên cho kết quả như sau.

Hoạt động đếm hàng

Text Format Cumulative CPU - 123.33 sec

Parquet Format Cumulative CPU - 204.92 sec

ORC Format Cumulative CPU - 119.99 sec 

ORC with SNAPPY Cumulative CPU - 107.05 sec

Tổng của một hoạt động cột

Text Format Cumulative CPU - 127.85 sec   

Parquet Format Cumulative CPU - 255.2 sec   

ORC Format Cumulative CPU - 120.48 sec   

ORC with SNAPPY Cumulative CPU - 98.27 sec

Trung bình của một hoạt động cột

Text Format Cumulative CPU - 128.79 sec

Parquet Format Cumulative CPU - 211.73 sec    

ORC Format Cumulative CPU - 165.5 sec   

ORC with SNAPPY Cumulative CPU - 135.45 sec 

Chọn 4 cột từ một dải ô đã cho bằng mệnh đề where

Text Format Cumulative CPU -  72.48 sec 

Parquet Format Cumulative CPU - 136.4 sec       

ORC Format Cumulative CPU - 96.63 sec 

ORC with SNAPPY Cumulative CPU - 82.05 sec 

Điều đó có nghĩa là ORC nhanh hơn sau đó Parquet? Hoặc có điều gì đó mà tôi có thể làm để làm cho nó hoạt động tốt hơn với thời gian phản hồi truy vấn và tỷ lệ nén?

Cảm ơn!


1
Bạn có thể chia sẻ một thuật toán chung được sử dụng để thực hiện thử nghiệm đó không? Tuy nhiên, nó là cần thiết để sử dụng cùng một dữ liệu. Nhưng chia sẻ mọi thứ khác để đạt được kết quả tương tự với các bộ dữ liệu khác nhau có thể rất hữu ích để cung cấp cho bạn câu trả lời tốt hơn hoặc để chứng minh rằng bạn có một điểm rất tốt và thay đổi thế giới mãi mãi.
Mestre San,

bạn có bất kỳ kết quả spark vs tez bằng cách sử dụng orc vs parquet không? từ những gì tôi đã thấy có vẻ như tez nhanh hơn (nhanh hơn 3 lần) khi sử dụng định dạng orc.
David H

+ 1 để biết tổng quan về điểm chuẩn tốt đẹp của bạn. Nhưng dù sao, có cơ hội bạn có thể cung cấp phiên bản cập nhật vì một số khía cạnh kỹ thuật đằng sau hậu trường đã thay đổi (ví dụ như đã thảo luận trong câu trả lời của @jonathanChap) không?
Markus

Câu trả lời:


52

Tôi muốn nói rằng cả hai định dạng này đều có lợi thế riêng.

Parquet có thể tốt hơn nếu bạn có dữ liệu được lồng ghép cao, vì nó lưu trữ các phần tử của nó dưới dạng cây giống như Google Dremel ( Xem tại đây ).
Apache ORC có thể tốt hơn nếu cấu trúc tệp của bạn được làm phẳng.

Và theo như tôi biết thì sàn gỗ chưa hỗ trợ Indexes. ORC đi kèm với Chỉ số trọng lượng nhẹ và kể từ Hive 0.14, một Bộ lọc Bloom bổ sung có thể hữu ích cho thời gian phản hồi truy vấn tốt hơn, đặc biệt là khi nói đến các phép tính tổng.

Nén mặc định của Parquet là SNAPPY. Bảng A - B - C và D có cùng Tập dữ liệu không? Nếu có, có vẻ như có điều gì đó mờ ám về nó, khi nó chỉ nén xuống 1,9 GB


2
Bảng A - Định dạng tệp văn bản - Không nén ......... Bảng B - Định dạng tệp ORC với nén ZLIB ......... Bảng C - ORC với Snappy ....... Bảng D - Parquet with Snappy ..... Tôi đã làm việc trên một bảng khác có ~ 150 cột và kích thước ~ 160 GB để kiểm tra xem các định dạng tệp hoạt động như thế nào ở đó. Parquet mất 35 GB để lưu trữ 160GB dữ liệu đó trong khi ORC với snappy chiếm 39GB ...... Việc nén trông có vẻ tốt hơn đối với Parquet so với thử nghiệm được đăng được đề cập nhưng hiệu suất lại ở mức tương tự .. ORC đã tỏa sáng ở đây. hiệu suất tốt hơn kết hợp ORC + SNAPPY.
Rahul

1
Cấu trúc dữ liệu cho các trường hợp sử dụng của tôi phẳng hơn mà không có bất kỳ lồng ghép nào. Tôi đồng ý với nhận xét lập chỉ mục của bạn về Parquet vs ORC và điều đó thực sự tạo ra sự khác biệt. Bạn có bất kỳ kết quả nào để chia sẻ từ việc so sánh hiệu suất của cả hai? Điều đó có thể giúp tôi xoa dịu lương tâm rằng tôi đang triển khai các định dạng một cách chính xác. :)
Rahul

Tôi chưa bao giờ kiểm tra tập dữ liệu của mình trên Parquet vì Chỉ mục là yêu cầu cần thiết và chúng tôi cũng có cấu trúc dữ liệu phẳng không có thông tin lồng ghép. Những gì tôi đã tìm ra là tùy thuộc vào nơi bạn lưu trữ tệp của mình, bạn cần một dải và kích thước tệp khác nhau để có được kết quả tốt nhất. Khi bạn lưu trữ vĩnh viễn các tệp của mình trên HDFS, tốt hơn là bạn nên có các tệp và sọc lớn hơn. "set mapred.max.split.size = 4096000000" là tham số tôi đã sử dụng để ảnh hưởng đến kích thước tệp và a để kích thước sọc thành giá trị mặc định của nó. Với cài đặt này, nó đã cho tôi khoảng 94% truy vấn và tăng độ nén.
PhanThomas

Nếu bạn muốn lưu trữ các tệp của mình trên Amazon S3 như một kho lưu trữ lạnh, cách mà tệp nhỏ hơn và kích thước sọc cho tôi kết quả tốt hơn nhiều. Tôi đã sử dụng các tệp có kích thước 40-60MB chứa một Sọc duy nhất.
PhanThomas

44

Bạn đang thấy điều này bởi vì:

  • Hive có một đầu đọc ORC được vector hóa nhưng không có đầu đọc parquet được vector hóa.

  • Spark có đầu đọc ván gỗ được vector hóa và không có đầu đọc ORC được vector hóa.

  • Spark hoạt động tốt nhất với sàn gỗ, tổ ong hoạt động tốt nhất với ORC.

Tôi đã thấy sự khác biệt tương tự khi chạy ORC và Parquet với Spark.

Vectơ hóa có nghĩa là các hàng được giải mã theo lô, cải thiện đáng kể khả năng sử dụng bộ nhớ và bộ nhớ đệm.

(đúng như Hive 2.0 và Spark 2.1)


18
Kể từ 2.3.0, spark không có trình đọc ORC được vectơ
Steen

6
Hive 2.3.0 đã vector hóa Parquet đọc - issues.apache.org/jira/browse/HIVE-14815
ruhong

Kể từ Spark 2.3, Spark hỗ trợ trình đọc ORC được vector hóa spark.apache.org/docs/latest/sql-data-sources-orc.html
Anurag Sharma

10

Cả Parquet và ORC đều có những ưu và nhược điểm riêng. Nhưng tôi chỉ cố gắng làm theo một quy tắc ngón tay cái đơn giản - "Dữ liệu của bạn được lồng vào nhau như thế nào và có bao nhiêu cột ở đó" . Nếu bạn theo dõi Google Dremel, bạn có thể tìm thấy sàn gỗ được thiết kế như thế nào. Họ sử dụng cấu trúc dạng cây phân cấp để lưu trữ dữ liệu. Càng làm tổ sâu hơn cây.

Nhưng ORC được thiết kế cho một kho lưu trữ tập tin phẳng. Vì vậy, nếu Dữ liệu của bạn được làm phẳng với ít cột hơn, bạn có thể sử dụng ORC, nếu không, bạn sẽ sử dụng parquet. Tính năng nén trên Dữ liệu phẳng hoạt động đáng kinh ngạc trong ORC.

Chúng tôi đã thực hiện một số phép đo điểm chuẩn với một tệp được làm phẳng lớn hơn, chuyển đổi nó thành khung dữ liệu spark và lưu trữ nó ở cả định dạng parquet và ORC trong S3 và thực hiện truy vấn với ** Redshift-Spectrum **.

Size of the file in parquet: ~7.5 GB and took 7 minutes to write
Size of the file in ORC: ~7.1. GB and took 6 minutes to write
Query seems faster in ORC files.

Ngay sau đó chúng tôi sẽ thực hiện một số đo điểm chuẩn cho Dữ liệu lồng nhau và cập nhật kết quả tại đây.


6

Chúng tôi đã thực hiện một số điểm chuẩn so sánh các định dạng tệp khác nhau (Avro, JSON, ORC và Parquet) trong các trường hợp sử dụng khác nhau.

https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet

Tất cả dữ liệu đều có sẵn công khai và mã điểm chuẩn đều là mã nguồn mở tại:

https://github.com/apache/orc/tree/branch-1.4/java/bench


5
Điều này thực sự hữu ích, nhưng cần có tuyên bố từ chối trách nhiệm rằng @Owen làm việc cho Horton Works, công ty ban đầu đã phát triển định dạng tệp ORC
Daniel Kats

1
Cảm ơn! Nhưng liên kết thứ hai đã bị hỏng. Bạn có thể vui lòng sửa hoặc xóa nó khỏi câu trả lời của mình không?
Danilo Gomes,

3

Cả hai đều có lợi thế của họ. Chúng tôi sử dụng Parquet cùng với Hive và Impala, nhưng chỉ muốn chỉ ra một vài ưu điểm của ORC so với Parquet: trong các truy vấn thực thi lâu, khi Hive truy vấn, bảng ORC GC được gọi ít thường xuyên hơn khoảng 10 lần . Có thể không là gì đối với nhiều dự án, nhưng có thể rất quan trọng đối với những dự án khác.

ORC cũng mất ít thời gian hơn nhiều, khi bạn chỉ cần chọn một vài cột từ bảng. Một số truy vấn khác, đặc biệt với các phép nối, cũng mất ít thời gian hơn do thực thi truy vấn được vector hóa, không có sẵn cho Parquet

Ngoài ra, nén ORC đôi khi hơi ngẫu nhiên, trong khi nén Parquet nhất quán hơn nhiều. Có vẻ như khi bảng ORC có nhiều cột số - nó cũng không nén. Nó ảnh hưởng đến cả nén zlib và snappy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.