Avro vs. Parquet


91

Tôi dự định sử dụng một trong các định dạng tệp hadoop cho dự án liên quan đến hadoop của mình. Tôi hiểu rằng parquet hiệu quả cho truy vấn dựa trên cột và avro để quét toàn bộ hoặc khi chúng tôi cần tất cả dữ liệu cột!

Trước khi tiếp tục và chọn một trong các định dạng tệp, tôi muốn hiểu những nhược điểm / hạn chế của định dạng này so với định dạng khác. Bất cứ ai có thể giải thích nó cho tôi trong điều kiện đơn giản?

Câu trả lời:


53

Nếu bạn chưa quyết định, tôi sẽ tiếp tục và viết lược đồ Avro cho dữ liệu của bạn. Sau khi hoàn tất, việc lựa chọn giữa tệp vùng chứa Avro và tệp Parquet đơn giản như hoán đổi ví dụ,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

cho

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

Định dạng Parquet có vẻ chuyên sâu về mặt tính toán hơn một chút về mặt ghi - ví dụ: yêu cầu RAM để đệm và CPU để sắp xếp dữ liệu, v.v. nhưng nó sẽ giảm I / O, chi phí lưu trữ và truyền tải cũng như làm cho hiệu quả đặc biệt là đọc với các truy vấn giống SQL (ví dụ: Hive hoặc SparkSQL) chỉ giải quyết một phần của các cột.

Trong một dự án, tôi đã hoàn nguyên từ vùng chứa Parquet sang Avro vì lược đồ quá rộng và được lồng vào nhau (được dẫn xuất từ ​​một số lớp hướng đối tượng khá phân cấp) và dẫn đến hàng nghìn cột Parquet. Đổi lại, các nhóm hàng của chúng tôi thực sự rộng và nông, có nghĩa là phải mất mãi mãi trước khi chúng tôi có thể xử lý một số lượng nhỏ các hàng trong cột cuối cùng của mỗi nhóm.

Tôi chưa có nhiều cơ hội sử dụng Parquet để có thêm dữ liệu chuẩn hóa / lành mạnh nhưng tôi hiểu rằng nếu được sử dụng tốt, nó sẽ cho phép cải thiện hiệu suất đáng kể.


2
Parquet cũng hỗ trợ bộ dữ liệu / bộ sưu tập lồng nhau.
Tagar

@Ruslan: Có, nó đã hỗ trợ về mặt kỹ thuật cho các cấu trúc lồng nhau. Vấn đề là số lượng cột rất cao do dữ liệu bị hủy chuẩn hóa rộng rãi. Nó hoạt động nhưng rất chậm.
nồi hơi 25

4
Có, việc ghi dữ liệu bằng gỗ sẽ đắt hơn. Đọc thì ngược lại, đặc biệt nếu các truy vấn của bạn thường đọc một tập hợp con các cột.
Tagar

4
Tôi nghĩ Parquet phù hợp với hầu hết các trường hợp sử dụng ngoại trừ, dữ liệu trong cùng một cột thay đổi rất nhiều và luôn được phân tích trên hầu hết các cột.
Rockie Yang

Apache Arrow cũng chưa hỗ trợ lồng ghép hỗn hợp (danh sách với từ điển hoặc từ điển có danh sách). Vì vậy, nếu bạn muốn làm việc với việc lồng ghép phức tạp trong Parquet, bạn đang mắc kẹt với Spark, Hive, v.v. và các công cụ như vậy không dựa vào Arrow để đọc và viết Parquet.
josiah

49

Avro là một định dạng dựa trên Hàng. Nếu bạn muốn truy xuất toàn bộ dữ liệu, bạn có thể sử dụng Avro

Sàn gỗ là một định dạng dựa trên Cột. Nếu dữ liệu của bạn bao gồm nhiều cột nhưng bạn quan tâm đến một tập hợp con của các cột thì bạn có thể sử dụng Parquet

HBase hữu ích khi liên quan đến việc cập nhật dữ liệu thường xuyên. Avro truy xuất nhanh, Parquet nhanh hơn nhiều.


7
Hãy sửa lại 2 câu cuối của bạn trong đoạn cuối. Họ hoàn toàn không thể hiểu được.
Cbhihe

39

Avro

  • Được sử dụng rộng rãi như một nền tảng tuần tự hóa
  • Dựa trên hàng, cung cấp định dạng nhị phân nhỏ gọn và nhanh chóng
  • Lược đồ được mã hóa trên tệp để dữ liệu có thể không được gắn thẻ
  • Các tệp hỗ trợ nén khối và có thể chia nhỏ
  • Hỗ trợ sự phát triển lược đồ

Sàn gỗ

  • Định dạng tệp nhị phân hướng theo cột
  • Sử dụng thuật toán cắt nhỏ và lắp ráp hồ sơ được mô tả trong bài báo Dremel
  • Mỗi tệp dữ liệu chứa các giá trị cho một tập hợp các hàng
  • Hiệu quả về I / O đĩa khi các cột cụ thể cần được truy vấn

Từ việc chọn định dạng lưu trữ dữ liệu HDFS- Avro vs. Parquet và hơn thế nữa


29

Cả Avro và Parquet đều là định dạng lưu trữ "tự mô tả", nghĩa là cả hai đều nhúng dữ liệu, thông tin siêu dữ liệu và lược đồ khi lưu trữ dữ liệu trong một tệp. Việc sử dụng một trong hai định dạng lưu trữ tùy thuộc vào trường hợp sử dụng. Ba khía cạnh tạo thành cơ sở để bạn có thể chọn định dạng nào sẽ là tối ưu trong trường hợp của mình:

  1. Thao tác đọc / ghi : Parquet là một định dạng tệp dựa trên cột. Nó hỗ trợ lập chỉ mục. Do đó, nó phù hợp cho việc ghi một lần và đọc, truy vấn phức tạp hoặc phân tích, truy vấn dữ liệu có độ trễ thấp. Điều này thường được sử dụng bởi người dùng cuối / các nhà khoa học dữ liệu.
    Trong khi đó, Avro, là định dạng tệp dựa trên hàng, được sử dụng tốt nhất cho hoạt động ghi nhiều. Điều này thường được sử dụng bởi các kỹ sư dữ liệu. Cả hai đều hỗ trợ tuần tự hóa và định dạng nén, mặc dù chúng làm như vậy theo những cách khác nhau.

  2. Dụng cụ : Sàn gỗ phù hợp với Impala. (Impala là một công cụ truy vấn SQL RDBM xử lý song song khối lượng lớn (MPP) biết cách hoạt động trên dữ liệu nằm trong một hoặc một số công cụ lưu trữ bên ngoài.) Một lần nữa Parquet lại có lợi cho việc truy vấn phức tạp / tương tác và nhanh chóng (độ trễ thấp ) xuất qua dữ liệu trong HDFS. Điều này được hỗ trợ bởi CDH (Cloudera Distribution Hadoop). Hadoop hỗ trợ các định dạng Cột hàng được Tối ưu hóa (ORC) của Apache (các lựa chọn phụ thuộc vào phân phối Hadoop), trong khi Avro phù hợp nhất với xử lý Spark.

  3. Sự phát triển của lược đồ : Việc phát triển một lược đồ DB có nghĩa là thay đổi cấu trúc của DB, do đó là dữ liệu của nó, và do đó xử lý truy vấn của nó.
    Cả Parquet và Avro đều hỗ trợ tiến hóa lược đồ nhưng ở một mức độ khác nhau.
    Parquet rất tốt cho các hoạt động 'nối thêm', ví dụ như thêm cột, nhưng không tốt cho việc đổi tên cột trừ khi 'đọc' được thực hiện bởi chỉ mục.
    Avro phù hợp hơn để thêm, xóa và nói chung là các cột đột biến hơn là Parquet. Trong lịch sử, Avro đã cung cấp một tập hợp các khả năng tiến hóa giản đồ phong phú hơn Parquet, và mặc dù khả năng tiến hóa lược đồ của họ có xu hướng mờ nhạt, Avro vẫn tỏa sáng trong lĩnh vực đó, khi so sánh với Parquet.


5
Phần "công cụ" có một chút sai lệch. Parquet được sử dụng hiệu quả bởi rất nhiều framework khác như Spark, Presto, Hive, v.v. Avro không dành riêng cho Spark, nó được sử dụng rộng rãi như một định dạng lưu trữ HDFS và các kịch bản truyền thông báo như trong Kafka.
ᐅ devrimbaris

2
Aakash Aggarwal: Bạn có thể giải thích ý của bạn trong đoạn 2 với "Avro phù hợp nhất để xử lý Spark" không? Như đã đề cập bởi devrimbaris, Parquet cũng được tích hợp rất tốt trong môi trường xử lý Spark. o_O?!?
Cbhihe

11

Sự hiểu biết của bạn là đúng. Trên thực tế, chúng tôi đã gặp phải tình huống tương tự trong quá trình di chuyển dữ liệu trong DWH của mình. Chúng tôi chọn Parquet thay vì Avro vì lượng đĩa lưu trữ mà chúng tôi nhận được gần như gấp đôi so với những gì chúng tôi nhận được với AVro. Ngoài ra, thời gian xử lý truy vấn tốt hơn nhiều so với Avro. Nhưng có, các truy vấn của chúng tôi dựa trên tổng hợp, hoạt động dựa trên cột, v.v. do đó, Parquet có thể dự đoán là người chiến thắng rõ ràng.

Chúng tôi đang sử dụng Hive 0.12 từ bản phân phối CDH. Bạn đã đề cập rằng bạn đang gặp sự cố với Hive + Parquet, đó là gì? Chúng tôi không gặp phải bất kỳ.


3

Silver Blaze đã mô tả một cách độc đáo với một trường hợp sử dụng ví dụ và mô tả cách Parquet là lựa chọn tốt nhất cho anh ta. Bạn nên xem xét cái này hơn cái kia tùy thuộc vào yêu cầu của bạn. Tôi cũng đang đưa ra một mô tả ngắn gọn về các định dạng tệp khác cùng với so sánh độ phức tạp về không gian thời gian. Hy vọng rằng sẽ giúp.

Có rất nhiều định dạng tệp mà bạn có thể sử dụng trong Hive. Đề cập đáng chú ý là AVRO, Parquet. RCFile & ORC. Có một số tài liệu tốt có sẵn trực tuyến mà bạn có thể tham khảo nếu bạn muốn so sánh hiệu suất và việc sử dụng không gian của các định dạng tệp này. Hãy làm theo một số liên kết hữu ích sẽ giúp bạn tiếp tục.

Bài đăng trên blog này

Liên kết này từ MapR [Họ không thảo luận về Parquet]

Liên kết này từ Inquidia

Các liên kết được đưa ra ở trên sẽ giúp bạn tiến lên. Tôi hy vọng điều này trả lời câu hỏi của bạn.

Cảm ơn!


0

Chỉ để mô tả về Parquet, bạn có thể tham khảo tại đây: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Tôi dự định sẽ viết rất sớm về Avro và so sánh giữa cả hai. Sẽ đăng nó ở đây khi hoàn thành.


Chờ đợi sự so sánh. Hiện nay tôi đã chọn Avro cho dự án của tôi như sàn gỗ có vấn đề về comptibility với :) hive
Abhishek

1
@Abshinek, bạn có thể cung cấp một số thông tin về các vấn đề tương thích với hive và avro
EB

@EB Không nên có bất kỳ vấn đề, nếu có, họ sẽ được nêu tại cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
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.