12/08/2018, 14:08

Xử lý bigdata bằng dịch vụ EMR của AWS part 1

Đối với 1 hệ thống chạy dịch vụ người dùng lớn và yêu cầu sự giám sát từ phía người dùng thì việc xử lý dữ liệu lớn đến hàng chục triệu bản ghi là điều không dễ dàng. Bởi lẽ để xử lý lượng dữ liệu lớn như vậy nếu theo cách thông thường thì respond time thường sẽ rất lớn, đôi khi còn vượt quá ...

Screen Shot 2016-11-01 at 8.40.54 AM.png

Đối với 1 hệ thống chạy dịch vụ người dùng lớn và yêu cầu sự giám sát từ phía người dùng thì việc xử lý dữ liệu lớn đến hàng chục triệu bản ghi là điều không dễ dàng. Bởi lẽ để xử lý lượng dữ liệu lớn như vậy nếu theo cách thông thường thì respond time thường sẽ rất lớn, đôi khi còn vượt quá giới hạn thời gian kết nối (như của egnix) làm cho trình duyệt hiểu lầm là mất kết nối đến server và dữ liệu không trả được tới trình duyệt => khách hàng không dùng được dịch vụ => chất lượng dịch vụ đi xuống. Điều này quả thực rất tồi tệ nhưng bất cứ hệ thống lớn nào đều sẽ phải gặp phải.

Và các nhà cung cấp dịch vụ AWS đã rất "thấu hiểu" những nhu cầu cấp thiết này và đã cho nhiều ra dịch vụ để đáp ứng , ví như dịch vụ RedShift (các bạn có thể tham khảo RedShift ở bài viết này: https://viblo.asia/HjkaruBloom/posts/E7bGoxYKv5e2)

  • Ưu điểm là các trường được sort và lưu theo cột nên việc đọc dữ liệu rất nhanh
  • Nhược điểm:
    • đó là chỉ có thể đánh index 1 lần lúc tạo bảng, nếu thêm dữ liệu hay đánh index thêm trường thì ta cần phải oánh index lại bảng từ đầu)
    • Và aws hiện có ít lựa chọn (con rẻ nhất là 1 core thì tầm 0.34/h còn con ngon hơn thì thường 8 core giá tầm 6/h) nói chung là đắt

=> Có 1 giải pháp khác mà AWS cung cấp đó là sử dụng dịch vụ EMR. Nôm na đây là giải pháp sử dụng các tool xử lý bigdata(hadoop, yarn, hive, pig, spark ...) cài trên các con EC2 với mức phí như các con EC khác và cộng thêm phí sử dụng dịch vụ (tổng cộng thêm tầm 10 - 20%), giá cả bạn có thể xem ở đây.

Nói chung là dùng EMR sẽ rẻ hơn và đạt hiệu quả khá tốt với nhu cầu sử dụng đồng thời khả năng tùy chỉnh "kích cỡ" hệ thống rất đơn giản (theo như quảng cáo của AWS là giúp bạn tiết kiệm 50-80% chi phí trong việc sử dụng các con instance https://aws.amazon.com/emr/).

OK, nói lan ma lan minh nên mình sẽ vào vấn đề chính luôn đó là ví dụ về xử lý big data mà ở đây là log hệ thống

Bài toán minh đưa ra cần pahir xử lý ở đây đó là minh có 1 bảng log lưu ở dang json có 15 triệu record với dung lượng ~ 12Gb, và mình cần lọc thông tin theo nhiều trường dữ liệu, hiện tại chạy thử trên con cùi bắp nhất redshipt thì respondtime đang là ~ 34s. Và mình sẽ xử lý đống này với Emr

Trước hết để sử dụng EMR, bạn cần có tài khoản aws và đăng nhập vào hệ thống, sau đó bạn vào đường link sau để tạo các máy dùng dịch vụ EMR(giống như tạo máy ảo để chạy app vậy)

Screen Shot 2016-10-28 at 4.24.00 PM.png

Ở đây AWS sẽ hiện ra 1 list danh sách các cluster (nếu bạn đã tạo), các cluster chính là 1 hệ thống bao gồm nhiều máy EC2 phục vụ việc xử lý dữ liệu của bạn.

Để tạo 1 cụm các máy xử lý bạn click vào nút Create cluster có màu xanh trên ảnh.

1 bảng mới sẽ xuất hiện

Screen Shot 2016-10-28 at 4.33.28 PM.png

có khá nhiều thông số ở phần cài đặt nhanh này, ok đừng lo lắng, chúng ta sẽ đi từng phần 1

đầu tiên là:

General Configuration - Cấu Hình chung

  • Cluster name: tên cụm máy sẽ hiện lên danh sách ở bước trước, bạn đặt như nào cho dễ nhớ là đc
  • Log: tích vào là bạn chọn đường dẫn lưu log lên trên s3, nếu ko thì log sẽ đc lưu trên máy instance và sẽ mất sạch sành sanh nếu bạn hay 1 dịch vụ nào đó tắt máy.
  • Launch mode: vì mình đang tạo sample nên sẽ chọn cluster, nếu bạn pro và muốn cài thêm các chương trình khác chạy kèm trên máy thì bạn có thể chọn Step execution sau đó ... làm tiếp theo hướng dẫn             </div>
            
            <div class=
0