You are on page 1of 11

Mục lục

I. Giới thiệu tổng quan 3


1. Apache Gobblin là gì? 3
2. Tính năng Apache Gobblin 3
3. Điểm nổi bật của Gobblin 3
4. Mục tiêu 3
II. Kiến trúc và truy vấn trong Gobblin 4
1. Kiến trúc Gobblin 4
1.1. Tổng quan kiến trúc Gobblin 4
1.2. Luồng công việc của Gobblin 5
1.3. Cấu trúc Gobblin 7
2. Giới thiệu về truy vấn trong Gobblin 9
3. Cấu hình 9
4. Query 11
4.1. QueryBasedSource 11
4.2. QueryBasedExtractor 11
4.3. Build 11
4.4. readRecord 12
I. Giới thiệu tổng quan

1. Apache Gobblin là gì?


- Gobblin là một khung tích hợp dữ liệu phân tán giúp đơn giản hóa các khía cạnh
phổ biến của tích hợp dữ liệu lớn như nhập dữ liệu, sao chép, tổ chức và quản lý
vòng đời cho cả hệ sinh thái dữ liệu hàng loạt và luồng. Là một giải pháp quản lý
dữ liệu có khả năng mở rộng cao cho dữ liệu có cấu trúc và định hướng byte trong
hệ sinh thái dữ liệu không đồng nhất.

2. Tính năng Apache Gobblin


- Nhập và xuất dữ liệu từ nhiều nguồn khác nhau và đưa vào và ra khỏi hồ dữ liệu
(data lake). Gobblin được tối ưu hóa và thiết kế cho các mẫu ELT với các phép
biến đổi nội tuyến khi nhập (t nhỏ).
- Tổ chức dữ liệu trong hồ (ví dụ: nén, phân vùng, khử trùng lặp).
- Quản lý vòng đời của dữ liệu trong hồ (ví dụ: lưu giữ dữ liệu).
- Tuân thủ Quản lý dữ liệu trên toàn hệ sinh thái (ví dụ: xóa dữ liệu hạt nhỏ).

3. Điểm nổi bật của Gobblin


- Được thử nghiệm trên quy mô lớn: Chạy trong sản xuất ở quy mô petabyte tại các
công ty như LinkedIn, PayPal, Verizon, v.v.
- Tính năng phong phú: Hỗ trợ phân vùng nhiệm vụ, quản lý trạng thái để xử lý gia
tăng, xuất bản dữ liệu nguyên tử, kiểm tra chất lượng dữ liệu, lập lịch công việc,
khả năng chịu lỗi, v.v.
- Hỗ trợ các chế độ thực thi theo luồng và hàng loạt.
- Mặt phẳng điều khiển (Gobblin-as-a-service) hỗ trợ kích hoạt lập trình và điều
phối các hoạt động trên mặt phẳng dữ liệu.

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

1. Kiến trúc Gobblin

1.1. Tổng quan kiến trúc Gobblin


- Gobblin được xây dựng dựa trên ý tưởng về khả năng mở rộng, tức là người dùng
sẽ dễ dàng thêm bộ điều hợp mới hoặc mở rộng bộ điều hợp hiện có để làm việc với các
nguồn mới và bắt đầu trích xuất dữ liệu từ các nguồn mới trong bất kỳ cài đặt triển khai
nào. Kiến trúc của Gobblin phản ánh ý tưởng này, như thể hiện trong hình bên dưới:

- 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.2. Luồng công việc của Gobblin


- Một công việc Gobblin chịu trách nhiệm trích xuất dữ liệu trong một phạm vi /
phạm vi xác định từ một nguồn dữ liệu và ghi dữ liệu vào một phần chìm chẳng
hạn như HDFS. Nó quản lý toàn bộ vòng đời của việc nhập dữ liệu trong một
luồng nhất định như được minh họa trong hình bên dưới.

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:

6. JobCommitPolicy.COMMIT_ON_PARTIAL_SUCCESS được chỉ định


trong cấu hình công việc.
7. JobCommitPolicy.COMMIT_ON_FULL_SUCCESS được chỉ định trong
cấu hình công việc và tất cả các tác vụ đều thành công.

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ơ đồ).

1.3. Cấu trúc Gobblin


- Một công việc Gobblin tạo và chạy các tác vụ, mỗi tác vụ chịu trách nhiệm trích
xuất một phần dữ liệu được công việc đó kéo ra. Nhiệm vụ Gobblin được tạo từ
một nhiệm vụ WorkUnit đại diện cho một đơn vị công việc và đóng vai trò như
một vùng chứa cấu hình công việc trong thời gian chạy. Một nhiệm vụ soạn các
cấu trúc Gobblin thành một luồng để trích xuất, chuyển đổi, kiểm tra chất lượng
dữ liệu và cuối cùng ghi từng bản ghi dữ liệu được trích xuất vào bộ lưu trữ được
chỉ định. Hình dưới đây cung cấp một cái nhìn tổng quan về các cấu trúc của
Gobblin tạo thành các luồng tác vụ trong một công việc của Gobblin.
- Source đại diện cho một bộ điều hợp giữa nguồn dữ liệu và Gobblin và
được sử dụng bởi một công việc của Gobblin khi bắt đầu quy trình công
việc. 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.

- 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

Khóa cấu hình Giá trị mặc định Sự mô tả

source.querybased.schema Phải cung cấp Tên cơ sở dữ liệu

Tên của thực thể nguồn


sẽ được lấy từ nguồn. Nó
có thể là một bảng cơ sở
source.entity Phải cung cấp
dữ liệu, một chủ đề
nguồn, một thực thể an
toàn, v.v.

Số lượng phân vùng


hoặc đơn vị công việc tối
đa để phân chia dòng
source.max.number.of.partition
20 điện chạy qua. Chỉ được
s
sử dụng bởi
QueryBasedSource và
FileBasedSource.

source.querybased.watermark.t Phải cung cấp Định dạng của hình mờ


ype được sử dụng khi trích
xuất dữ liệu từ nguồn.
Các loại có thể là dấu
thời gian, ngày, giờ, đơn
giản.

Giá trị để hình mờ bắt


đầu lấy dữ liệu từ đó,
cũng là hình mờ mặc
source.querybased.start.value Phải cung cấp
định nếu hình mờ trước
đó không thể tìm thấy ở
trạng thái tác vụ cũ.

Hình mờ cao mà công


source.querybased.end.value Không bắt buộc
việc sẽ kéo lên.

Danh sách các cột được


extract.delta.fields Không bắt buộc
liên kết với hình mờ.

source.querybased.skip.count.c Tắt tính toán tổng số bản


Sai
alc ghi được lấy từ nguồn.

Đúng nếu kéo này cần sử


dụng apis nguồn cụ thể
thay vì các giao thức tiêu
source.querybased.is.specific.a
Sai chuẩn. Ví dụ: Sử dụng
pi.active
api số lượng lớn
salesforce thay vì api
còn lại
4. Query

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

You might also like