Bài viết chuyên sâu

DE - How to pipleline with Lucene index searching

DE - How to pipleline with Lucene index searching

by Admin Dathoc -
Number of replies: 0

Xin chia sẻ một số trải nghiệm thu thập và index data trong data lake thông dụng, những công việc mà trước khi bạn lấy từ đó ra để biến đổi và đưa vào datawarehouse cho đúng logic cần xử lý với thuật toán.
Điều đó có nghĩa như trong ảnh đính kèm: Tức là nó nằm trong giai đoạn Thu thập -> Stream/Pubsub-> Biến đổi lần 1 -> Lưu vào datalake
Topic không cover: Tạo datawarehouse -> visualize/áp dụng thuật toán thống kê/dự đoán -> đánh giá kết quả.
.
.
👉Một số khái niệm:
- Mục tiêu bài post: hướng thu thập từ nhiều nguồn, pubsub data luồng về một nơi gọi là datalake; kèm biến đổi (nếu có) trong quá trình thu thập và stream; và lưu và cấu trúc gì đó mà search nhanh được trong datalake
- Thu thập data: bạn hoàn toàn có thể dùng chunk data sang parquet; hoặc ingestion từ các tool khác; hoặc sql truy vấn 1 phần; hoặc stream từ các hệ thống live.
- Stream/Pubsub: đây là luồng mà bạn muốn data đi qua; có nhiều nguồn cung data; có nhiều nguồn lấy data; và kèm một số biến đổi gì đó trong quá trình stream để bạn tổ chức data theo mong muốn; để sau này khai thác nó cho dễ
- Datalake: Nơi bạn để data tạm thời; có thể là file, có thể là text, có thể là dạng block 1-5mb một; có thể là đoạn json; có thể là âm thanh; và quan trọng nhất: nó cần một cơ chế để search nhanh những thứ bạn lưu. Vậy nó cũng cần tổ chức theo thuật toán tìm kiếm tối ưu.
- Lucene index: kiểu đặt chỉ mục lồng, và chia data ra block ra nhiều shard (chỗ lưu) phân tán (xem hình); tương tự hdfs; tương tự như sadd của redis; nhằm distribute data index và distribute query
- Elk: viết tắt elasticsearch, logtash, kibana: pipeline phổ biến lưu log; tìm kiếm; và view qua charting
- Tất nhiên default bạn sẽ hiểu về docker; triển khai docker thế nào; hay là
- Tất nhiên bạn cần hiểu thêm về scripting trong ansible tools/puppet tool/chef tool; để nhân rộng các script bạn đang có trên cấu hình 1 máy sang nhiều máy khác nhau trong tích tắc thế nào.
- Một số công việc của các bạn đang làm DA không liên quan tới việc thu thập, hay stream, hay data trong lake làm gì cả thì...cũng không liên quan. Vì đơn giản DA thông thường ở tổ chức nhỏ chỉ đơn thuần query sql vào db nhỏ và view lên powerbi hay tableau. Công việc đơn giản, không liên quan topic đang nêu. Topic đang nêu vấn đề rộng hơn.
.
.
👉Dùng công cụ gì:
- Điển hình: là bạn áp dụng chọn một trong
+ Ingestion là sql query/chunk to parquet/export csv/sqoop/flume/filebeat/log/api/socket
+ qua pubsub ELK và ElasticSearch/Redis/Nfs Csv/Parquet/Hdfs/Spark/Scylla/Couchbase nơi chứa datalake
+ qua pubsub Kafka + SparkStream và ElasticSearch/Redis/Nfs Csv/Parquet/Hdfs/Spark/Scylla/Couchbase nơi chứa datalake
+ qua pubsub Nifi/Airflow/Heron và ElasticSearch/Redis/Nfs Csv/Parquet/Hdfs/Spark/Scylla/Couchbase nơi chứa datalake
+ kết hợp api nhận diện khuôn mặt để chỉ lấy data mặt, hoặc data trên ảnh gì đó bạn cần. Gợi ý: dùng sẵn facenetapi; hoặc dùng yolov5 tự build đối tượng mình cần, rồi dùng python flask để build api
+ kết hợp api từ ngữ nlp: có tập từ ngữ nào đó khi data có tập từ ngữ đó là bạn lấy. Gợi ý dùng sẵn vnnlpcore; vn.tik
.
.
👉Tốc độ tính toán và scale:
- Nếu bạn dùng các khái niệm trên thì bạn hoàn toàn có thể đa luồng hay nâng cấp/giảm cấp một hay nhiều máy ...scale theo chiều dọc
- Cũng như việc tăng độ dầy của block lưu data, hay shard lưu data để dễ distributed query; hoặc distributed stream/pubsub thì bạn deal với bài toán: có cả triệu nơi cung cấp thông tin cho bạn; hoặc triệu nơi muốn lấy thông tin từ bạn; áp dụng thuật toán X cho bên này; áp dụng visualize Y cho bên kia... tức là scale theo chiều ngang
- Và tất nhiên nếu bạn chuẩn bị đủ các điều kiện máy móc: đủ ram, đủ cpu; băng thông 20gb... thì data đi qua nó lên TB là chuyện đương nhiên.
- Bản chất bạn đang build một hub về kho dữ liệu to đủ lớn cho nhiều ngành công nghiệp; xong chưa tinh tuyển data; hoặc chưa lọc biến đổi data phù hợp cho bài toán phù hợp.
.
.
👉Một số xử lý điển hình mình đã trải qua:
1. Multithread 300 virtual chrome để crawl data dữ liệu latlong hay địa chỉ của bất cứ nơi đâu.
Cách quy hoạch và crawl latlong data, địa chỉ từ bản đồ số free
.
.
2. Mapreduce data trên Spark phân cụm thoo đúng loại sau stream; rồi lưu xuống parquet
Xem guide:
.
.
3. Pubsub với multithread java, tốc độ 100k thread data chuyển từ điểm A sang điểm B trong 19 giây.
.
.
4. Lưu truyền trạng thái CPU, RAM, SDD mỗi máy tính qua ELK để cảnh báo tài nguyên:
Xem clip này tại phút này:
.
.
5. Nhân rộng nhanh cấu hình đang có: dùng ansible tạo nhanh môi trường sang các máy khác
Xem clip này tại phút này: https://youtu.be/lG9HWYQfIkU...
.
.
6. NLP với rasa và ontology
.
.
7. Scripting gán nhãn ảnh với yolov5:
.
.
Vậy với bạn bạn trải nghiệm thu thập, stream/pubsub data sang datalake thế nào, share thêm nhé! Thanks!
------------------------
Kiến thức cơ bản, sách, demos về DA, DE: dathoc.net/skill
Các fans chờ chút, team đang tạo thêm các khoá học bổ sung cho các nghề DA, DE!