Chạy quy trình xử lý văn bản dữ liệu lớn trong Cloud Dataflow

1. Tổng quan

Cloud-Dataflow.png

Dataflow là gì?

Dataflow là một dịch vụ được quản lý để thực thi nhiều mẫu xử lý dữ liệu. Tài liệu trên trang web này cho bạn biết cách triển khai quy trình xử lý dữ liệu hàng loạt và truyền trực tuyến bằng Dataflow, bao gồm cả hướng dẫn sử dụng các tính năng dịch vụ.

Apache Beam SDK là một mô hình lập trình nguồn mở cho phép bạn phát triển cả quy trình hàng loạt và quy trình phát trực tuyến. Bạn tạo quy trình bằng chương trình Apache Beam, sau đó chạy quy trình trên dịch vụ Dataflow. Tài liệu về Apache Beam cung cấp thông tin khái niệm chuyên sâu và tài liệu tham khảo cho mô hình lập trình Apache Beam, SDK và các trình chạy khác.

Truyền trực tuyến phân tích dữ liệu một cách nhanh chóng

Dataflow giúp phát triển quy trình dữ liệu truyền trực tuyến nhanh chóng và đơn giản với độ trễ dữ liệu thấp hơn.

Đơn giản hoá việc vận hành và quản lý

Cho phép các nhóm tập trung vào việc lập trình thay vì quản lý các cụm máy chủ, vì phương pháp không máy chủ của Dataflow giúp loại bỏ chi phí vận hành khỏi các tải công việc về kỹ thuật dữ liệu.

Giảm tổng chi phí sở hữu

Phương pháp tự động cấp tài nguyên kết hợp với khả năng xử lý hàng loạt để tối ưu hoá chi phí có nghĩa là Dataflow cung cấp dung lượng gần như vô hạn để quản lý các khối lượng công việc tăng đột biến theo mùa mà không chi tiêu quá mức.

Các tính năng chính

Quản lý tài nguyên tự động và cân bằng công việc một cách linh hoạt

Dataflow tự động hoá việc cấp phép và quản lý tài nguyên xử lý để giảm thiểu độ trễ và tối đa hoá việc sử dụng. Nhờ đó, bạn không cần phải tạo bản sao hoặc đặt trước các bản sao theo cách thủ công. Việc phân chia công việc cũng được tự động hoá và tối ưu hoá để tự động cân bằng lại công việc bị trễ. Không cần phải theo đuổi "phím nóng" hoặc xử lý trước dữ liệu đầu vào.

Tự động cấp tài nguyên bổ sung theo chiều ngang

Việc tự động cấp tài nguyên bổ sung theo chiều ngang cho tài nguyên của worker theo chiều ngang để đạt công suất tối ưu, giúp cải thiện hiệu suất tổng thể.

Đặt giá lên lịch cho tài nguyên linh hoạt để xử lý hàng loạt

Để xử lý linh hoạt trong thời gian lên lịch công việc, chẳng hạn như các công việc qua đêm, tính năng lập lịch tài nguyên linh hoạt (FlexRS) đưa ra mức giá thấp hơn khi xử lý hàng loạt. Các công việc linh hoạt này được đưa vào hàng đợi với đảm bảo rằng chúng sẽ được truy xuất để thực thi trong khoảng thời gian 6 giờ.

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 Apache Beam bằng SDK Java
  • 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?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá trải nghiệm sử dụng các dịch vụ của Google Cloud Platform như thế nào?

Người mới tập Trung cấp Thành thạo

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Lớp này sẽ được đề cập sau trong lớp học lập trình này là PROJECT_ID.

  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Bật API

Nhấp vào biểu tượng trình đơn ở trên cùng bên trái màn hình.

2bfc27ef9ba2ec7d.png.

Chọn API & Dịch vụ > Trang tổng quan từ trình đơn thả xuống.

5b65523a6cc0afa6.pngS

Chọn + Bật API và dịch vụ.

81ed72192c0edd96.pngS

Tìm kiếm "Compute Engine" vào hộp tìm kiếm. Nhấp vào "Compute Engine API" (API Công cụ điện toán) trong danh sách kết quả xuất hiện.

3f201e991c7b4527.pngS

Trên trang Google Compute Engine, hãy nhấp vào Enable (Bật)

ac121653277fa7bb.png

Sau khi bật chế độ này, hãy nhấp vào mũi tên để quay lại.

Giờ hãy tìm và bật cả các API sau:

  • Cloud Dataflow
  • Stackdriver
  • Cloud Storage
  • JSON trong Cloud Storage
  • BigQuery
  • Cloud Pub/Sub
  • Lưu trữ dữ liệu trên đám mây
  • Cloud Resource Manager API

3. Tạo bộ chứa Cloud Storage mới

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:

2bfc27ef9ba2ec7d.png.

Cuộn xuống rồi chọn Cloud Storage > Trình duyệt trong tiểu mục Bộ nhớ:

2b6c3a2a92b47015.pngS

Bây giờ, bạn sẽ thấy Trình duyệt Cloud Storage, và giả sử bạn đang dùng một dự án hiện không có bộ chứa nào trong Cloud Storage, thì bạn sẽ thấy lời mời tạo một bộ chứa mới. Nhấn vào nút Tạo bộ chứa để tạo một bộ chứa:

a711016d5a99dc37.png

Nhập tên cho bộ chứa của bạn. Khi hộp thoại lưu ý, tên bộ chứa phải là duy nhất trên tất cả các Cloud Storage. Vì vậy, nếu chọn một tên rõ ràng, chẳng hạn như "test" (kiểm thử), có thể bạn sẽ thấy rằng ai đó đã tạo nhóm chứa tên đó và sẽ nhận được thông báo lỗi.

Ngoài ra còn có một số quy tắc liên quan đến những ký tự được phép trong tên bộ chứa. Nếu bạn bắt đầu và kết thúc tên nhóm bằng một chữ cái hoặc số, đồng thời chỉ sử dụng dấu gạch ngang ở giữa thì sẽ không có 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 hay kết thúc tên nhóm bằng một tên không phải chữ cái hay số, hộp thoại sẽ nhắc bạn về các quy tắc.

3a5458648cfe3358.pngS

Nhập tên riêng biệt cho bộ chứa của bạn rồi nhấn vào Tạo. Nếu chọn một tính năng đã được sử dụng, bạn sẽ thấy thông báo lỗi hiển thị ở trên. Khi đã tạo thành công một bộ chứa, bạn sẽ được chuyển đến bộ chứa mới, trống trong trình duyệt:

3bda986ae88c4e71.pngs

Tất nhiên, tên bộ chứa mà bạn nhìn thấy sẽ khác vì chúng phải là duy nhất trong tất cả các dự án.

4. Khởi động Cloud Shell

Kích hoạt Cloud Shell

  1. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuyFP1RzVad_4nCa0Zszrz5LtwQZZ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Nếu trước đây chưa từng khởi động Cloud Shell, bạn sẽ được trình bày một màn hình trung gian (dưới màn hình đầu tiên) mô tả về ứng dụng này. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện chỉ bằng một trình duyệt hoặc Chromebook.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án.

  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list

Kết quả lệnh

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Kết quả lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả lệnh

Updated property [core/project].

5. Tạo một dự án Maven

Sau khi Cloud Shell ra mắt, hãy bắt đầu bằng cách tạo một dự án Maven sử dụng SDK Java cho Apache Beam.

Apache Beam là một mô hình lập trình nguồn mở dành cho quy trình dữ liệu. Bạn xác định các quy trình này bằng chương trình Apache Beam và có thể chọn một trình chạy (chẳng hạn như Dataflow) để thực thi quy trình của mình.

Chạy lệnh mvn archetype:generate trong shell như sau:

  mvn archetype:generate \
     -DarchetypeGroupId=org.apache.beam \
     -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
     -DarchetypeVersion=2.46.0 \
     -DgroupId=org.example \
     -DartifactId=first-dataflow \
     -Dversion="0.1" \
     -Dpackage=org.apache.beam.examples \
     -DinteractiveMode=false

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 SDK Cloud Dataflow cho Java và các quy trình mẫu.

6. Chạy quy trình xử lý văn bản trên Cloud Dataflow

Hãy bắt đầu bằng cách lưu mã dự án và tên bộ chứa trong Cloud Storage làm biến môi trường. Bạn có thể thực hiện việc này trong Cloud Shell. Hãy 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ẽ thực hiện tương tự đối với 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 bộ chứa ở bước trước.

 export BUCKET_NAME=<your_bucket_name>

Đổi sang 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 sẽ đọc văn bản, mã hoá các dòng văn bản thành từng từ riêng lẻ rồi đếm tần suất của từng từ đó. Trước tiên, chúng ta sẽ chạy quy trình. Trong khi quy trình đang chạy, chúng ta sẽ xem xét điều gì xảy ra trong mỗi bước.

Bắt đầu quy trình bằng cách chạy lệnh mvn compile exec:java trong cửa sổ shell hoặc dòng lệnh. Đối với các đối số --project, --stagingLocation,--output, lệnh dưới đây 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 \
      -Pdataflow-runner compile exec:java \
      -Dexec.mainClass=org.apache.beam.examples.WordCount \
      -Dexec.args="--project=${PROJECT_ID} \
      --stagingLocation=gs://${BUCKET_NAME}/staging/ \
      --output=gs://${BUCKET_NAME}/output \
      --runner=DataflowRunner \
      --region=us-central1 \
      --gcpTempLocation=gs://${BUCKET_NAME}/temp"

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 web Cloud Dataflow trong Bảng điều khiển Google Cloud Platform. Bạn sẽ thấy công việc số từ có trạng thái Đang chạy:

3623be74922e3209.pngS

Bây giờ, hãy xem các tham số quy trình. Bắt đầu bằng cách nhấp vào tên công việc của bạn:

816d8f59c72797d7.png.

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 quy trình biểu diễn mỗi biến đổi trong quy trình dưới dạng một hộp chứa tên biến đổi và một số thông tin trạng thái. Bạn có thể nhấp vào dấu carat ở góc trên cùng bên phải của mỗi bước để xem thêm chi tiết:

80a972dd19a6f1eb.png.

Hãy xem cách quy trình chuyển đổi dữ liệu ở mỗi bước:

  • Đọc: Trong bước này, quy trình sẽ đọ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 trong Cloud Storage chứa toàn bộ văn bản trong vở King Lear của Shakespeare. Quy trình của chúng ta sẽ đọc từng dòng của tệp và xuất ra mỗi PCollection, trong đó mỗi dòng trong tệp văn bản là một phần tử trong tập hợp.
  • CountWords: Bước CountWords có hai phần. Trước tiên, lớp này sử dụng một hàm thực hiện song song (ParDo) có tên là ExtractWords để mã hoá mỗi 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 là Count sử dụng phép biến đổi do SDK Java cung cấp. Biến đổi này trả về các cặp giá trị và khoá, trong đó khoá là một từ duy nhất và giá trị là số lần xuất hiện. Dưới đây là phương pháp triển khai CountWords và bạn có thể xem tệp WordCount.java đầy đủ trên GitHub:
 /**
   * A PTransform that converts a PCollection containing lines of text into a PCollection of
   * formatted word counts.
   *
   * <p>Concept #3: This is a custom composite transform that bundles two transforms (ParDo and
   * Count) as a reusable PTransform subclass. Using composite transforms allows for easy reuse,
   * modular testing, and an improved monitoring experience.
   */
  public static class CountWords
      extends PTransform<PCollection<String>, PCollection<KV<String, Long>>> {
    @Override
    public PCollection<KV<String, Long>> expand(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.perElement());

      return wordCounts;
    }
  }
  • MapElements: Phương thức này gọi FormatAsTextFn, được sao chép bên dưới, định dạng từng cặp giá trị, khoá thành một chuỗi có thể in được.
  /** 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 ghi các chuỗi có thể in được vào nhiều tệp văn bản được phân đoạn.

Chúng ta sẽ xem kết quả từ quy trình sau vài phút.

Bây giờ, hãy xem trang job info (Thông tin công việc) ở bên phải biểu đồ, trong đó có các tham số quy trình mà chúng ta đã đưa vào lệnh mvn compile exec:java.

9723815a1f5bf08b.pngS

208a7f0d6973acf6.png.

Bạn cũng có thể xem Bộ đếm tuỳ chỉnh cho quy trình. Trong trường hợp này, bạn sẽ thấy số lượng dòng trống đã gặp phải tính đến thời điểm thực thi. Bạn có thể thêm các bộ đếm mới vào quy trình của mình để theo dõi các chỉ số dành riêng cho ứng dụng.

a2e2800e2c6893f8.png

Bạn có thể nhấp vào biểu tượng Nhật ký ở cuối bảng điều khiển để xem các thông báo lỗi cụ thể.

23c64138a1027f8.pngs

Theo mặc định, bảng điều khiển sẽ hiển thị các thông báo Nhật ký công việc để báo cáo toàn bộ trạng thái của công việc. Bạn có thể sử dụng bộ chọn Mức độ nghiêm trọng tối thiểu để lọc tiến trình công việc và thông báo trạng thái.

94ba42015fdafbe2.pngS

Khi bạn chọn một bước quy trình trong biểu đồ, chế độ xem sẽ chuyển thành nhật ký do mã của bạn tạo và mã được tạo đang chạy trong bước quy trình.

Để quay lại Nhật ký công việc, hãy bỏ chọn bước này bằng cách nhấp vào phần bên ngoài biểu đồ hoặc sử dụng nút Đóng trong bảng điều khiển bên phải.

Bạn có thể sử dụng nút Worker Nhật ký trong thẻ nhật ký để xem nhật ký trình thực thi cho các thực thể 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 tạo và Dataflow tạo mã để chạy mã đó.

Nếu bạn đang cố gắng gỡ lỗi trong quy trình, thông thường, sẽ có nhật ký bổ sung trong Nhật ký nhân viên để 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 từ tất cả worker và có thể lọc cũng như tìm kiếm được.

5a53c244f28d5478.pngS

Giao diện giám sát Dataflow chỉ hiển thị thông điệp nhật ký gần đây nhất. Bạn có thể xem tất cả nhật ký bằng cách nhấp vào đường liên kết Google CloudQuan sát ở bên phải ngăn nhật ký.

2bc704a4d6529b31.pngs

Dưới đây là bản tóm tắt về các loại nhật ký khác nhau bạn có thể xem trên trang Giám sát→Nhật ký:

  • Nhật ký job-message chứa các thông báo cấp công việc mà nhiều thành phần của Dataflow tạo ra. Ví dụ: cấu hình tự động cấp tài nguyên bổ sung, thời điểm worker khởi động hoặc tắt, tiến trình của bước công việc và lỗi công việc. Các lỗi cấp worker bắt nguồn từ sự cố mã người dùng và xuất hiện trong nhật ký worker cũng truyền đến nhật ký job-message.
  • nhật ký worker do worker Dataflow tạo. Worker thực hiện hầu hết các công việc trong quy trình (ví dụ: áp dụng ParDos vào dữ liệu). Nhật ký Worker chứa các thông báo do mã của bạn và Dataflow ghi lại.
  • nhật ký worker-startup có trong hầu hết các công việc trên Dataflow và có thể ghi lại các thông báo liên quan đến quá trình khởi động. Quá trình khởi động bao gồm việc tải các tệp jar của công việc xuống từ Cloud Storage, sau đó khởi động worker. Nếu gặp sự cố khi khởi động trình thực thi, bạn nên xem các nhật ký này.
  • nhật ký shuffler chứa thông báo của các worker hợp nhất kết quả của các hoạt động quy trình song song.
  • Nhật ký dockerkubelet chứa thông báo liên quan đến các công nghệ công khai này được sử dụng trên worker Dataflow.

Ở bước tiếp theo, chúng tôi sẽ kiểm tra xem công việc của bạn đã thành công chưa.

7. Kiểm tra xem công việc của bạn đã thành công chưa

Mở giao diện người dùng web Cloud Dataflow trong Bảng điều khiển Google Cloud Platform.

Trước tiên, bạn sẽ thấy công việc đếm số từ của mình có trạng thái Running (Đang chạy), sau đó là thành công:

4c408162416d03a2.pngS

Công việc sẽ mất khoảng 3-4 phút để chạy.

Bạn có nhớ thời điểm bạn chạy quy trình và chỉ định một bộ chứa đầu ra không? Hãy xem kết quả (vì bạn không muốn biết mỗi từ trong King Lear xuất hiện bao nhiêu lần?!). Quay lại trình duyệt Cloud Storage trong Bảng điều khiển Google Cloud Platform. Trong bộ chứa, bạn sẽ thấy các tệp đầu ra và các tệp chạy thử mà công việc của bạn đã tạo:

25a5d3d4b5d0b567.pngS

8. Tắt tài nguyên của bạn

Bạn có thể tắt các tài nguyên của mình từ 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.

2b6c3a2a92b47015.pngS

Chọn hộp đánh dấu bên cạnh nhóm mà bạn đã tạo rồi nhấp vào XOÁ để xoá vĩnh viễn nhóm và nội dung trong đó.

2f7780bdf10b69ba.png.

8051ef293a8e5cfe.png.

9. Xin chúc mừng!

Bạn đã tìm hiểu cách tạo dự án Maven bằng SDK Cloud Dataflow, chạy quy trình mẫu bằng Bảng điều khiển Google Cloud Platform, cũng như xoá bộ chứa Cloud Storage được liên kết và nội dung trong đó.

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép Creative Commons ghi nhận tác giả 3.0 chung và giấy phép Apache 2.0.