Đợt này mình nhận khá nhiều project liên quan tới dev, mặc dù mình không phải dân dev chuyên nhưng mình thích thử thách, do vậy mình cứ làm thôi. Vì không phải dân chuyên nên code khá ngu, hy vọng post lên đây sẽ có những cao nhân giúp mình tiến bộ hơn. Như tiêu đề mình đề cập, thì trong Openstack có một project đảm nhiệm việc tạo, và quản lý các cluster Hadoop/Spark/… đó chỉnh là Project Sahara. Nhiệm vụ chính của sahara
- Tạo/Xóa cluster
- Scale Cluster
- Excute Job trên Cluster
Ban đầu mình không muốn chọc vào code thằng này lắm, vì sợ không làm được (Nhìn đống source codegithub của nó cũng hiểu), một phần mình chưa vào giờ modify một project nào trong Openstack cả.
Do vậy mình code theo hướng
- Dựng bộ monitor các máy ảo
- Viết tool check những instance nào đang vượt quá threshold
- Kiểm tra instance đó thuộc cluster nào
- Kiểm tra instance đó thuộc node group đang chạy process nào
- Nếu có process đang chạy là datanode và không chạy đồng thời namenode thì scale, ngược lại không scale
Code này đã chạy và mình định không thay đổi gì. Nhưng sau khi xem xét thì bên kia họ lại yêu cầu hiển thị lên Horizon, và có thể set threshold theo từng cluster khác nhau. Khó nhằn rồi đây, nhưng khó cũng phải thử vậy.
Vậy là đâm đầu đi vào đọc code thằng sahara, bản thân nó có 3 mã nguồn nhỏ là:
Vậy bắt đầu đọc từ đâu, câu hỏi thật mông lung. Nhưng mình đi theo yêu cầu của người ta trước, đó là hiển thị lên dashboard.
Đọc code và make it run trong hơn 1 ngày
Bắt đầu lần mò vào dashboard thấy các tab của sahara hiển thị đều chia thành các folder khác nhau
Hay rồi, khả năng cao sẽ mò được code trong này, tiếp tục tìm trong file clusters/workflow/create.py
File này sẽ thực hiện implement chức năng Launch Cluster
Bắt đầu sửa thêm các fields cần thiết
Hàm này sau khi lấy thông tin nó sẽ call tới function cluster_create
trong module api/sahara
Do vậy ta cũng sẽ sửa luôn function api/sahara/cluster_create
Sửa phần hiển thị details của cluster trong data_processing/clusters/templates/clusters/_details.html
Ok, vậy là ta có thể tạo cluster từ dashboard, với các tham số truyền vào như sau
Và có thể hiển thị chi tiết trong General Info
Nhưng khoan, chưa tạo cluster đâu nhé, cần sửa tiếp mã nguồn của sahara
và python-saharaclient
mình sẽ viết ở phần sau.
Cuối cùng mình nhận thấy việc sửa code của openstack cũng không phải khó, cũng không hẳn là dễ, nhưng nếu chịu khó thì vẫn làm được.
Phần 2: https://sapham.net/tan-man-develop-auto-scale-big-data-cluster-tren-openstack-phan-2/