Hướng dẫn về Apache Flume: Là gì, Archikiến trúc & Ví dụ về Hadoop

Apache Flume trong Hadoop là gì?

Ống khói Apache là một hệ thống phân tán và đáng tin cậy để thu thập, tổng hợp và di chuyển khối lượng lớn dữ liệu nhật ký. Nó có kiến ​​trúc đơn giản nhưng linh hoạt dựa trên luồng dữ liệu phát trực tuyến. Apache Flume được sử dụng để thu thập dữ liệu nhật ký có trong tệp nhật ký từ máy chủ web và tổng hợp vào HDFS để phân tích.

Flume trong Hadoop hỗ trợ nhiều nguồn như –

  • 'tail' (dẫn dữ liệu từ một tệp cục bộ và ghi vào HDFS thông qua Flume, tương tự như lệnh 'tail' của Unix)
  • Nhật ký hệ thống
  • Apache log4j (cho phép Java ứng dụng ghi sự kiện vào tệp trong HDFS thông qua Flume).

Dòng chảy Archikiến trúc

A đại lý máng là một JVM quá trình có 3 thành phần -nguồn máng, Kênh Flumebồn rửa– thông qua đó các sự kiện được lan truyền sau khi được bắt đầu từ một nguồn bên ngoài.

Dòng chảy Archikiến trúc
Dòng chảy Archikiến trúc
  1. Trong sơ đồ trên, các sự kiện được tạo bởi nguồn bên ngoài (WebServer) sẽ được Nguồn dữ liệu Flume sử dụng. Nguồn bên ngoài gửi các sự kiện đến nguồn Flume ở định dạng được nguồn đích nhận ra.
  2. Nguồn Flume nhận một sự kiện và lưu trữ nó vào một hoặc nhiều kênh. Kênh hoạt động như một cửa hàng lưu giữ sự kiện cho đến khi nó được bồn rửa máng tiêu thụ. Kênh này có thể sử dụng hệ thống tệp cục bộ để lưu trữ các sự kiện này.
  3. Flume sink xóa sự kiện khỏi một kênh và lưu trữ nó vào kho lưu trữ bên ngoài, chẳng hạn như HDFS. Có thể có nhiều tác nhân khói, trong trường hợp đó, máng dẫn nước sẽ chuyển tiếp sự kiện đến nguồn máng của tác nhân khói tiếp theo trong luồng.

Một số tính năng quan trọng của FLUME

  • Flume có thiết kế linh hoạt dựa trên luồng dữ liệu truyền phát. Nó có khả năng chịu lỗi và mạnh mẽ với nhiều cơ chế chuyển đổi dự phòng và phục hồi. Dữ liệu lớn của Flume có các mức độ tin cậy khác nhau để cung cấp, bao gồm 'giao hàng với nỗ lực tốt nhất' và một 'giao hàng từ đầu đến cuối'. Giao hàng với nỗ lực tốt nhất không chấp nhận bất kỳ lỗi nút Flume nào trong khi 'giao hàng từ đầu đến cuối' chế độ đảm bảo phân phối ngay cả trong trường hợp có nhiều nút bị lỗi.
  • Flume mang dữ liệu giữa nguồn và bồn. Việc thu thập dữ liệu này có thể được lên lịch hoặc theo sự kiện. Flume có công cụ xử lý truy vấn riêng giúp dễ dàng chuyển đổi từng lô dữ liệu mới trước khi chuyển đến nơi dự định.
  • Có thể bồn rửa máng bao gồm HDFSHBase. Flume Hadoop cũng có thể được sử dụng để vận chuyển dữ liệu sự kiện bao gồm nhưng không giới hạn ở dữ liệu lưu lượng mạng, dữ liệu được tạo bởi các trang web truyền thông xã hội và tin nhắn email.

Thiết lập Flume, thư viện và mã nguồn

Trước khi chúng ta bắt đầu quy trình thực tế, hãy đảm bảo bạn đã cài đặt Hadoop. Thay đổi người dùng thành 'hduser' (id được sử dụng khi cấu hình Hadoop, bạn có thể chuyển sang userid được sử dụng trong cấu hình Hadoop của mình)

Thiết lập Flume, Thư viện và Mã nguồn

Bước 1) Tạo một thư mục mới với tên 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Cấp quyền đọc, viết và thực thi
    sudo chmod -R 777 FlumeTutorial
  2. Sao chép tệp MyTwitterSource.javaMyTwitterSourceForFlume.java trong thư mục này.

Tải xuống tập tin đầu vào từ đây

Kiểm tra quyền truy cập tệp của tất cả các tệp này và nếu thiếu quyền 'đọc' thì hãy cấp quyền tương tự-

Thiết lập Flume, Thư viện và Mã nguồn

Bước 2) Tải xuống 'Apache Flume' từ một trang web- https://flume.apache.org/download.html

Apache Flume 1.4.0 đã được sử dụng trong hướng dẫn Flume này.

Thiết lập Flume, Thư viện và Mã nguồn

Nhấp chuột tiếp theo

Thiết lập Flume, Thư viện và Mã nguồn

Bước 3) Sao chép tarball đã tải xuống vào thư mục bạn chọn và giải nén nội dung bằng lệnh sau

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Thiết lập Flume, Thư viện và Mã nguồn

Lệnh này sẽ tạo một thư mục mới có tên apache-flume-1.4.0-bin và giải nén các tập tin vào đó. Thư mục này sẽ được gọi là ở phần còn lại của bài viết.

Bước 4) Thiết lập thư viện Flume

Sao chép twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar đến

/lib/

Có thể một trong hai hoặc tất cả JAR được sao chép sẽ phải có quyền thực thi. Điều này có thể gây ra vấn đề với việc biên dịch mã. Vì vậy, hãy thu hồi quyền thực thi trên JAR đó.

Trong trường hợp của tôi, twitter4j-core-4.0.1.jar là phải thực thi quyền. Tôi đã thu hồi nó như dưới đây-

sudo chmod -x twitter4j-core-4.0.1.jar

Thiết lập Flume, Thư viện và Mã nguồn

Sau lệnh này cấp quyền 'đọc' trên twitter4j-core-4.0.1.jar cho tất cả

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Xin lưu ý rằng tôi đã tải xuống-

– twitter4j-core-4.0.1.jar từ https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

Tất cả các JAR ngọn lửa tức là, máng-ng-*-1.4.0.jar từ http://mvnrepository.com/artifact/org.apache.flume

Tải dữ liệu từ Twitter bằng Flume

Bước 1) Đi tới thư mục chứa các file mã nguồn trong đó.

Bước 2) Thiết lập LỚP HỌC để chứa /lib/*~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Tải dữ liệu từ Twitter bằng Flume

Bước 3) Biên dịch mã nguồn bằng lệnh-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Tải dữ liệu từ Twitter bằng Flume

Bước 4)Tạo một cái lọ

Đầu tiên, tạo Manifest.txt tập tin bằng trình soạn thảo văn bản bạn chọn và thêm dòng bên dưới vào đó-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. đây flume.mytwittersource.MyTwitterSourceForFlume là tên của lớp chính. Xin lưu ý rằng bạn phải nhấn phím enter ở cuối dòng này.

Tải dữ liệu từ Twitter bằng Flume

Bây giờ, hãy tạo JAR 'MyTwitterSourceForFlume.jar' như-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Tải dữ liệu từ Twitter bằng Flume

Bước 5) Sao chép bình này vào /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Tải dữ liệu từ Twitter bằng Flume

Bước 6) Chuyển đến thư mục cấu hình của Flume, /conf

Nếu flume.conf không tồn tại, hãy sao chép flume-conf.properties.template và đổi tên thành flume.conf

sudo cp flume-conf.properties.template flume.conf

Tải dữ liệu từ Twitter bằng Flume

If máng-env.sh không tồn tại thì sao chép flume-env.sh.template và đổi tên nó thành máng-env.sh

sudo cp flume-env.sh.template flume-env.sh

Tải dữ liệu từ Twitter bằng Flume

Tạo một ứng dụng Twitter

Bước 1) Tạo ứng dụng Twitter bằng cách đăng nhập vào https://developer.twitter.com/

Tạo một ứng dụng Twitter

Tạo một ứng dụng Twitter

Bước 2) Đến phần 'Đơn ứng tuyển của tôi' (Tùy chọn này bị loại bỏ khi 'Trứng' nút ở góc trên bên phải được nhấp vào)

Tạo một ứng dụng Twitter

Bước 3) Tạo một ứng dụng mới bằng cách nhấp vào 'Tạo ứng dụng mới'

Bước 4) Điền thông tin chi tiết về ứng dụng bằng cách chỉ định tên ứng dụng, mô tả và trang web. Bạn có thể tham khảo các ghi chú được đưa ra bên dưới mỗi hộp nhập.

Tạo một ứng dụng Twitter

Bước 5) Cuộn xuống trang và chấp nhận các điều khoản bằng cách đánh dấu 'Vâng tôi đồng ý' và bấm vào nút'Tạo ứng dụng Twitter của bạn'

Tạo một ứng dụng Twitter

Bước 6) Trên cửa sổ của ứng dụng mới tạo, hãy chuyển đến tab, Khóa API cuộn xuống trang và nhấp vào nút 'Tạo mã thông báo truy cập của tôi'

Tạo một ứng dụng Twitter

Tạo một ứng dụng Twitter

Bước 7) Làm mới trang.

Bước 8) Nhấp vào 'Kiểm tra OAuth'. Điều này sẽ hiển thị 'OAuth' cài đặt của ứng dụng.

Tạo một ứng dụng Twitter

Bước 9) Sửa đổi 'flume.conf' sử dụng những thứ này Cài đặt OAuth. Các bước sửa đổi 'flume.conf' được đưa ra dưới đây.

Tạo một ứng dụng Twitter

Chúng tôi cần sao chép khóa Người tiêu dùng, Bí mật người tiêu dùng, Mã thông báo truy cập và Bí mật mã thông báo truy cập để cập nhật 'flume.conf'.

Lưu ý: Những giá trị này thuộc về người dùng và do đó được bảo mật nên không được chia sẻ.

Sửa đổi tệp 'flume.conf'

Bước 1) Mở 'flume.conf' ở chế độ ghi và đặt giá trị cho các tham số bên dưới-

sudo gedit flume.conf

Sao chép nội dung bên dưới-

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel 
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

Sửa đổi tệp 'Flume.conf'

Bước 2) Ngoài ra, thiết lập TwitterAgent.sinks.HDFS.hdfs.path như sau,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /cống/tweet/

Sửa đổi tệp 'Flume.conf'

Để biết , , xem giá trị của tham số 'fs.defaultFS' đặt trong $HADOOP_HOME/etc/hadoop/core-site.xml

Sửa đổi tệp 'Flume.conf'

Bước 3) Để chuyển dữ liệu sang HDFS, khi có dữ liệu xuất hiện, hãy xóa mục bên dưới nếu nó tồn tại,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Ví dụ: Truyền dữ liệu Twitter bằng Flume

Bước 1) Mở 'cùn-env.sh' ở chế độ ghi và đặt giá trị cho các tham số bên dưới,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Truyền dữ liệu Twitter bằng Flume

Bước 2) Bắt đầu Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Bước 3) Hai trong số các tệp JAR từ tarball Flume không tương thích với Hadoop 2.2.0. Vì vậy, chúng ta sẽ cần làm theo các bước dưới đây trong ví dụ Apache Flume này để làm cho Flume tương thích với Hadoop 2.2.0.

a. Di chuyển protobuf-java-2.4.1.jar ra khỏi ' /lib'.

Đến phần ' /lib'

đĩa CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Truyền dữ liệu Twitter bằng Flume

b. Tìm file JAR 'ổi' như bên dưới

find . -name "guava*"

Truyền dữ liệu Twitter bằng Flume

Di chuyển ổi-10.0.1.jar ra khỏi ' /lib'.

sudo mv guava-10.0.1.jar ~/

Truyền dữ liệu Twitter bằng Flume

c. Tải về ổi-17.0.jar từ http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Truyền dữ liệu Twitter bằng Flume

Bây giờ, hãy sao chép tệp jar đã tải xuống này vào ' /lib'

Bước 4) Đến phần ' /thùng rác' và khởi động Flume như-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Truyền dữ liệu Twitter bằng Flume

Cửa sổ nhắc lệnh nơi ống dẫn đang tìm nạp Tweets-

Truyền dữ liệu Twitter bằng Flume

Từ thông báo cửa sổ lệnh, chúng ta có thể thấy rằng đầu ra được ghi vào /user/hduser/flume/tweets/ thư mục.

Bây giờ, hãy mở thư mục này bằng trình duyệt web.

Bước 5) Để xem kết quả tải dữ liệu, hãy mở trình duyệt http://localhost:50070/ và duyệt hệ thống tệp, sau đó đi đến thư mục chứa dữ liệu đã được tải, nghĩa là-

/cống/tweet/

Truyền dữ liệu Twitter bằng Flume