Professional Documents
Culture Documents
Mục lục I. Giới thiệu tổng quan 3
Mục lục I. Giới thiệu tổng quan 3
4. Mục tiêu
- Giúp đơn giản hóa các tác vụ liên quan dữ liệu lớn.
- Nhập trực tuyến / hàng loạt Kafka vào Data Lake (HDFS, S3, ADLS).
- Các cửa hàng phục vụ tải hàng loạt từ Data Lake (ví dụ: HDFS -> Couchbase).
- Hỗ trợ đồng bộ hóa dữ liệu trên Hồ dữ liệu liên kết (HDFS <-> HDFS, HDFS <->
S3, S3 <-> ADLS).
- Tích hợp các API của nhà cung cấp bên ngoài (ví dụ: Salesforce, Dynamics, v.v.)
với kho dữ liệu (HDFS, Couchbase, v.v.).
- Thực thi chính sách lưu giữ dữ liệu và xóa GDPR trên HDFS / ADLS.
II. Kiến trúc và truy vấn trong Gobblin
- Một công việc Gobblin được xây dựng trên một tập hợp các cấu trúc (được minh
họa bằng các hộp màu xanh lục nhạt trong sơ đồ trên) hoạt động cùng nhau theo
một cách nhất định và hoàn thành công việc trích xuất dữ liệu. Tất cả các cấu trúc
đều có thể cắm được thông qua cấu hình công việc và có thể mở rộng bằng cách
thêm mới hoặc mở rộng các triển khai hiện có.
- Gobblin job bao gồm một tập hợp các nhiệm vụ, mỗi nhiệm vụ tương ứng với một
đơn vị công việc cần thực hiện và chịu trách nhiệm trích xuất một phần dữ liệu.
Các tác vụ của công việc Gobblin được thực thi bởi thời gian chạy của Gobblin
(được minh họa bằng các hộp màu cam trong sơ đồ trên) trên cài đặt triển khai của
lựa chọn (được minh họa bằng các hộp màu đỏ trong sơ đồ trên).
- Thời gian chạy Gobblin chịu trách nhiệm chạy các công việc Gobblin do người
dùng xác định trên cài đặt triển khai được lựa chọn. Nó xử lý các tác vụ phổ biến
bao gồm lập lịch công việc và công việc, xử lý lỗi và thử lại tác vụ, thương lượng
và quản lý tài nguyên, quản lý nhà nước, kiểm tra chất lượng dữ liệu, xuất bản dữ
liệu, v.v.
- Gobblin hiện hỗ trợ hai chế độ triển khai: chế độ độc lập trên một nút duy nhất và
chế độ Hadoop MapReduce trên một cụm Hadoop.
- Việc chạy và hoạt động của Gobblin được hỗ trợ bởi một số thành phần và tiện ích
(được minh họa bằng các hộp màu xanh lam trong sơ đồ ở trên) xử lý những việc
quan trọng như quản lý siêu dữ liệu, quản lý trạng thái, thu thập và báo cáo số liệu
cũng như giám sát.
1. Một công việc Gobblin bắt đầu với một giai đoạn tùy chọn là có được một
khóa công việc. Mục đích của việc này là ngăn việc chạy theo lịch trình tiếp
theo của cùng một công việc bắt đầu cho đến khi quá trình chạy hiện tại kết
thúc. Giai đoạn này là tùy chọn vì một số người lên lịch công việc như
Azkaban đã làm việc này.
2. Công việc tiếp theo là tạo một thể hiện của Source lớp được chỉ định trong
cấu hình công việc. A Source chịu trách nhiệm phân vùng công việc nhập
dữ liệu thành một tập hợp các WorkUnits, mỗi tập hợp đại diện cho một
đơn vị logic của công việc để trích xuất một phần dữ liệu từ nguồn dữ liệu.
Source cũng chịu trách nhiệm tạo một Extractor cho mỗi WorkUnit. A
Extractor, như tên cho thấy, thực sự nói chuyện với nguồn dữ liệu và trích
xuất dữ liệu từ nó. Lý do cho thiết kế này là Gobblin's Source được mô
phỏng theo Hadoop's InputFormat, chịu trách nhiệm phân vùng đầu vào
thành Split cũng như tạo một RecordReader cho mỗi Split.
3. Từ tập hợp các WorkUnits được cho bởi Source, công việc tạo ra một tập
hợp các nhiệm vụ. Một nhiệm vụ là một bản sao thời gian chạy của a
WorkUnit, đại diện cho một đơn vị logic của công việc. Thông thường, một
nhiệm vụ được tạo mỗi WorkUnit. Tuy nhiên, có một loại WorkUnits đặc
biệt được gọi là MultiWorkUnit bao bọc nhiều WorkUnits mà nhiều tác vụ
có thể được tạo, mỗi tác vụ được bao bọc WorkUnit.
4. Giai đoạn tiếp theo là khởi chạy và chạy các tác vụ. Cách các tác vụ được
thực thi và chúng chạy ở đâu phụ thuộc vào cài đặt triển khai. Trong chế độ
độc lập trên một nút duy nhất, các tác vụ đang chạy trong một nhóm luồng
dành riêng cho công việc đó, kích thước của nó có thể định cấu hình trên cơ
sở mỗi công việc. Trong chế độ Hadoop MapReduce trên một cụm Hadoop,
các tác vụ đang chạy trong các trình ánh xạ (được sử dụng hoàn toàn làm
vùng chứa để chạy các tác vụ).
5. Sau khi tất cả các nhiệm vụ của công việc kết thúc (thành công hoặc không
thành công), công việc sẽ xuất bản dữ liệu nếu có thể thực hiện được. Dữ
liệu được trích xuất có nên được xuất bản hay không được xác định bởi các
trạng thái tác vụ và JobCommitPolicy được sử dụng (có thể cấu hình). Cụ
thể hơn, dữ liệu được trích xuất phải được xuất bản nếu và chỉ khi có một
trong hai điều kiện sau:
8. Sau khi dữ liệu được trích xuất được xuất bản, công việc sẽ duy trì trạng
thái công việc / nhiệm vụ vào kho lưu trữ trạng thái. Khi lần chạy công việc
theo lịch trình tiếp theo bắt đầu, nó sẽ tải các trạng thái công việc / nhiệm
vụ của lần chạy trước đó để lấy những thứ như hình mờ để nó biết bắt đầu
từ đâu.
9. Trong quá trình thực thi, công việc có thể tạo ra một số dữ liệu làm việc
tạm thời không còn cần thiết sau khi hoàn thành công việc. Vì vậy, công
việc sẽ dọn dẹp dữ liệu công việc tạm thời như vậy trước khi thoát ra.
10. Cuối cùng, một giai đoạn tùy chọn của công việc là giải phóng khóa công
việc nếu nó được nhận ngay từ đầu. Điều này sẽ bật đèn xanh cho quá trình
chạy công việc tương tự đã được lên lịch tiếp theo để tiến hành.
- Nếu một công việc Gobblin bị hủy trước khi nó kết thúc, công việc đó sẽ không
tồn tại bất kỳ trạng thái công việc / nhiệm vụ nào cũng như cam kết và xuất bản
bất kỳ dữ liệu nào (như đường chấm chấm hiển thị trong sơ đồ).
- Converter chịu trách nhiệm chuyển đổi cả lược đồ và bản ghi dữ liệu và là
cấu trúc cốt lõi để chuyển đổi dữ liệu.
- QualityChecker chịu trách nhiệm kiểm tra chất lượng dữ liệu. Có hai loại
QualityCheckers: một loại kiểm tra các bản ghi dữ liệu riêng lẻ và quyết
định xem mỗi bản ghi có nên tiến hành giai đoạn tiếp theo trong luồng tác
vụ hay không và một loại kiểm tra toàn bộ đầu ra của tác vụ và quyết định
xem dữ liệu có thể được cam kết hay không.
- ForkOperator là một loại toán tử điều khiển cho phép luồng tác vụ phân
nhánh thành nhiều luồng, mỗi luồng sẽ đi đến một bồn rửa được cấu hình
riêng.
- DataWriter chịu trách nhiệm ghi các bản ghi dữ liệu vào bồn rửa mà nó liên
kết. Gobblin out-of-box cung cấp khả năng AvroHdfsDataWriter ghi dữ
liệu ở định dạng Avro lên HDFS.
- DataPublisher chịu trách nhiệm xuất bản dữ liệu trích xuất của một công
việc Gobblin.
2. Giới thiệu về truy vấn trong Gobblin
- QueryBasedSource đại diện cho một danh mục các nguồn có dữ liệu được lấy
bằng cách gửi các truy vấn. Tập dữ liệu của một nguồn được xác định là a
SourceEntity. Truy vấn có thể được thực hiện bằng cách gửi yêu cầu HTTP hoặc
lệnh SQL. Thông thường, nhưng không phải lúc nào, một nguồn cũng có một
nguồn tương ứng QueryBasedExtractor, xác định cách thức và thực hiện các quy
trình chung để trích xuất dữ liệu từ nguồn.
3. Cấu hình
4.1. QueryBasedSource
- Giống như các danh mục nguồn khác, QueryBasedSource cũng tập trung vào việc
tạo các đơn vị công việc. Cách nó thực hiện theo mô hình chung:
- Tính toán hình mờ thấp của lần chạy hiện tại dựa trên các lần chạy trước đó
- Tính toán một hình mờ cao
- Bộ dữ liệu phân vùng của hiện tại chạy vào các đơn vị công việc
- Chọn các đơn vị làm việc trước đó đã thất bại.
4.2. QueryBasedExtractor
- Hiện tại trong Gobblin, tùy thuộc vào cách một trình trích xuất giao tiếp với một
nguồn (hoặc các giao thức giao tiếp khác nhau ), được QueryBasedExtractor chia
thành 2 loại: RestApiExtractor và JdbcExtractor. Một trình trích xuất cụ thể phải
cung cấp một số logic nguồn cụ thể để trích xuất thành công thông tin từ nguồn.
4.3. Build
- Việc xây dựng một trình trích xuất dựa trên truy vấn có thể bao gồm ba truy vấn:
- extractMetadata gửi một truy vấn để tìm nạp giản đồ dữ liệu. Ví dụ:
select col.column_name, col.data_type,
case when CHARACTER_OCTET_LENGTH is null then 0 else 0 end as
length,
case when NUMERIC_PRECISION is null then 0 else
NUMERIC_PRECISION end as precision,
case when NUMERIC_SCALE is null then 0 else NUMERIC_SCALE
end as scale,
case when is_nullable='NO' then 'false' else 'true' end as nullable, '' as
format,
case when col.column_comment is null then '' else col.column_comment
end as comment
from information_schema.COLUMNS col
WHERE upper(col.table_name)=upper(?) AND
upper(col.table_schema)=upper(?)
order by col.ORDINAL_POSITION
- getMaxWatermark gửi một truy vấn để tính toán hình mờ cao mới nhất. Ví
dụ:
SELECT max(SystemModTime) FROM salesforce.campaign
where (SystemModTime >= '2014-01-01 00:00:00' and SystemModTime
<= '2017-03-09 10:42:10')
- getSourceCount gửi một truy vấn cho tổng số bản ghi được lấy từ nguồn.
Ví dụ:
SELECT COUNT(1) FROM salesforce.campaign
where (SystemModTime >= '2014-01-01 00:00:00' and SystemModTime
<= '2017-03-01 19:03:07')
4.4. readRecord
- getRecordSet: Một cách tiêu chuẩn để gửi một truy vấn, ví dụ: Rest api hoặc Jdbc
SELECT id,name,budget,systemmodtime FROM salesforce.campaign
where (SystemModTime >= '2014-01-01 00:00:00')
- getRecordSetFromSourceApi: Một cách cụ thể để gửi truy vấn dựa trên api nguồn,
ví dụ: Salesforce