Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn

Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn
Vị thần thời tiết của Remarin

Đội Giải pháp đám mây Mail.ru cung cấp dịch bài báo kỹ sư Rahul Bhatia từ Clairvoyant về các định dạng tệp trong dữ liệu lớn, các tính năng phổ biến nhất của định dạng Hadoop là gì và định dạng nào tốt hơn để sử dụng.

Tại sao cần có các định dạng tệp khác nhau?

Điểm nghẽn lớn về hiệu suất đối với các ứng dụng hỗ trợ HDFS như MapReduce và Spark là thời gian cần thiết để tìm kiếm, đọc và ghi dữ liệu. Những vấn đề này càng phức tạp hơn bởi khó khăn trong việc quản lý các tập dữ liệu lớn nếu chúng ta có một lược đồ đang phát triển thay vì một lược đồ cố định hoặc nếu có một số hạn chế về lưu trữ.

Xử lý dữ liệu lớn làm tăng tải cho hệ thống con lưu trữ - Hadoop lưu trữ dữ liệu dự phòng để đạt được khả năng chịu lỗi. Ngoài đĩa, bộ xử lý, mạng, hệ thống đầu vào/đầu ra, v.v. cũng được tải. Khi khối lượng dữ liệu tăng lên, chi phí xử lý và lưu trữ nó cũng tăng theo.

Các định dạng tập tin khác nhau trong Hadoop được phát minh để giải quyết chính xác những vấn đề này. Việc chọn định dạng tệp thích hợp có thể mang lại một số lợi ích đáng kể:

  1. Thời gian đọc nhanh hơn.
  2. Thời gian ghi nhanh hơn.
  3. Những tệp đã chia sẻ.
  4. Hỗ trợ phát triển lược đồ.
  5. Hỗ trợ nén mở rộng.

Một số định dạng tệp được thiết kế để sử dụng chung, một số định dạng khác dành cho mục đích sử dụng cụ thể hơn và một số được thiết kế để đáp ứng các đặc điểm dữ liệu cụ thể. Vì vậy, sự lựa chọn thực sự là khá lớn.

Định dạng tập tin Avro

tuần tự hóa dữ liệu Avro được sử dụng rộng rãi - nó dựa trên chuỗi, nghĩa là định dạng lưu trữ dữ liệu chuỗi trong Hadoop. Nó lưu trữ lược đồ ở định dạng JSON, giúp bất kỳ chương trình nào dễ đọc và giải thích. Bản thân dữ liệu ở định dạng nhị phân, nhỏ gọn và hiệu quả.

Hệ thống tuần tự hóa của Avro là ngôn ngữ trung lập. Các tệp có thể được xử lý bằng nhiều ngôn ngữ, hiện tại là C, C++, C#, Java, Python và Ruby.

Một tính năng chính của Avro là sự hỗ trợ mạnh mẽ cho các lược đồ dữ liệu thay đổi theo thời gian, tức là phát triển. Avro hiểu các thay đổi của lược đồ—xóa, thêm hoặc thay đổi các trường.

Avro hỗ trợ nhiều cấu trúc dữ liệu. Ví dụ: bạn có thể tạo bản ghi chứa một mảng, kiểu liệt kê và bản ghi phụ.

Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn
Định dạng này lý tưởng để ghi vào vùng đích (chuyển tiếp) của hồ dữ liệu (hồ dữ liệuhoặc hồ dữ liệu - một tập hợp các phiên bản để lưu trữ trực tiếp nhiều loại dữ liệu khác nhau ngoài các nguồn dữ liệu).

Vì vậy, định dạng này phù hợp nhất để ghi vào vùng hạ cánh của hồ dữ liệu vì những lý do sau:

  1. Dữ liệu từ vùng này thường được đọc toàn bộ để các hệ thống hạ nguồn xử lý tiếp - và định dạng dựa trên hàng sẽ hiệu quả hơn trong trường hợp này.
  2. Các hệ thống hạ nguồn có thể dễ dàng truy xuất các bảng lược đồ từ các tệp—không cần lưu trữ các lược đồ riêng biệt trong bộ lưu trữ meta bên ngoài.
  3. Mọi thay đổi đối với lược đồ gốc đều được xử lý dễ dàng (tiến hóa lược đồ).

Định dạng tệp sàn gỗ

Sàn gỗ là một định dạng tệp nguồn mở cho Hadoop lưu trữ cấu trúc dữ liệu lồng nhau ở định dạng cột phẳng.

So với cách tiếp cận theo hàng truyền thống, Parquet hiệu quả hơn về mặt lưu trữ và hiệu suất.

Điều này đặc biệt hữu ích cho các truy vấn đọc các cột cụ thể từ một bảng rộng (nhiều cột). Nhờ định dạng tệp, chỉ những cột cần thiết mới được đọc, do đó I/O được giữ ở mức tối thiểu.

Một sự lạc đề nhỏ và giải thích: Để hiểu rõ hơn về định dạng tệp Parquet trong Hadoop, chúng ta hãy xem định dạng dựa trên cột - tức là cột - là gì. Định dạng này lưu trữ các giá trị tương tự cho từng cột với nhau.

Ví dụ, bản ghi bao gồm các trường ID, Tên và Bộ phận. Trong trường hợp này, tất cả các giá trị cột ID sẽ được lưu trữ cùng nhau, cũng như các giá trị cột Tên, v.v. Bảng sẽ trông giống như thế này:

ID
Họ tên
bộ

1
emp1
d1

2
emp2
d2

3
emp3
d3

Ở dạng chuỗi, dữ liệu sẽ được lưu như sau:

1
emp1
d1
2
emp2
d2
3
emp3
d3

Ở định dạng tệp cột, dữ liệu tương tự sẽ được lưu như sau:

1
2
3
emp1
emp2
emp3
d1
d2
d3

Định dạng cột hiệu quả hơn khi bạn cần truy vấn nhiều cột từ một bảng. Nó sẽ chỉ đọc các cột được yêu cầu vì chúng liền kề nhau. Bằng cách này, các thao tác I/O được giữ ở mức tối thiểu.

Ví dụ bạn chỉ cần cột NAME. TRONG định dạng chuỗi Mỗi bản ghi trong tập dữ liệu cần phải được tải, phân tích cú pháp theo trường và sau đó trích xuất dữ liệu NAME. Định dạng cột cho phép bạn đi sâu trực tiếp vào cột Tên vì tất cả các giá trị cho cột đó đều được lưu trữ cùng nhau. Bạn không cần phải quét toàn bộ bản ghi.

Do đó, định dạng cột cải thiện hiệu suất truy vấn vì nó yêu cầu ít thời gian tra cứu hơn để đến các cột được yêu cầu và giảm số lượng thao tác I/O vì chỉ đọc các cột mong muốn.

Một trong những tính năng độc đáo Sàn gỗ là ở định dạng này nó có thể lưu trữ dữ liệu với cấu trúc lồng nhau. Điều này có nghĩa là trong tệp Parquet, ngay cả các trường lồng nhau cũng có thể được đọc riêng lẻ mà không cần phải đọc tất cả các trường trong cấu trúc lồng nhau. Sàn gỗ sử dụng thuật toán băm nhỏ và lắp ráp để lưu trữ các cấu trúc lồng nhau.

Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn
Để hiểu định dạng tệp Parquet trong Hadoop, bạn cần biết các thuật ngữ sau:

  1. Nhóm dây (row group): phân chia dữ liệu theo chiều ngang hợp lý thành các hàng. Một nhóm hàng bao gồm một đoạn của mỗi cột trong tập dữ liệu.
  2. Đoạn cột (đoạn cột): Một đoạn của một cột cụ thể. Các đoạn cột này nằm trong một nhóm hàng cụ thể và được đảm bảo liền kề nhau trong tệp.
  3. Trang (trang): Các đoạn cột được chia thành các trang viết lần lượt. Các trang đều có tiêu đề chung nên khi đọc bạn có thể bỏ qua những tiêu đề không cần thiết.

Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn
Ở đây tiêu đề chỉ chứa con số kỳ diệu PAR1 (4 byte) xác định tệp là tệp Parquet.

Phần chân trang nói như sau:

  1. Siêu dữ liệu tệp chứa tọa độ bắt đầu của siêu dữ liệu của mỗi cột. Khi đọc, trước tiên bạn phải đọc siêu dữ liệu của tệp để tìm tất cả các đoạn cột quan tâm. Các phần cột sau đó sẽ được đọc tuần tự. Siêu dữ liệu khác bao gồm phiên bản định dạng, lược đồ và bất kỳ cặp khóa-giá trị bổ sung nào.
  2. Độ dài siêu dữ liệu (4 byte).
  3. con số kỳ diệu PAR1 (4 byte).

Định dạng tệp ORC

Định dạng tệp hàng-cột được tối ưu hóa (Cột hàng được tối ưu hóa, CRO) cung cấp một cách rất hiệu quả để lưu trữ dữ liệu và được thiết kế để khắc phục những hạn chế của các định dạng khác. Lưu trữ dữ liệu ở dạng hoàn toàn nhỏ gọn, cho phép bạn bỏ qua các chi tiết không cần thiết - mà không yêu cầu xây dựng các chỉ mục lớn, phức tạp hoặc được duy trì thủ công.

Ưu điểm của định dạng ORC:

  1. Một tệp là đầu ra của mỗi tác vụ, giúp giảm tải cho NameNode (nút tên).
  2. Hỗ trợ các loại dữ liệu Hive, bao gồm các loại dữ liệu DateTime, thập phân và phức tạp (cấu trúc, danh sách, bản đồ và liên kết).
  3. Đọc đồng thời cùng một tệp bằng các quy trình RecordReader khác nhau.
  4. Khả năng chia nhỏ tập tin mà không cần quét các điểm đánh dấu.
  5. Ước tính mức phân bổ bộ nhớ heap tối đa có thể có cho các quá trình đọc/ghi dựa trên thông tin ở chân trang tệp.
  6. Siêu dữ liệu được lưu trữ ở định dạng tuần tự nhị phân của Bộ đệm giao thức, cho phép thêm và xóa các trường.

Các định dạng tệp trong dữ liệu lớn: một chương trình giáo dục ngắn gọn
ORC lưu trữ các bộ sưu tập chuỗi trong một tệp duy nhất và trong bộ sưu tập, dữ liệu chuỗi được lưu trữ ở định dạng cột.

Tệp ORC lưu trữ các nhóm dòng được gọi là sọc và thông tin hỗ trợ ở chân trang của tệp. Postscript ở cuối file chứa các tham số nén và kích thước của footer đã nén.

Kích thước sọc mặc định là 250 MB. Do các sọc lớn như vậy, việc đọc từ HDFS được thực hiện hiệu quả hơn: trong các khối liền kề lớn.

Phần chân trang của tệp ghi lại danh sách các làn trong tệp, số hàng trên mỗi làn và kiểu dữ liệu của mỗi cột. Giá trị kết quả của số đếm, tối thiểu, tối đa và tổng cho mỗi cột cũng được ghi ở đó.

Phần chân trang của dải chứa thư mục các vị trí luồng.

Dữ liệu hàng được sử dụng khi quét bảng.

Dữ liệu chỉ mục bao gồm các giá trị tối thiểu và tối đa cho mỗi cột và vị trí của các hàng trong mỗi cột. Chỉ mục ORC chỉ được sử dụng để chọn các sọc và nhóm hàng chứ không phải để trả lời các truy vấn.

So sánh các định dạng tập tin khác nhau

Avro so với sàn gỗ

  1. Avro là định dạng lưu trữ hàng, trong khi Parquet lưu trữ dữ liệu theo cột.
  2. Parquet phù hợp hơn cho các truy vấn phân tích, nghĩa là các thao tác đọc và truy vấn dữ liệu hiệu quả hơn nhiều so với ghi.
  3. Thao tác ghi trong Avro được thực hiện hiệu quả hơn trong Parquet.
  4. Avro xử lý sự phát triển của mạch một cách thuần thục hơn. Parquet chỉ hỗ trợ bổ sung lược đồ, trong khi Avro hỗ trợ tiến hóa đa chức năng, tức là thêm hoặc thay đổi các cột.
  5. Parquet lý tưởng để truy vấn một tập hợp con các cột trong bảng nhiều cột. Avro phù hợp với các hoạt động ETL nơi chúng tôi truy vấn tất cả các cột.

ORC vs Sàn gỗ

  1. Sàn gỗ lưu trữ dữ liệu lồng nhau tốt hơn.
  2. ORC phù hợp hơn với việc đẩy lùi vị ngữ.
  3. ORC hỗ trợ các thuộc tính ACID.
  4. ORC nén dữ liệu tốt hơn.

Những gì khác để đọc về chủ đề này:

  1. Phân tích dữ liệu lớn trên đám mây: cách một công ty có thể hướng tới dữ liệu.
  2. Hướng dẫn đơn giản về lược đồ cơ sở dữ liệu.
  3. Kênh telegram của chúng tôi về chuyển đổi kỹ thuật số.

Nguồn: www.habr.com

Thêm một lời nhận xét