Hướng dẫn lab 5 | Môn lưu trữ và xử lý dữ liệu lớn
Các bạn học môn lưu trữ và xử lý dữ liệu lớn của thầy Đào Thành Chung sẽ phải làm 5 bài lab, trong bài viết này mình sẽ hướng dẫn mọi người chạy bài lab số 5 (lab về Spark Streaming), xem yêu cầu của bài lab TẠI ĐÂY.
Chú ý:
- Trong hướng dẫn của thầy, có một số hướng dẫn đã quá cũ và không thể chạy được nếu bạn làm theo y nguyên trong hướng dẫn của thầy. Mình đã sửa lại 2 project trong lab cho phù hợp, các bạn chỉ cần clone về và làm theo hướng dẫn của mình dưới đây.
- Project của thầy và project mình sửa lại đều chạy với Spark Single node, nên nếu bạn cài với cụm Multi node thì hãy sửa đổi các địa chỉ hostname từ localhost thành địa chỉ máy master, chỗ nào cần sửa mình đã lưu ý bôi đậm, các bạn chú để sửa lại cho đúng.
Bài 1: Socket Stream
Clone toàn bộ project sau về máy để chuẩn bị chạy nha: https://github.com/demanejar/socket-stream.
Trong project có 2 file chính, một là file SocketStream.scala
:
object SocketStream { def main(args : Array[String]){ val conf = new SparkConf().setAppName("Socket-Stream") val ssc = new StreamingContext(conf, Seconds(1)) val lines = ssc.socketTextStream("localhost", 7777) val errorLines = lines.filter(_.contains("error")) errorLines.print() ssc.start() ssc.awaitTermination() } }
- Để có thể submit job này với spark-submit thì bạn phải build chúng thành một file
.jar
, với scala thì chúng ta sẽ sử dụngsbt
- Nếu máy bạn chưa có
sbt
có thể tham khảo cách cài đặt tại đây: https://www.scala-sbt.org/download.html
- Lưu ý: nếu bạn chạy cụm Spark nhiều máy, thì hãy đổi địa chỉ hostname từ localhost thành địa chỉ máy master nha
Khởi động Spark và kiểm tra địa chỉ của master thông qua cổng 8080 (spark://PC0628:7077
):
Build project vừa rồi thành file .jar
với câu lệnh:
sbt clean package
Chạy spark-submit với file jar vừa bulid được:
spark-submit --master spark://PC0628:7077 --class SocketStream target/scala-2.11/socket-stream_2.11-0.0.1.jar
- Tham số
master
là địa chỉ của master mà bạn vừa lấy ở bên trên
- Tham số
class
là đường dẫn tới hàm main của project
Mở một terminal khác lên và chạy lệnh sau để bắt đầu gửi text qua cổng 7777:
nc -l 7777
Kết quả in ra màn hình và sẽ vụt qua rất nhanh:
Bài 2: Log Analyzer
Clone toàn bộ project về máy để chuẩn bị chạy nha: https://github.com/demanejar/logs-analyzer.
Mình sẽ đi qua giải thích từng file để mọi người hiểu hơn về project, đầu tiên là file đầu vào log.txt
, file này chứa 1546 dòng log, các log đều có cấu trúc giống nhau, công việc của project này chính là nhận đầu vào từ file log này và đưa ra các phân tích, thống kê về trên tập log này.
File stream.sh
là một file shell script với nhiệm vụ là đọc dữ liệu từ file log.txt
và đẩy chúng qua cổng 9999.
File build.sbt
thì giống với project trước, file này để khai báo các thư viện, phụ thuộc để có thể build project thành một file .jar
Cuối cùng là project của chúng ta viết bằng scala
với 2 file ApacheAccessLog.scala
và LogAnalyzerStreaming.scala
. File LogAnalyzerStreaming.scala
sẽ lắng nghe ở cổng 9999, lấy dữ liệu và tiến hành tổng hợp, phân tích chúng.
- Lưu ý: nếu bạn chạy cụm Spark nhiều máy, thì hãy đổi địa chỉ hostname trong file LogAnalyzerStreaming.scala từ localhost thành địa chỉ máy master nha
Khởi động Spark và kiểm tra địa chỉ của master thông qua cổng 8080 (spark://PC0628:7077
):
Build project vừa rồi thành file .jar
với câu lệnh dưới đây, lần đầu build có thể các bạn sẽ phải đợi khá lâu vì nó phải tải xuống các thư viện, trong các lần build sau sẽ nhanh hơn:
sbt clean package
Chạy spark-submit với file jar vừa bulid được:
spark-submit --master spark://PC0628:7077 --class LogAnalyzerStreaming target/scala-2.12/log-analyzer_2.12-0.0.1.jar
- Tham số
master
là địa chỉ của master mà bạn vừa lấy ở bên trên
- Tham số
class
là đường dẫn tới hàm main của project
Trong bài viết trước, chúng ta đã gửi dữ liệu thông qua socket bằng tay, trong bài này vẫn là socket tuy nhiên chúng ta sẽ viết một chương trình để chúng tự động gửi dữ liệu và chúng ta chỉ việc ngồi chờ kết quả thôi.
Như mình giải thích ở ban đầu, file stream.sh
là một file shell script với nhiệm vụ là đọc dữ liệu từ file log.txt
và đẩy chúng qua cổng 9999. Sử dụng câu lệnh sau để bắt đầu chạy:
./stream.sh log.txt
- Với
log.txt
viết ở phía sau thể hiệnlog.txt
là một tham số đầu vào của chương trình viết trong file.stream.sh
- Lưu ý: nếu bạn chạy cụm Spark nhiêu máy thì file này phải được chạy trên máy master
Kết quả in ra màn hình cũng sẽ vụt qua rất nhanh, các bạn có thể kéo terminal lên để nhìn
Mở cổng 4040 để xem lại chi tiết các job vừa thực hiện (localhost:4040
):
Tham khảo: https://demanejar.github.io/
cảm ơn anh vì bv ạ
ReplyDelete