Apache Pig - Kiến trúc
Ngôn ngữ được sử dụng để phân tích dữ liệu trong Hadoop bằng Pig được gọi là Pig Latin. Đây là một ngôn ngữ xử lý dữ liệu cấp cao cung cấp một tập hợp các kiểu dữ liệu và toán tử phong phú để thực hiện các hoạt động khác nhau trên dữ liệu.
Để thực hiện một tác vụ cụ thể Lập trình viên sử dụng Pig, người lập trình cần viết tập lệnh Pig bằng ngôn ngữ Pig Latin và thực thi chúng bằng bất kỳ cơ chế thực thi nào (Grunt Shell, UDFs, Embedded). Sau khi thực thi, các tập lệnh này sẽ trải qua một loạt các biến đổi được áp dụng bởi Pig Framework, để tạo ra đầu ra mong muốn.
Bên trong, Apache Pig chuyển đổi các tập lệnh này thành một loạt các công việc MapReduce và do đó, nó giúp công việc của lập trình viên trở nên dễ dàng. Kiến trúc của Apache Pig được hiển thị bên dưới.
Các thành phần của Apache Pig
Như trong hình, có nhiều thành phần khác nhau trong khung Apache Pig. Hãy để chúng tôi xem xét các thành phần chính.
Phân tích cú pháp
Ban đầu, các tập lệnh Pig được xử lý bởi Trình phân tích cú pháp. Nó kiểm tra cú pháp của script, kiểm tra kiểu và kiểm tra linh tinh khác. Đầu ra của trình phân tích cú pháp sẽ là một DAG (đồ thị xoay chiều có hướng), đại diện cho các câu lệnh Pig Latin và các toán tử logic.
Trong DAG, các toán tử logic của tập lệnh được biểu diễn dưới dạng các nút và các luồng dữ liệu được biểu diễn dưới dạng các cạnh.
Trình tối ưu hóa
Kế hoạch logic (DAG) được chuyển đến trình tối ưu hóa logic, bộ này thực hiện các tối ưu hóa logic như phép chiếu và kéo xuống.
Trình biên dịch
Trình biên dịch biên dịch kế hoạch logic được tối ưu hóa thành một loạt các công việc MapReduce.
Công cụ thực thi
Cuối cùng, các công việc MapReduce được gửi đến Hadoop theo thứ tự đã được sắp xếp. Cuối cùng, các công việc MapReduce này được thực thi trên Hadoop với kết quả mong muốn.
Mô hình dữ liệu Latinh lợn
Mô hình dữ liệu của Pig Latin được lồng vào nhau hoàn toàn và nó cho phép các kiểu dữ liệu phi nguyên tử phức tạp như map và tuple. Dưới đây là biểu đồ biểu diễn mô hình dữ liệu của Pig Latin.
Atom
Bất kỳ giá trị đơn lẻ nào trong Pig Latin, bất kể dữ liệu của chúng, kiểu được gọi là Atom. Nó được lưu trữ dưới dạng chuỗi và có thể được sử dụng dưới dạng chuỗi và số. int, long, float, double, chararray và bytearray là các giá trị nguyên tử của Pig. Một phần dữ liệu hoặc một giá trị nguyên tử đơn giản được gọi làfield.
Example - 'raja' hoặc '30'
Tuple
Một bản ghi được hình thành bởi một tập hợp các trường có thứ tự được gọi là một bộ, các trường có thể thuộc bất kỳ kiểu nào. Một bộ tương tự như một hàng trong bảng RDBMS.
Example - (Raja, 30 tuổi)
Túi
Túi là một tập hợp các bộ giá trị không có thứ tự. Nói cách khác, một bộ sưu tập các bộ giá trị (không phải là duy nhất) được gọi là một chiếc túi. Mỗi tuple có thể có bất kỳ số lượng trường nào (lược đồ linh hoạt). Túi được đại diện bởi '{}'. Nó tương tự như một bảng trong RDBMS, nhưng không giống như một bảng trong RDBMS, không nhất thiết mọi bộ đều chứa cùng một số trường hoặc các trường ở cùng một vị trí (cột) có cùng một kiểu.
Example - {(Raja, 30 tuổi), (Mohammad, 45 tuổi)}
Một túi có thể là một trường trong một mối quan hệ; trong bối cảnh đó, nó được gọi làinner bag.
Example - {Raja, 30 tuổi, {9848022338, [email protected],}}
Bản đồ
Bản đồ (hoặc bản đồ dữ liệu) là một tập hợp các cặp khóa-giá trị. Cáckeycần phải là loại chararray và phải là duy nhất. Cácvaluecó thể thuộc bất kỳ loại nào. Nó được đại diện bởi '[]'
Example - [tên # Raja, # 30 tuổi]
Quan hệ
Một mối quan hệ là một túi các bộ giá trị. Các quan hệ trong Pig Latin là không có thứ tự (không có gì đảm bảo rằng các bộ giá trị được xử lý theo bất kỳ thứ tự cụ thể nào).