Xây dựng một Realtime Dashboard sử dụng Spark Streaming, Kafka, Nodejs và MongoDB

Hello! Sau mấy ngày cuối tuần vật vả với coding, không đi đâu cả (lý do là có bão thoai!) thì tui cũng đã thử nghiệm xong với cái việc đã đề ra ở bài trước đó là dùng Spark Streaming để lấy dữ liệu từ Kafka. Không chỉ dừng lại ở đó, tui cũng đã làm luôn cái Real-time Dashboard để hiển thị cái dữ liệu mà Spark đã lấy về và xử lý.

Kịch bản của tui cho bài tutorial này là như sau:

Giả sử tui có một website bán xe đạp vô cùng lớn đi ha (ví dụ là http://xedapnhat.vn Happy-Grin ), bán các nhãn hiệu xe đạp bao gồm: Trek, Giant, Jett, Cannondale, Surly. Do bán số lượng lớn mà, cho nên tui muốn xem coi là cứ 30s thì có bao nhiêu chiếc xe của từng nhãn hiệu này được bán và nó sẽ hiển thị thông tin đã được xử lý lên cái Dashboard. (more…)

Read More

Tạo một Kafka Producer để giả lập nguồn dữ liệu đầu vào bằng ngôn ngữ Scala

Hi all, như đã nói trong phần cuối của bài cài đặt Kafka, hôm nay tui sẽ thử viết một cái custom Producer để tạo nguồn dữ liệu đầu vào cho Kafka Single Node. Trong bài trước, tui đã thử chạy cái producer mặc định của Kafka đó là mỗi lần nhập một đoạn text từ bàn phím thì bên Consumer sẽ nhận được cái đoạn text đó ngay tức thì. Vậy, cái event xảy ra đó là nhập liệu từ bàn phím và data phát sinh ra từ cái event này chính là nội dung text mà tui đã nhập. Do đó, tạo một custom Producer chẳng qua là mình sẽ làm cái việc là cho cái custom Producer này collect dữ liệu từ các event khác nhau rồi xào nấu gì đó với cái data này sau đó send nó đi.

Do tui vẫn muốn sử dụng lại cái chương trình WordCount lúc trước khi tìm hiểu Spark, thay vì WordCount nó sẽ đọc text từ file rồi thống kê từ thì bây giờ tui muốn là chương trình WordCount nó sẽ hứng dữ liệu từ Kafka Streaming, có nghĩa là chương trình WordCount của Spark sẽ làm Consumer. Vậy nên, cái custom Producer này nó sẽ đọc data Words ở đâu đó, cụ thể là từ một file chứa 500 từ, mỗi lần nó chỉ lấy ramdom 10 từ, sau đó send 10 từ này đi, WordCount sẽ hứng lấy 10 từ này và thông kê. Trong phạm vi bài hôm nay, tui sẽ tạo cái Producer này, bài kế tiếp tui sẽ chỉnh sửa cái chương trình WordCount lại thành Consumer của Kafka. Các bạn xem workflow như sau:

Tuy là làm demo thì 3 cái block này nằm trên một máy localhost, nhưng trên thực tế nếu có điều kiện thì 3 block này có thể nằm trên 3 hệ thống khác nhau. (more…)

Read More

Tìm hiểu và cài đặt Apache Kafka Single Node/Single Broker trên Windows 10

Chào các bạn! Khi tìm hiểu về các công cụ để làm việc với Big Data, tui thấy càng tìm hiểu, càng thú vị các bạn ạ. Đáng lẽ bài tiếp theo này phải là Spark Streaming, nhưng khi tìm hiểu Spark Streaming, tui được dẫn tới cái anh Apache Kafka này và tui thấy cái này cũng cần thiết để làm một system hoàn chỉnh cho nên tui sẽ làm bài tutorial về cái này luôn để sau này chuyển qua Spark Streaming nó sẽ có hệ thống hơn.

Nếu muốn sử dụng Spark Streaming để xử lý data real-time, chúng ta cần có một cái nguồn data Streaming để tạo data liên tục thì mới thấy được cái hay của Spark Streaming. (more…)

Read More

Cài đặt Apache Spark cluster trên hệ điều hành Linux/Ubuntu

Chào các bạn, qua các bài tutorial trước, tui đã cài đặt Apache Spark lên HĐH Windows 10, sau đó viết thử một vài cái ứng dụng rồi submit lên Spark để chạy thử nhưng chỉ là chạy trên 1 máy thôi, còn gọi là Standalone Local mode. Theo tài liệu của Spark thì ngoài cách chạy trên một máy, Spark còn hổ trợ chạy trên nhiều máy thông qua cơ chế Cluster Manager.

Spark có 3 dạng Cluster Manager:

  • Standalone (có sẵn của Spark luôn)
  • Apache Mesos.
  • Hadoop YARN.

Đối với người mới tìm hiểu như tui thì tui sẽ chọn cái Standalone Cluster cho dễ hiểu, hai cái còn lại thì khi nào hiểu rõ hơn về Spark rồi thì tính sau. (more…)

Read More

Truy vấn dữ liệu từ MongoDB với Apache Spark

Chào các bạn. Đã nói là dân lập trình, viết chương trình thì dù là Application độc lập hay là Web thì điều đầu tiên là phải nghĩ ngay đến cái framework hay cái platform mình sử dụng nó có làm việc được với các hệ Database hay không bao gồm cả có quan hệ hay không có quan hệ. Đây cũng chính là câu hỏi tui tự đặt ra khi tìm hiểu Apache Spark.

Như trong bài đầu tiên tui có nói là đối với Big Data thì tui chọn 2 cái Database đó là MongoDB và Elasticsearch vậy nên trong bài hôm nay, tui sẽ thử dùng Apache Spark để kết nối và truy vấn data từ MongoDB (còn Elasticsearch thì sẽ viết một bài riêng sau). May mắn thay, MongoDB có tạo một thư viện để cho Spark nó “nói chuyện” được với MongoDB tên là MongoDB Spark Connector. Kịch bản của hôm nay cũng đơn giản thôi: đó là save một mớ document từ file json vào MongoDB, sau đó dùng câu SQL để lấy dữ liệu lên lại, sau đó hiển thị các record ra. (more…)

Read More

Viết ứng dụng Word Count trên Spark bằng Scala, sử dụng Intellij IDEA Community

Ở bài mở đầu, tui đã hướng dẫn cài đặt Spark 1.6.3 trên Windows 10 rồi. Trong bài này, tui thử viết một ứng dụng chạy trong môi trường Spark bằng ngôn ngữ Scala với IDE Intellij IDEA phiên bản Community.

Đối với Spark, các bạn có thể viết ứng dụng bằng 4 ngôn ngữ: Scala, Java, Python, R. Nhưng tui lại thích chọn Scala bởi vì:

  • Spark được build bằng Scala
  • Đã từng làm qua Java, C#, nhưng lại thích kiểu lập trình không cần khai báo datatype như PHP mà Spark không hổ trợ PHP cho nên quyết định dùng Scala bởi Scala có cú pháp gần giống Java mà lại không cần khai báo datatype giống PHP

Đó là ý kiến cá nhân của tui thôi, còn các bạn thích ngôn ngữ nào trong 3 cái còn lại thì cứ dùng nó, chả ảnh hưởng ai cả đâu.

(more…)

Read More

Cài đặt Apache Spark 1.6.3 trên Windows 10

Chào các bạn. Hôm nay, tui mở thêm một chủ đề mới về Big Data. Về khái niệm Big Data, tui cũng đã nghe nói nhiều từ hơn một vài năm trước lận nhưng gần đây mới có thời gian research. Đại khái là theo sự hiểu biết của tui là nếu bạn có trong tay một tập dữ liệu cực kỳ lớn gần cả triệu record, mỗi record có khoản vài chục column và mỗi ngày nó lại tăng thêm. Bạn có nhu cầu là cần thao tác nhanh trên tập dữ liệu này để lấy ra một tập dữ liệu cần thiết để phân tích, đưa ra số liệu cụ thể cho một công việc nào đó thì đấy là Big Data. Vậy vấn đề được đặt ra là:

  1. Làm sao để lưu trữ cái đống dữ liệu to lớn đó sao cho dễ quản lý và sử dụng, truy vấn nhanh?
  2. Làm sao để phân tích nhanh nhất có thể đối với dữ liệu cực lớn này?

(more…)

Read More