Sử dụng Cloudera Data Science Workbench với Apache NiFi


Phan Duy Khang
10 tháng trước
Hữu ích 10 Chia sẻ Viết bình luận 0
Đã xem 3263

Sử dụng các mô hình đã triển khai như một chức năng như một dịch vụ

Sử dụng Cloudera Data Science Workbench với Apache NiFi, chúng ta có thể dễ dàng gọi các hàm trong các mô hình được triển khai của mình từ Apache NiFi như một phần của dòng chảy. Tôi đang làm việc với CDSW trên HDP , nhưng nó sẽ hoạt động cho tất cả CDSW bất kể loại cài đặt.

Trong ví dụ đơn giản của tôi, tôi đã xây dựng một mô hình Python sử dụng TextBlob để chạy tình cảm đối với một câu đã qua. Nó trả về Tình cảm và tính chủ quan, mà chúng ta có thể ngay lập tức hành động theo dòng chảy của mình.

CDSW cực kỳ dễ làm việc, và tôi đã khởi động và chạy trong vài phút. Đối với mô hình của tôi, tôi đã tạo tập lệnh Python 3 và tập lệnh shell để cài đặt chi tiết. Cả hai hiện vật này đều có sẵn ở đây

Luồng Apache NiFi 1.8 của tôi có trên GitHub (Tôi không sử dụng bộ xử lý tùy chỉnh).

Triển khai mô hình học máy như một dịch vụ REST

Khi bạn đăng nhập vào CDSW , hãy tạo một dự án hoặc chọn một dự án hiện có. Từ dự án của bạn, mở bàn làm việc và bạn cài đặt một số thư viện và kiểm tra một số Python. Tôi đang sử dụng phiên Python 3 để tải xuống TextBlob / NLTK Corpora cho NLP.

Hãy để Pip cài đặt một số thư viện để thử nghiệm


Hãy tạo một mô hình mới

Chọn tệp của bạn (của tôi là sentiment.py xem GitHub). Tên chức năng thực sự là  tình cảm.  Chú ý một lỗi đánh máy; Tôi đã phải xây dựng lại điều này và triển khai. Thiết lập một đầu vào ví dụ (câu là tên tham số đầu vào) và đầu ra ví dụ. Đầu vào và đầu ra sẽ là JSON vì đây là API REST.

Hãy triển khai nó (Python 3)

Chúng ta có thể thấy đầu ra tiêu chuẩn, lỗi tiêu chuẩn, trạng thái, số cuộc gọi REST nhận được và thành công.

Sau khi được triển khai, nó đã sẵn sàng để thử nghiệm và sử dụng từ Apache NiFi

Chỉ cần nhấp vào kiểm tra và xem kết quả JSON. Bây giờ chúng ta có thể gọi nó từ một luồng NiFi của Apache.

Sau khi triển khai, chúng tôi có thể giám sát mô hình

Khi một Mô hình được triển khai, chúng ta có thể kiểm soát nó

Chúng tôi có thể dừng nó, xây dựng lại hoặc thay thế các tập tin nếu cần. Tôi đã phải cập nhật mọi thứ một vài lần. Số lượng tài nguyên được sử dụng cho mô hình lưu trữ phần còn lại nếu lựa chọn của bạn từ một thả xuống. Vì tôi đang làm một cái gì đó nhỏ, tôi đã chọn mô hình nhỏ nhất chỉ với 1 CPU ảo và 2 GB RAM. Tất cả điều này đang chạy trong Docker trên Kubernetes.

Hãy chạy thử

Xem trạng thái và phản hồi!

Dòng chảy ví dụ Apache NiFi

Bước 1: Gọi Twitter

Bước 2: Trích xuất các thuộc tính xã hội quan tâm

Bước 3: Xây dựng cuộc gọi web của chúng tôi với khóa truy cập và tham số chức năng

Bước 4: Trích xuất chuỗi của chúng tôi dưới dạng tệp luồng để gửi đến Bài đăng HTTP

Bước 5: Gọi API REST của Cloudera Data Science Workbench (xem người kiểm tra).

Bước 6: Trích xuất hai giá trị kết quả.

Bước 7: Hãy định tuyến tình cảm

Chúng ta có thể có cực âm (<0), trung tính (0), dương (> 0) và cực dương (1) của tình cảm. Xem TextBlob để biết thêm thông tin về cách thức hoạt động của nó.

Bước 8: Gửi tình cảm xấu đến một kênh chùng để phân tích con người.

Chúng tôi gửi tất cả các thông tin liên quan đến một kênh chùng bao gồm cả thông báo dưới đây.

Tin nhắn mẫu gửi đến Slack

Bước 9: Lưu trữ tất cả các kết quả (hoặc một số) trong Phoenix / HBase, Hive LLAP, Impala, Kudu hoặc HDFS.

Kết quả là các thuộc tính

Cuộc gọi tin nhắn chùng 

${msg:append(" User:"):append(${user_name}):append(${handle}):append(" Geo:"):append(${coordinates}):append(${geo}):append(${location}):append(${place}):append(" Hashtags:"):append(${hashtags}):append(" Polarity:"):append(${polarity}):append(" Subjectivity:"):append(${subjectivity}):append(" Friends Count:"):append(${friends_count}):append(" Followers Count:"):append(${followers_count}):append(" Retweet Count:"):append(${retweet_count}):append(" Source:"):append(${source}):append(" Time:"):append(${time}):append(" Tweet ID:"):append(${tweet_id})}

REST GỌI để mô hình 
 {"accessKey":"from your workbench","request":{"sentence":"${msg:replaceAll('\"', ''):replaceAll('\n','')}"}}

Hữu ích 10 Chia sẻ Viết bình luận 0
Đã xem 3263