Dataflow là một mô hình lập trình hợp nhất và là một dịch vụ được quản lý để phát triển và thực thi nhiều mẫu xử lý dữ liệu, bao gồm ETL, tính toán theo lô và tính toán liên tục. Vì Dataflow là một dịch vụ được quản lý, nên dịch vụ này có thể phân bổ tài nguyên theo yêu cầu để giảm thiểu độ trễ trong khi vẫn duy trì hiệu suất sử dụng cao.
Mô hình Dataflow kết hợp xử lý hàng loạt và xử lý luồng dữ liệu để nhà phát triển không phải đánh đổi giữa độ chính xác, chi phí và thời gian xử lý. Trong lớp học lập trình này, bạn sẽ tìm hiểu cách chạy một quy trình Dataflow để đếm số lần xuất hiện của các từ riêng biệt trong một tệp văn bản.
Hướng dẫn này được điều chỉnh từ https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven
Kiến thức bạn sẽ học được
- Cách tạo dự án Maven bằng Cloud Dataflow SDK
- Chạy một quy trình mẫu bằng Bảng điều khiển Google Cloud Platform
- Cách xoá bộ chứa Cloud Storage được liên kết và nội dung trong đó
Bạn cần có
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud Platform?
Thiết lập môi trường theo tốc độ của riêng bạn
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển Google Cloud Platform (console.cloud.google.com) rồi tạo một dự án mới:
Hãy nhớ mã dự án, một tên duy nhất trong tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID
.
Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn của bạn quá vài đô la, nhưng có thể tốn nhiều hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó chạy (xem phần "dọn dẹp" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử miễn phí 300 USD.
Bật các API
Nhấp vào biểu tượng trình đơn ở trên cùng bên trái màn hình.
Chọn API Manager (Trình quản lý API) trong trình đơn thả xuống.
Tìm "Google Compute Engine" trong hộp tìm kiếm. Nhấp vào "Google Compute Engine API" trong danh sách kết quả xuất hiện.
Trên trang Google Compute Engine, hãy nhấp vào Bật
Sau khi bật, hãy nhấp vào mũi tên để quay lại.
Bây giờ, hãy tìm kiếm các API sau đây và bật chúng:
- Google Dataflow API
- Stackdriver Logging API
- Google Cloud Storage
- Google Cloud Storage JSON API
- API BigQuery
- Google Cloud Pub/Sub API
- Google Cloud Datastore API
Trong Bảng điều khiển Google Cloud Platform, hãy nhấp vào biểu tượng Trình đơn ở trên cùng bên trái màn hình:
Di chuyển xuống rồi chọn Cloud Storage trong mục phụ Bộ nhớ:
Giờ đây, bạn sẽ thấy Cloud Storage Browser (Trình duyệt Cloud Storage). Giả sử bạn đang sử dụng một dự án hiện không có bộ chứa Cloud Storage nào, bạn sẽ thấy một hộp thoại mời bạn tạo bộ chứa mới:
Nhấn vào nút Tạo vùng chứa để tạo một vùng chứa:
Nhập tên cho nhóm của bạn. Như hộp thoại lưu ý, tên bộ chứa phải là duy nhất trên tất cả các bộ chứa trong Cloud Storage. Vì vậy, nếu chọn một tên dễ nhận biết, chẳng hạn như "test", có thể bạn sẽ thấy rằng người khác đã tạo một vùng chứa có tên đó và bạn sẽ nhận được lỗi.
Ngoài ra, có một số quy tắc liên quan đến những ký tự được phép dùng trong tên nhóm. Nếu tên nhóm của bạn bắt đầu và kết thúc bằng một chữ cái hoặc chữ số, đồng thời chỉ sử dụng dấu gạch ngang ở giữa, thì bạn sẽ không gặp vấn đề gì. Nếu bạn cố gắng sử dụng các ký tự đặc biệt hoặc cố gắng bắt đầu hoặc kết thúc tên nhóm bằng một ký tự không phải là chữ cái hoặc số, hộp thoại sẽ nhắc bạn về các quy tắc.
Nhập tên riêng biệt cho nhóm của bạn rồi nhấn vào Tạo. Nếu chọn một tên đã được sử dụng, bạn sẽ thấy thông báo lỗi như trên. Sau khi tạo thành công một vùng chứa, bạn sẽ được chuyển đến vùng chứa mới, trống trong trình duyệt:
Tên nhóm mà bạn thấy sẽ khác, vì tên nhóm phải là duy nhất trên tất cả các dự án.
Kích hoạt Google Cloud Shell
Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Sau đó, hãy nhấp vào "Start Cloud Shell" (Bắt đầu Cloud Shell):
Quá trình cung cấp và kết nối với môi trường chỉ mất vài phút:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt hoặc Google Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.
Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra của lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
Sau khi Cloud Shell khởi động, hãy bắt đầu bằng cách tạo một dự án Maven chứa Cloud Dataflow SDK cho Java.
Chạy lệnh mvn archetype:generate
trong shell của bạn như sau:
mvn archetype:generate \
-DarchetypeArtifactId=google-cloud-dataflow-java-archetypes-examples \
-DarchetypeGroupId=com.google.cloud.dataflow \
-DarchetypeVersion=1.9.0 \
-DgroupId=com.example \
-DartifactId=first-dataflow \
-Dversion="0.1" \
-DinteractiveMode=false \
-Dpackage=com.example
Sau khi chạy lệnh, bạn sẽ thấy một thư mục mới có tên là first-dataflow
trong thư mục hiện tại. first-dataflow
chứa một dự án Maven bao gồm Cloud Dataflow SDK cho Java và các quy trình mẫu.
Hãy bắt đầu bằng cách lưu mã dự án và tên nhóm Cloud Storage dưới dạng các biến môi trường. Bạn có thể thực hiện việc này trong Cloud Shell. Nhớ thay thế <your_project_id>
bằng mã dự án của riêng bạn.
export PROJECT_ID=<your_project_id>
Bây giờ, chúng ta sẽ làm tương tự cho bộ chứa Cloud Storage. Hãy nhớ thay thế <your_bucket_name>
bằng tên duy nhất mà bạn đã dùng để tạo vùng lưu trữ ở bước trước.
export BUCKET_NAME=<your_bucket_name>
Thay đổi thành thư mục first-dataflow/
.
cd first-dataflow
Chúng ta sẽ chạy một quy trình có tên là WordCount, quy trình này đọc văn bản, mã hoá các dòng văn bản thành các từ riêng lẻ và thực hiện việc đếm tần suất của từng từ đó. Trước tiên, chúng ta sẽ chạy quy trình và trong khi quy trình đang chạy, chúng ta sẽ xem xét những gì đang diễn ra ở từng bước.
Khởi động quy trình bằng cách chạy lệnh mvn compile exec:java
trong shell hoặc cửa sổ dòng lệnh. Đối với các đối số --project, --stagingLocation,
và --output
, lệnh bên dưới sẽ tham chiếu đến các biến môi trường mà bạn đã thiết lập trước đó trong bước này.
mvn compile exec:java \
-Dexec.mainClass=com.example.WordCount \
-Dexec.args="--project=${PROJECT_ID} \
--stagingLocation=gs://${BUCKET_NAME}/staging/ \
--output=gs://${BUCKET_NAME}/output \
--runner=BlockingDataflowPipelineRunner"
Trong khi công việc đang chạy, hãy tìm công việc đó trong danh sách công việc.
Mở giao diện người dùng Giám sát Cloud Dataflow trong Bảng điều khiển Google Cloud Platform. Bạn sẽ thấy công việc đếm từ của mình có trạng thái là Đang chạy:
Bây giờ, hãy xem các tham số của quy trình. Bắt đầu bằng cách nhấp vào tên công việc của bạn:
Khi chọn một công việc, bạn có thể xem biểu đồ thực thi. Biểu đồ thực thi của một quy trình biểu thị từng phép biến đổi trong quy trình dưới dạng một hộp chứa tên phép biến đổi và một số thông tin trạng thái. Bạn có thể nhấp vào dấu mũ ở góc trên cùng bên phải của mỗi bước để xem thêm thông tin chi tiết:
Hãy xem quy trình chuyển đổi dữ liệu ở từng bước như thế nào:
- Đọc: Ở bước này, quy trình đọc từ một nguồn đầu vào. Trong trường hợp này, đó là một tệp văn bản trên Cloud Storage chứa toàn bộ văn bản của vở kịch Vua Lear của Shakespeare. Quy trình của chúng tôi đọc tệp từng dòng và xuất ra từng
PCollection
, trong đó mỗi dòng trong tệp văn bản là một phần tử trong bộ sưu tập. - CountWords: Bước
CountWords
có hai phần. Trước tiên, nó sử dụng một hàm do song song (ParDo) có tên làExtractWords
để mã hoá từng dòng thành các từ riêng lẻ. Đầu ra của ExtractWords là một PCollection mới, trong đó mỗi phần tử là một từ. Bước tiếp theo,Count
, sử dụng một phép biến đổi do Dataflow SDK cung cấp. Phép biến đổi này trả về các cặp khoá, giá trị, trong đó khoá là một từ duy nhất và giá trị là số lần từ đó xuất hiện. Dưới đây là phương thức triển khaiCountWords
và bạn có thể xem toàn bộ tệp WordCount.java trên GitHub:
/**
* A PTransform that converts a PCollection containing lines of text
* into a PCollection of formatted word counts.
*/
public static class CountWords extends PTransform<PCollection<String>,
PCollection<KV<String, Long>>> {
@Override
public PCollection<KV<String, Long>> apply(PCollection<String> lines) {
// Convert lines of text into individual words.
PCollection<String> words = lines.apply(
ParDo.of(new ExtractWordsFn()));
// Count the number of times each word occurs.
PCollection<KV<String, Long>> wordCounts =
words.apply(Count.<String>perElement());
return wordCounts;
}
}
- FormatAsText: Đây là một hàm định dạng từng cặp khoá-giá trị thành một chuỗi có thể in. Sau đây là phép biến đổi
FormatAsText
để triển khai việc này:
/** A SimpleFunction that converts a Word and Count into a printable string. */
public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
@Override
public String apply(KV<String, Long> input) {
return input.getKey() + ": " + input.getValue();
}
}
- WriteCounts: Trong bước này, chúng ta sẽ ghi các chuỗi có thể in vào nhiều tệp văn bản được phân đoạn.
Chúng ta sẽ xem xét kết quả đầu ra từ quy trình này sau vài phút nữa.
Bây giờ, hãy xem trang Tóm tắt ở bên phải biểu đồ. Trang này bao gồm các tham số của quy trình mà chúng ta đã đưa vào lệnh mvn compile exec:java
.
Bạn cũng có thể thấy Bộ đếm tuỳ chỉnh cho quy trình, trong trường hợp này, bộ đếm cho biết số lượng dòng trống đã gặp phải cho đến nay trong quá trình thực thi. Bạn có thể thêm các bộ đếm mới vào quy trình để theo dõi các chỉ số dành riêng cho ứng dụng.
Bạn có thể nhấp vào biểu tượng Nhật ký để xem thông báo lỗi cụ thể.
Bạn có thể lọc những thông báo xuất hiện trong thẻ Nhật ký công việc bằng cách sử dụng trình đơn thả xuống Mức độ nghiêm trọng tối thiểu.
Bạn có thể sử dụng nút Worker Logs (Nhật ký của Worker) trong thẻ nhật ký để xem nhật ký của worker cho các phiên bản Compute Engine chạy quy trình của bạn. Nhật ký Worker bao gồm các dòng nhật ký do mã của bạn và mã do Dataflow tạo ra để chạy mã đó.
Nếu bạn đang cố gắng gỡ lỗi một lỗi trong quy trình, thì thường sẽ có thêm nhật ký trong Nhật ký của Worker giúp giải quyết vấn đề. Xin lưu ý rằng các nhật ký này được tổng hợp trên tất cả các worker và có thể được lọc và tìm kiếm.
Trong bước tiếp theo, chúng ta sẽ kiểm tra xem công việc của bạn có thành công hay không.
Mở giao diện người dùng Giám sát Cloud Dataflow trong Bảng điều khiển Google Cloud Platform.
Ban đầu, bạn sẽ thấy công việc đếm từ của mình có trạng thái Đang chạy, sau đó là Đã hoàn tất:
Công việc này sẽ mất khoảng 3 đến 4 phút để chạy.
Bạn có nhớ khi chạy quy trình và chỉ định một nhóm đầu ra không? Hãy xem kết quả (bởi vì bạn có muốn biết mỗi từ trong Vua Lear xuất hiện bao nhiêu lần không?!). Chuyển về Cloud Storage Browser trong Bảng điều khiển Google Cloud Platform. Trong vùng lưu trữ, bạn sẽ thấy các tệp đầu ra và tệp dàn dựng mà tác vụ của bạn đã tạo:
Bạn có thể tắt các tài nguyên của mình trên Bảng điều khiển Google Cloud Platform.
Mở trình duyệt Cloud Storage trong Bảng điều khiển Google Cloud Platform.
Chọn hộp đánh dấu bên cạnh nhóm mà bạn đã tạo.
Nhấp vào XOÁ để xoá vĩnh viễn nhóm và nội dung của nhóm.
Bạn đã tìm hiểu cách tạo một dự án Maven bằng Cloud Dataflow SDK, chạy một quy trình ví dụ bằng Google Cloud Platform Console, đồng thời xoá vùng lưu trữ Cloud Storage được liên kết và nội dung của vùng lưu trữ đó.
Tìm hiểu thêm
- Tài liệu về Dataflow: https://cloud.google.com/dataflow/docs/
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép Creative Commons Attribution 3.0 và Giấy phép Apache 2.0.