Apache Flume - Truyền dữ liệu trong Hadoop
Big Data,như chúng ta biết, là một tập hợp các bộ dữ liệu lớn không thể được xử lý bằng các kỹ thuật tính toán truyền thống. Dữ liệu lớn (Big Data) khi được phân tích sẽ cho kết quả có giá trị.Hadoop là một khung công tác mã nguồn mở cho phép lưu trữ và xử lý Dữ liệu lớn trong môi trường phân tán trên các cụm máy tính sử dụng các mô hình lập trình đơn giản.
Truyền / Ghi dữ liệu
Nói chung, hầu hết dữ liệu sẽ được phân tích sẽ được tạo ra bởi nhiều nguồn dữ liệu khác nhau như máy chủ ứng dụng, trang mạng xã hội, máy chủ đám mây và máy chủ doanh nghiệp. Dữ liệu này sẽ ở dạnglog files và events.
Log file - Nói chung, tệp nhật ký là một fileliệt kê các sự kiện / hành động xảy ra trong hệ điều hành. Ví dụ: máy chủ web liệt kê mọi yêu cầu được thực hiện đối với máy chủ trong tệp nhật ký.
Khi thu thập dữ liệu nhật ký như vậy, chúng tôi có thể nhận được thông tin về -
- hiệu suất ứng dụng và xác định các lỗi phần mềm và phần cứng khác nhau.
- hành vi của người dùng và có được thông tin chi tiết tốt hơn về doanh nghiệp.
Phương pháp truyền thống để truyền dữ liệu vào hệ thống HDFS là sử dụng putchỉ huy. Hãy để chúng tôi xem cách sử dụngput chỉ huy.
HDFS đặt lệnh
Thách thức chính trong việc xử lý dữ liệu nhật ký là di chuyển các nhật ký này được tạo bởi nhiều máy chủ sang môi trường Hadoop.
Hadoop File System Shellcung cấp các lệnh để chèn dữ liệu vào Hadoop và đọc từ nó. Bạn có thể chèn dữ liệu vào Hadoop bằng cách sử dụngput lệnh như hình dưới đây.
$ Hadoop fs –put /path of the required file /path in HDFS where to save the file
Sự cố với lệnh put
Chúng ta có thể sử dụng putlệnh của Hadoop để chuyển dữ liệu từ các nguồn này sang HDFS. Tuy nhiên, nó có những nhược điểm sau:
Sử dụng put lệnh, chúng ta có thể chuyển only one file at a timetrong khi bộ tạo dữ liệu tạo ra dữ liệu với tốc độ cao hơn nhiều. Do các phân tích được thực hiện trên dữ liệu cũ kém chính xác hơn nên chúng ta cần có giải pháp truyền dữ liệu theo thời gian thực.
Nếu chúng ta sử dụng put, dữ liệu cần được đóng gói và sẵn sàng để tải lên. Vì các máy chủ web tạo ra dữ liệu liên tục nên đây là một nhiệm vụ rất khó khăn.
Cái chúng ta cần ở đây là một giải pháp có thể khắc phục được những nhược điểm của put ra lệnh và chuyển "dữ liệu trực tuyến" từ bộ tạo dữ liệu đến các cửa hàng tập trung (đặc biệt là HDFS) với độ trễ ít hơn.
Sự cố với HDFS
Trong HDFS, tệp tồn tại dưới dạng một mục nhập thư mục và độ dài của tệp sẽ được coi là 0 cho đến khi nó bị đóng. Ví dụ, nếu một nguồn đang ghi dữ liệu vào HDFS và mạng bị gián đoạn giữa chừng (mà không đóng tệp), thì dữ liệu được ghi trong tệp sẽ bị mất.
Do đó, chúng tôi cần một hệ thống đáng tin cậy, có thể cấu hình và bảo trì để chuyển dữ liệu nhật ký sang HDFS.
Note- Trong hệ thống tệp POSIX, bất cứ khi nào chúng ta đang truy cập một tệp (giả sử thực hiện thao tác ghi), các chương trình khác vẫn có thể đọc tệp này (ít nhất là phần đã lưu của tệp). Điều này là do tệp tồn tại trên đĩa trước khi nó bị đóng.
Các giải pháp có sẵn
Để gửi dữ liệu phát trực tuyến (tệp nhật ký, sự kiện, v.v.,) từ nhiều nguồn khác nhau tới HDFS, chúng tôi có sẵn các công cụ sau:
Người ghi chép của Facebook
Scribe là một công cụ vô cùng phổ biến được sử dụng để tổng hợp và truyền trực tuyến dữ liệu nhật ký. Nó được thiết kế để mở rộng quy mô đến một số lượng rất lớn các nút và mạnh mẽ đối với các lỗi mạng và nút.
Apache Kafka
Kafka đã được phát triển bởi Apache Software Foundation. Nó là một nhà môi giới tin nhắn mã nguồn mở. Sử dụng Kafka, chúng tôi có thể xử lý các nguồn cấp dữ liệu với thông lượng cao và độ trễ thấp.
Apache Flume
Apache Flume là một công cụ / dịch vụ / cơ chế nhập dữ liệu để thu thập tổng hợp và vận chuyển một lượng lớn dữ liệu truyền trực tuyến như dữ liệu nhật ký, sự kiện (v.v.) từ các trang web khác nhau đến một kho dữ liệu tập trung.
Đây là một công cụ có độ tin cậy cao, phân tán và có thể cấu hình được thiết kế chủ yếu để truyền dữ liệu trực tuyến từ nhiều nguồn khác nhau sang HDFS.
Trong hướng dẫn này, chúng ta sẽ thảo luận chi tiết về cách sử dụng Flume với một số ví dụ.