บทช่วยสอน Apache Flume: คืออะไร Archiตัวอย่าง Tecture และ Hadoop
⚡ สรุปอย่างชาญฉลาด
Apache Flume เป็นบริการแบบกระจายศูนย์สำหรับการรวบรวม การรวมกลุ่ม และการย้ายข้อมูลบันทึกปริมาณมากไปยัง HDFS โดยสร้างขึ้นจากเอเจนต์ที่เชื่อมโยงแหล่งข้อมูล ช่องทาง และปลายทางเข้าด้วยกัน
Apache Flume ใน Hadoop คืออะไร
Apache Flume เป็นระบบแบบกระจายศูนย์ที่เชื่อถือได้สำหรับการรวบรวม การรวมกลุ่ม และการเคลื่อนย้ายข้อมูลบันทึกจำนวนมหาศาล มีสถาปัตยกรรมที่เรียบง่ายแต่ยืดหยุ่นโดยอิงจากกระแสข้อมูลแบบสตรีมมิ่ง Apache Flume ใช้ในการรวบรวมข้อมูลบันทึกที่มีอยู่ในไฟล์บันทึกจากเว็บเซิร์ฟเวอร์และรวมเข้าด้วยกัน เอชดีเอฟเอส สำหรับการวิเคราะห์
Flume ใน Hadoop รองรับแหล่งข้อมูลหลายประเภท รวมถึง:
- 'tail' (ซึ่งส่งข้อมูลจากไฟล์ในเครื่องไปยัง HDFS ผ่าน Flume คล้ายกับคำสั่ง 'tail' ในระบบ Unix)
- บันทึกระบบ
- อาปาเช่ log4j (ซึ่งช่วยให้) Java แอปพลิเคชันเพื่อเขียนเหตุการณ์ลงในไฟล์ใน HDFS ผ่าน Flume)
เวอร์ชันปัจจุบันคือ ฟลูม 1.11.0เผยแพร่เมื่อวันที่ 25 ตุลาคม 2022 และสามารถดาวน์โหลดได้จาก หน้าดาวน์โหลด Apache Flumeคู่มือนี้เขียนขึ้นโดยอ้างอิงจากเวอร์ชัน 1.4.0 ดังนั้นขั้นตอนบางส่วนด้านล่างจึงมีหมายเหตุระบุว่าเวอร์ชันปัจจุบันอาจมีพฤติกรรมที่แตกต่างออกไป
ไลเดอร์ Archiเทคเจอร์
ตัวแทนฟลูมคือ JVM กระบวนการที่มีส่วนประกอบสามส่วน ได้แก่ แหล่งกำเนิดกระแสน้ำ ช่องทางกระแสน้ำ และปลายทางกระแสน้ำ ซึ่งเหตุการณ์ต่างๆ จะแพร่กระจายไปหลังจากเริ่มต้นจากแหล่งภายนอก แผนภาพด้านล่างแสดงวิธีการเชื่อมต่อส่วนประกอบเหล่านี้
- เหตุการณ์ที่เกิดขึ้นจากแหล่งภายนอก (เว็บเซิร์ฟเวอร์) จะถูกประมวลผลโดยแหล่งข้อมูล Flume แหล่งภายนอกจะส่งเหตุการณ์ไปยังแหล่งข้อมูล Flume ในรูปแบบที่แหล่งข้อมูลเป้าหมายรู้จัก
- แหล่งข้อมูล Flume รับเหตุการณ์และจัดเก็บลงในช่องทางหนึ่งหรือหลายช่องทาง ช่องทางทำหน้าที่เป็นที่เก็บข้อมูลซึ่งเก็บเหตุการณ์ไว้จนกว่าปลายทาง Flume จะดึงข้อมูลนั้นไปใช้ ช่องทางนี้อาจใช้ระบบไฟล์ในเครื่องเพื่อจัดเก็บเหตุการณ์เหล่านี้
- ตัวรับเหตุการณ์ของ Flume จะลบเหตุการณ์ออกจากช่องทางและจัดเก็บไว้ในที่เก็บข้อมูลภายนอก เช่น HDFS อาจมีเอเจนต์ Flume หลายตัว ในกรณีนี้ ตัวรับเหตุการณ์ของ Flume จะส่งต่อเหตุการณ์ไปยังแหล่งข้อมูล Flume ของเอเจนต์ถัดไปในลำดับการไหล
คุณสมบัติสำคัญบางประการของรางน้ำ
- Flume มีการออกแบบที่ยืดหยุ่นโดยอิงจากกระแสข้อมูลแบบสตรีมมิ่ง มีความทนทานต่อความผิดพลาดและแข็งแกร่ง พร้อมด้วยกลไกการสลับระบบและการกู้คืนหลายระดับ Flume มีระดับความน่าเชื่อถือที่แตกต่างกัน รวมถึง 'การส่งมอบอย่างดีที่สุด' และ 'จัดส่งตั้งแต่ต้นทางถึงปลายทาง'. การส่งมอบความพยายามอย่างดีที่สุด ไม่สามารถทนต่อความล้มเหลวของโหนด Flume ใดๆ ได้ ในขณะที่ การส่งมอบแบบครบวงจร รับประกันการส่งมอบแม้ในกรณีที่โหนดหลายตัวล้มเหลว
- Flume ทำหน้าที่ส่งข้อมูลระหว่างแหล่งข้อมูลและปลายทาง การรวบรวมข้อมูลนี้สามารถทำได้ทั้งแบบกำหนดเวลาหรือแบบตามเหตุการณ์ Flume มีกลไกการประมวลผลคำสั่งค้นหาของตัวเอง ซึ่งช่วยให้การแปลงข้อมูลแต่ละชุดใหม่ก่อนที่จะส่งไปยังปลายทางที่ต้องการทำได้ง่าย
- เป็นไปได้ ฟลูมจมลง รวมถึง HDFS และ เอชเบสนอกจากนี้ Flume ยังสามารถขนส่งข้อมูลเหตุการณ์ต่างๆ เช่น ข้อมูลปริมาณการใช้งานเครือข่าย ข้อมูลที่สร้างขึ้นจากเว็บไซต์โซเชียลมีเดีย และข้อความอีเมลได้อีกด้วย
การตั้งค่า Flume ไลบรารี และซอร์สโค้ด
ก่อนที่เราจะเริ่มกระบวนการจริง โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Hadoop แล้ว หากยังไม่ได้ติดตั้ง โปรดทำตามขั้นตอนต่อไปนี้ วิธีการติดตั้ง Hadoop ขั้นแรก เปลี่ยนชื่อผู้ใช้เป็น 'hduser' (รหัสผู้ใช้ที่ใช้ในการกำหนดค่า Hadoop คุณสามารถเปลี่ยนไปใช้รหัสผู้ใช้ที่ใช้ในการกำหนดค่า Hadoop ของคุณเองได้)
ขั้นตอน 1) สร้างโฟลเดอร์ใหม่ชื่อ 'FlumeTutorial'
sudo mkdir FlumeTutorial
- ให้สิทธิ์ในการอ่าน เขียน และเรียกใช้งาน
sudo chmod -R 777 FlumeTutorial
- คัดลอกไฟล์ MyTwitterSource.java และ MyTwitterSourceForFlume.java ลงในไดเร็กทอรีนี้
ดาวน์โหลดไฟล์อินพุตได้จากที่นี่
ตรวจสอบสิทธิ์การเข้าถึงไฟล์ของไฟล์ทั้งหมดตามด้านล่าง และให้สิทธิ์ "อ่าน" หากยังไม่มีการให้สิทธิ์ดังกล่าว
ขั้นตอน 2) ดาวน์โหลด 'Apache Flume' จาก https://flume.apache.org/download.html.
Apache Flume 1.4.0 ถูกนำมาใช้ในบทช่วยสอน Flume นี้
ถัดไป คลิกเพื่อไปยังหน้ากระจก
ขั้นตอน 3) คัดลอกไฟล์ tarball ที่ดาวน์โหลดมาลงในไดเร็กทอรีที่คุณเลือก แล้วแตกไฟล์tract เนื้อหาโดยใช้คำสั่งต่อไปนี้
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
การดำเนินการนี้จะสร้างไดเร็กทอรีใหม่ชื่อ apache-flume-1.4.0-bin และ extracแทรกไฟล์เข้าไปในนั้น โฟลเดอร์นั้นเรียกว่า... ในส่วนที่เหลือของบทความนี้
ขั้นตอน 4) การตั้งค่าไลบรารี Flume คัดลอกไฟล์ 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 ไปยัง
/lib/
ไฟล์ JAR ที่คัดลอกมาทั้งหมดหรือบางส่วนอาจมีการตั้งค่าสิทธิ์ในการเรียกใช้งาน ซึ่งอาจทำให้เกิดปัญหาในการคอมไพล์โค้ด ดังนั้นจึงควรยกเลิกสิทธิ์นั้น ในกรณีของฉัน ไฟล์ twitter4j-core-4.0.1.jar มีสิทธิ์ในการเรียกใช้งาน ฉันจึงยกเลิกสิทธิ์นั้นตามขั้นตอนด้านล่าง
sudo chmod -x twitter4j-core-4.0.1.jar
หลังจากนั้น คำสั่งด้านล่างจะให้สิทธิ์ 'อ่าน' แก่ทุกคนบนไฟล์ twitter4j-core-4.0.1.jar
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
โปรดทราบว่าฉันดาวน์โหลดไฟล์ twitter4j-core-4.0.1.jar จาก ที่เก็บ Mavenและไฟล์ JAR ของ Flume ทั้งหมด เช่น flume-ng-*-1.4.0.jar จาก อาร์ติแฟกต์ org.apache.flume.
โหลดข้อมูลจาก Twitter โดยใช้ Flume
ขั้นตอน 1) เข้าไปในไดเร็กทอรีที่มีไฟล์ซอร์สโค้ดอยู่
ขั้นตอน 2) ตั้งค่า CLASSPATH ให้มี /lib/* และ ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
ขั้นตอน 3) คอมไพล์ซอร์สโค้ดโดยใช้คำสั่งด้านล่าง
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
ขั้นตอน 4) สร้างไฟล์ JAR ก่อนอื่น ให้สร้างไฟล์ Manifest.txt โดยใช้โปรแกรมแก้ไขข้อความที่คุณเลือก และเพิ่มบรรทัดด้านล่างลงในไฟล์นั้น
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
ในที่นี้ flume.mytwittersource.MyTwitterSourceForFlume คือชื่อของคลาสหลัก โปรดทราบว่าคุณต้องกดปุ่ม Enter ที่ท้ายบรรทัดนี้ ดังที่แสดงด้านล่าง
ต่อไป ให้สร้างไฟล์ JAR ชื่อ 'MyTwitterSourceForFlume.jar' ดังนี้
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
ขั้นตอน 5) คัดลอกไฟล์ JAR นี้ไปที่ /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
ขั้นตอน 6) ไปที่ไดเร็กทอรีการตั้งค่าของ Flume /คอนฟิก
หากไฟล์ flume.conf ไม่มีอยู่ ให้คัดลอกไฟล์ flume-conf.properties.template แล้วเปลี่ยนชื่อเป็น flume.conf
sudo cp flume-conf.properties.template flume.conf
หากไฟล์ flume-env.sh ไม่มีอยู่ ให้คัดลอกไฟล์ flume-env.sh.template แล้วเปลี่ยนชื่อเป็น flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
การสร้างแอปพลิเคชัน Twitter
โปรดอ่านตรงนี้ก่อน การสตรีมเวอร์ชัน 1.1 statuses/filter เอนด์พอยต์ที่ twitter4j 4.0.1 ต้องการนั้นถูกยกเลิกเมื่อวันที่ 9 มีนาคม 2023 และสตรีมที่กรองแล้วของ API v2 ที่เข้ามาแทนที่นั้น ปัจจุบันอยู่ที่ นักพัฒนา x.comอยู่ภายใต้แพ็กเกจแบบเสียค่าใช้จ่าย ให้ถือว่าหน้าจอด้านล่างเป็นรูปแบบแหล่งข้อมูลแบบกำหนดเอง จากนั้นชี้เอเจนต์ตัวเดียวกันไปยังไฟล์ ไฟล์ปฏิบัติการ หรือแหล่งข้อมูล Kafka
ขั้นตอน 1) สร้างแอปพลิเคชัน Twitter โดยลงชื่อเข้าใช้พอร์ทัลสำหรับนักพัฒนา
ขั้นตอน 2) ไปที่ 'แอปพลิเคชันของฉัน' (ตัวเลือกนี้จะปรากฏขึ้นเมื่อคลิกปุ่ม 'รูปไข่' ที่มุมบนขวามือ)
ขั้นตอน 3) สร้างแอปพลิเคชันใหม่โดยคลิกที่ 'สร้างแอปใหม่'
ขั้นตอน 4) กรอกรายละเอียดแอปพลิเคชันโดยระบุชื่อแอปพลิเคชัน คำอธิบาย และเว็บไซต์ คุณสามารถดูหมายเหตุที่อยู่ใต้ช่องป้อนข้อมูลแต่ละช่องได้
ขั้นตอน 5) เลื่อนลงมาด้านล่างของหน้า ยอมรับข้อกำหนดโดยทำเครื่องหมายที่ 'ใช่ ฉันเห็นด้วย' และคลิกปุ่ม 'สร้างแอปพลิเคชัน Twitter ของคุณ'
ขั้นตอน 6) ในหน้าต่างของแอปพลิเคชันที่สร้างขึ้นใหม่ ให้ไปที่แท็บ 'API Keys' เลื่อนลงมาด้านล่าง แล้วคลิกปุ่ม 'สร้างโทเค็นการเข้าถึงของฉัน'
ขั้นตอน 7) รีเฟรชหน้า
ขั้นตอน 8) คลิกที่ 'ทดสอบ OAuth' ซึ่งจะแสดงการตั้งค่า 'OAuth' ของแอปพลิเคชัน
ขั้นตอน 9) แก้ไขไฟล์ 'flume.conf' โดยใช้การตั้งค่า OAuth เหล่านี้ ขั้นตอนในการแก้ไขไฟล์ 'flume.conf' มีดังต่อไปนี้
เราจำเป็นต้องคัดลอกคีย์ผู้บริโภค, รหัสลับผู้บริโภค, โทเค็นการเข้าถึง และรหัสลับโทเค็นการเข้าถึง เพื่ออัปเดตไฟล์ 'flume.conf'
หมายเหตุ: ค่าเหล่านี้เป็นของผู้ใช้และเป็นข้อมูลที่เป็นความลับ ดังนั้นจึงไม่ควรนำไปเผยแพร่
แก้ไขไฟล์ 'flume.conf'
ขั้นตอน 1) เปิดไฟล์ 'flume.conf' ในโหมดเขียน และกำหนดค่าให้กับพารามิเตอร์ด้านล่าง
sudo gedit flume.conf
คัดลอกเนื้อหาด้านล่างนี้
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
ขั้นตอน 2) นอกจากนี้ ให้ตั้งค่า TwitterAgent.sinks.HDFS.hdfs.path ดังต่อไปนี้
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// - - /flume/ทวีต/
เพื่อค้นหา , และ โปรดดูค่าของพารามิเตอร์ 'fs.defaultFS' ที่ตั้งไว้ในไฟล์ $HADOOP_HOME/etc/hadoop/core-site.xml ดังแสดงด้านล่าง
ขั้นตอน 3) เพื่อให้สามารถบันทึกข้อมูลลง HDFS ได้เมื่อมีการอัปเดตเข้ามา โปรดลบรายการด้านล่างหากมีอยู่
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
ตัวอย่าง: การสตรีมข้อมูล Twitter โดยใช้ Flume
ขั้นตอน 1) เปิดไฟล์ 'flume-env.sh' ในโหมดเขียน และกำหนดค่าให้กับพารามิเตอร์ด้านล่าง
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
ขั้นตอน 2) เริ่มต้นใช้งาน Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
ขั้นตอน 3) ไฟล์ JAR สองไฟล์จากไฟล์บีบอัด Flume ไม่สามารถใช้งานร่วมกับ Hadoop 2.2.0 ได้ ดังนั้นในตัวอย่าง Apache Flume นี้ เราจึงทำตามขั้นตอนด้านล่างเพื่อให้ Flume สามารถใช้งานร่วมกับ Hadoop 2.2.0 ได้ การเปลี่ยนไฟล์ JAR นี้เป็นการแก้ไขปัญหาในยุค 1.4.0; Flume 1.11.0 มี protobuf และ Guava เวอร์ชันปัจจุบันอยู่แล้ว ดังนั้นไฟล์บีบอัดเวอร์ชันใหม่จึงไม่จำเป็นต้องใช้ส่วนประกอบเหล่านี้อีกต่อไป
ก. ย้ายไฟล์ protobuf-java-2.4.1.jar ออกจาก ' เข้าไปที่ไดเร็กทอรี '/lib' ก่อน
ซีดี /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. ค้นหาไฟล์ JAR ชื่อ 'guava' ตามรายละเอียดด้านล่าง
find . -name "guava*"
ย้ายไฟล์ guava-10.0.1.jar ออกจาก ' /lib'
sudo mv guava-10.0.1.jar ~/
ค. ดาวน์โหลดไฟล์ guava-17.0.jar จาก ที่เก็บ Maven, แสดงด้านล่าง.
ตอนนี้ ให้คัดลอกไฟล์ JAR ที่ดาวน์โหลดมานี้ไปยัง ' /lib'
ขั้นตอน 4) ไปที่ ' /bin' และเริ่ม Flume ดังนี้
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
หน้าต่าง Command Prompt ที่ Flume ใช้ดึงทวีตจะมีลักษณะดังนี้
จากข้อความในหน้าต่างคำสั่ง เราจะเห็นว่าผลลัพธ์ถูกเขียนลงในไดเร็กทอรี /user/hduser/flume/tweets/ ตอนนี้ ให้เปิดไดเร็กทอรีนี้โดยใช้เว็บเบราว์เซอร์
ขั้นตอน 5) หากต้องการดูผลลัพธ์ของการโหลดข้อมูล ให้เปิด http://localhost:50070/ ในเบราว์เซอร์ เรียกดูระบบไฟล์ จากนั้นไปที่ไดเร็กทอรีที่โหลดข้อมูลไว้ นั่นคือ
/flume/ทวีต/
พอร์ต 50070 คือเว็บ UI ของ NameNode บน Hadoop 2 ส่วน Hadoop 3 ได้ย้ายหน้าเว็บเดียวกันนี้ไปที่พอร์ต 9870 แล้ว
การไหลของของเหลวเป็นครึ่งหนึ่งของการรับประทาน: สควอช นำเข้าตารางเป็นชุดๆ สตรีมเหตุการณ์ Flume จากนั้น หมู or รัง จัดรูปแบบไฟล์และ oozie กำหนดตารางเวลาของห่วงโซ่ ดูเพิ่มเติม เครื่องมือวิเคราะห์ข้อมูลขนาดใหญ่, การเชื่อมต่อและการนับของ MapReduce และ Talend.


































