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 Flume và bồ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.
- 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.
- 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.
- 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 HDFS và HBase. 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)
Bước 1) Tạo một thư mục mới với tên 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Cấp quyền đọc, viết và thực thi
sudo chmod -R 777 FlumeTutorial
- Sao chép tệp MyTwitterSource.java và MyTwitterSourceForFlume.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ự-
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.
Nhấp chuột tiếp theo
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
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
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/* và ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Bước 3) Biên dịch mã nguồn bằng lệnh-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Bây giờ, hãy tạo JAR 'MyTwitterSourceForFlume.jar' như-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Bước 5) Sao chép bình này vào /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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ạ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/
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)
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.
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'
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'
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.
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.
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
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/
Để biết , và , xem giá trị của tham số 'fs.defaultFS' đặt trong $HADOOP_HOME/etc/hadoop/core-site.xml
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"
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 ~/
b. Tìm file JAR 'ổi' như bên dưới
find . -name "guava*"
Di chuyển ổi-10.0.1.jar ra khỏi ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Tải về ổi-17.0.jar từ http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Cửa sổ nhắc lệnh nơi ống dẫn đang tìm nạp Tweets-
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/