บทช่วยสอน Apache Flume: คืออะไร Archiตัวอย่าง Tecture และ Hadoop

⚡ สรุปอย่างชาญฉลาด

Apache Flume เป็นบริการแบบกระจายศูนย์สำหรับการรวบรวม การรวมกลุ่ม และการย้ายข้อมูลบันทึกปริมาณมากไปยัง HDFS โดยสร้างขึ้นจากเอเจนต์ที่เชื่อมโยงแหล่งข้อมูล ช่องทาง และปลายทางเข้าด้วยกัน

  • 🔘 โครงสร้างตัวแทน: เอเจนต์ Flume แต่ละตัวเป็นกระบวนการ JVM ที่ประกอบด้วยแหล่งข้อมูล ช่องสัญญาณหนึ่งช่องขึ้นไป และปลายทางรับข้อมูล
  • ☑️ ความน่าเชื่อถือ: การส่งมอบแบบ Best-effort จะไม่ยอมรับความล้มเหลวของโหนดใดๆ เลย ในขณะที่การส่งมอบแบบ End-to-end จะสามารถรับมือกับความล้มเหลวของโหนดหลายๆ โหนดได้
  • การติดตั้ง: คลาสซอร์สโค้ดที่กำหนดเองจะถูกคอมไพล์เป็นไฟล์ JAR ซึ่งจะถูกวางไว้ในไดเร็กทอรี lib ของ Flume
  • 🧪 การกำหนดค่า: ไฟล์คุณสมบัติไฟล์หนึ่งจะระบุชื่อแหล่งที่มา ช่องสัญญาณ และปลายทาง รวมถึงตั้งค่าเส้นทาง HDFS และขีดจำกัดการหมุนเวียนข้อมูล
  • 🛠️ เปิด: เริ่มต้นไปป์ไลน์ด้วยเอเจนต์ flume-ng โดยตั้งชื่อเอเจนต์และชี้ไปยังไฟล์ flume.conf
  • ⚠️ ตัวอย่างเก่า: เอนด์พอยต์การสตรีมของ Twitter v1.1 ปิดให้บริการในเดือนมีนาคม 2023 ดังนั้นให้ถือว่าแบบฝึกหัดนี้เป็นรูปแบบแหล่งข้อมูลแบบกำหนดเอง

บทช่วยสอน Apache Flume ครอบคลุมสถาปัตยกรรมเอเจนต์ การกำหนดค่า และตัวอย่างการสตรีมข้อมูลบน Hadoop

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 แสดงให้เห็นเอเจนต์ที่มีแหล่งกำเนิด ช่องทาง และปลายทางที่ส่งข้อมูลไปยัง HDFS

  1. เหตุการณ์ที่เกิดขึ้นจากแหล่งภายนอก (เว็บเซิร์ฟเวอร์) จะถูกประมวลผลโดยแหล่งข้อมูล Flume แหล่งภายนอกจะส่งเหตุการณ์ไปยังแหล่งข้อมูล Flume ในรูปแบบที่แหล่งข้อมูลเป้าหมายรู้จัก
  2. แหล่งข้อมูล Flume รับเหตุการณ์และจัดเก็บลงในช่องทางหนึ่งหรือหลายช่องทาง ช่องทางทำหน้าที่เป็นที่เก็บข้อมูลซึ่งเก็บเหตุการณ์ไว้จนกว่าปลายทาง Flume จะดึงข้อมูลนั้นไปใช้ ช่องทางนี้อาจใช้ระบบไฟล์ในเครื่องเพื่อจัดเก็บเหตุการณ์เหล่านี้
  3. ตัวรับเหตุการณ์ของ Flume จะลบเหตุการณ์ออกจากช่องทางและจัดเก็บไว้ในที่เก็บข้อมูลภายนอก เช่น HDFS อาจมีเอเจนต์ Flume หลายตัว ในกรณีนี้ ตัวรับเหตุการณ์ของ Flume จะส่งต่อเหตุการณ์ไปยังแหล่งข้อมูล Flume ของเอเจนต์ถัดไปในลำดับการไหล

คุณสมบัติสำคัญบางประการของรางน้ำ

  • Flume มีการออกแบบที่ยืดหยุ่นโดยอิงจากกระแสข้อมูลแบบสตรีมมิ่ง มีความทนทานต่อความผิดพลาดและแข็งแกร่ง พร้อมด้วยกลไกการสลับระบบและการกู้คืนหลายระดับ Flume มีระดับความน่าเชื่อถือที่แตกต่างกัน รวมถึง 'การส่งมอบอย่างดีที่สุด' และ 'จัดส่งตั้งแต่ต้นทางถึงปลายทาง'. การส่งมอบความพยายามอย่างดีที่สุด ไม่สามารถทนต่อความล้มเหลวของโหนด Flume ใดๆ ได้ ในขณะที่ การส่งมอบแบบครบวงจร รับประกันการส่งมอบแม้ในกรณีที่โหนดหลายตัวล้มเหลว
  • Flume ทำหน้าที่ส่งข้อมูลระหว่างแหล่งข้อมูลและปลายทาง การรวบรวมข้อมูลนี้สามารถทำได้ทั้งแบบกำหนดเวลาหรือแบบตามเหตุการณ์ Flume มีกลไกการประมวลผลคำสั่งค้นหาของตัวเอง ซึ่งช่วยให้การแปลงข้อมูลแต่ละชุดใหม่ก่อนที่จะส่งไปยังปลายทางที่ต้องการทำได้ง่าย
  • เป็นไปได้ ฟลูมจมลง รวมถึง HDFS และ เอชเบสนอกจากนี้ Flume ยังสามารถขนส่งข้อมูลเหตุการณ์ต่างๆ เช่น ข้อมูลปริมาณการใช้งานเครือข่าย ข้อมูลที่สร้างขึ้นจากเว็บไซต์โซเชียลมีเดีย และข้อความอีเมลได้อีกด้วย

การตั้งค่า Flume ไลบรารี และซอร์สโค้ด

ก่อนที่เราจะเริ่มกระบวนการจริง โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Hadoop แล้ว หากยังไม่ได้ติดตั้ง โปรดทำตามขั้นตอนต่อไปนี้ วิธีการติดตั้ง Hadoop ขั้นแรก เปลี่ยนชื่อผู้ใช้เป็น 'hduser' (รหัสผู้ใช้ที่ใช้ในการกำหนดค่า Hadoop คุณสามารถเปลี่ยนไปใช้รหัสผู้ใช้ที่ใช้ในการกำหนดค่า Hadoop ของคุณเองได้)

เปลี่ยนผู้ใช้ Linux ในเทอร์มินัลเป็น hduser ก่อนเริ่มการติดตั้ง Flume

ขั้นตอน 1) สร้างโฟลเดอร์ใหม่ชื่อ 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. ให้สิทธิ์ในการอ่าน เขียน และเรียกใช้งาน
    sudo chmod -R 777 FlumeTutorial
  2. คัดลอกไฟล์ MyTwitterSource.java และ MyTwitterSourceForFlume.java ลงในไดเร็กทอรีนี้

ดาวน์โหลดไฟล์อินพุตได้จากที่นี่

ตรวจสอบสิทธิ์การเข้าถึงไฟล์ของไฟล์ทั้งหมดตามด้านล่าง และให้สิทธิ์ "อ่าน" หากยังไม่มีการให้สิทธิ์ดังกล่าว

โปรแกรมเทอร์มินัลแสดงสิทธิ์การเข้าถึงไฟล์ที่ดาวน์โหลดมา Java ไฟล์ต้นฉบับ

ขั้นตอน 2) ดาวน์โหลด 'Apache Flume' จาก https://flume.apache.org/download.html.

Apache Flume 1.4.0 ถูกนำมาใช้ในบทช่วยสอน Flume นี้

หน้าดาวน์โหลด Apache Flume แสดงลิงก์ไฟล์ tarball ไบนารีให้เลือก

ถัดไป คลิกเพื่อไปยังหน้ากระจก

หน้าเว็บมิเรอร์ของ Apache ที่เข้าถึงได้หลังจากคลิกลิงก์ไฟล์ tarball ของ Flume

ขั้นตอน 3) คัดลอกไฟล์ tarball ที่ดาวน์โหลดมาลงในไดเร็กทอรีที่คุณเลือก แล้วแตกไฟล์tract เนื้อหาโดยใช้คำสั่งต่อไปนี้

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

เทอร์มินัล เอ็กtracแตกไฟล์ tarball ของ Flume ด้วยคำสั่ง sudo tar -xvf

การดำเนินการนี้จะสร้างไดเร็กทอรีใหม่ชื่อ 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

เทอร์มินัลกำลังเพิกถอนสิทธิ์การเรียกใช้งานไฟล์ JAR หลักของ twitter4j

หลังจากนั้น คำสั่งด้านล่างจะให้สิทธิ์ 'อ่าน' แก่ทุกคนบนไฟล์ 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/*"

ส่งออก CLASSPATH ผ่านเทอร์มินัล ซึ่งชี้ไปยังไดเร็กทอรีไลบรารีและซอร์สโค้ดของ Flume

ขั้นตอน 3) คอมไพล์ซอร์สโค้ดโดยใช้คำสั่งด้านล่าง

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

เทอร์มินัลคอมไพล์ทั้งสอง Java ไฟล์ต้นฉบับที่มี javac

ขั้นตอน 4) สร้างไฟล์ JAR ก่อนอื่น ให้สร้างไฟล์ Manifest.txt โดยใช้โปรแกรมแก้ไขข้อความที่คุณเลือก และเพิ่มบรรทัดด้านล่างลงในไฟล์นั้น

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

ในที่นี้ flume.mytwittersource.MyTwitterSourceForFlume คือชื่อของคลาสหลัก โปรดทราบว่าคุณต้องกดปุ่ม Enter ที่ท้ายบรรทัดนี้ ดังที่แสดงด้านล่าง

เปิดไฟล์ Manifest.txt ด้วยโปรแกรมแก้ไขข้อความ โดยดูที่ช่อง Main-Class

ต่อไป ให้สร้างไฟล์ JAR ชื่อ 'MyTwitterSourceForFlume.jar' ดังนี้

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

เทอร์มินัลจะทำการบรรจุคลาสที่คอมไพล์แล้วลงในไฟล์ MyTwitterSourceForFlume.jar

ขั้นตอน 5) คัดลอกไฟล์ JAR นี้ไปที่ /lib/.

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

คัดลอกไฟล์ JAR ซอร์สโค้ดที่กำหนดเองไปยังไดเร็กทอรี lib ของ Flume ผ่านเทอร์มินัล

ขั้นตอน 6) ไปที่ไดเร็กทอรีการตั้งค่าของ Flume /คอนฟิก

หากไฟล์ flume.conf ไม่มีอยู่ ให้คัดลอกไฟล์ flume-conf.properties.template แล้วเปลี่ยนชื่อเป็น flume.conf

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

คัดลอกไฟล์ 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

กำลังคัดลอกไฟล์ 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 โดยลงชื่อเข้าใช้พอร์ทัลสำหรับนักพัฒนา

หน้าเข้าสู่ระบบสำหรับนักพัฒนาของ Twitter ใช้เพื่อเข้าถึงรายการแอปพลิเคชัน

หน้าแรกของบัญชีนักพัฒนา Twitter จะแสดงขึ้นหลังจากเข้าสู่ระบบ

ขั้นตอน 2) ไปที่ 'แอปพลิเคชันของฉัน' (ตัวเลือกนี้จะปรากฏขึ้นเมื่อคลิกปุ่ม 'รูปไข่' ที่มุมบนขวามือ)

หน้า "แอปพลิเคชันของฉัน" ในพอร์ทัลสำหรับนักพัฒนาของ Twitter

ขั้นตอน 3) สร้างแอปพลิเคชันใหม่โดยคลิกที่ 'สร้างแอปใหม่'

ขั้นตอน 4) กรอกรายละเอียดแอปพลิเคชันโดยระบุชื่อแอปพลิเคชัน คำอธิบาย และเว็บไซต์ คุณสามารถดูหมายเหตุที่อยู่ใต้ช่องป้อนข้อมูลแต่ละช่องได้

แบบฟอร์มสร้างแอปพลิเคชัน Twitter พร้อมช่องสำหรับชื่อ คำอธิบาย และเว็บไซต์

ขั้นตอน 5) เลื่อนลงมาด้านล่างของหน้า ยอมรับข้อกำหนดโดยทำเครื่องหมายที่ 'ใช่ ฉันเห็นด้วย' และคลิกปุ่ม 'สร้างแอปพลิเคชัน Twitter ของคุณ'

ช่องทำเครื่องหมายข้อกำหนดและปุ่มสร้างแอปพลิเคชันที่ด้านล่างของแบบฟอร์ม Twitter

ขั้นตอน 6) ในหน้าต่างของแอปพลิเคชันที่สร้างขึ้นใหม่ ให้ไปที่แท็บ 'API Keys' เลื่อนลงมาด้านล่าง แล้วคลิกปุ่ม 'สร้างโทเค็นการเข้าถึงของฉัน'

แท็บ API Keys ของแอปพลิเคชัน Twitter เวอร์ชันใหม่ ก่อนที่จะมี Access Token

รายละเอียดโทเค็นการเข้าถึงจะแสดงขึ้นหลังจากกดปุ่ม "สร้างโทเค็นการเข้าถึงของฉัน"

ขั้นตอน 7) รีเฟรชหน้า

ขั้นตอน 8) คลิกที่ 'ทดสอบ OAuth' ซึ่งจะแสดงการตั้งค่า 'OAuth' ของแอปพลิเคชัน

หน้าจอทดสอบ OAuth แสดงการตั้งค่า OAuth ของแอปพลิเคชัน

ขั้นตอน 9) แก้ไขไฟล์ 'flume.conf' โดยใช้การตั้งค่า OAuth เหล่านี้ ขั้นตอนในการแก้ไขไฟล์ 'flume.conf' มีดังต่อไปนี้

การตั้งค่า OAuth ที่แสดงรายการค่าคีย์ผู้บริโภค, รหัสลับผู้บริโภค และโทเค็นการเข้าถึง

เราจำเป็นต้องคัดลอกคีย์ผู้บริโภค, รหัสลับผู้บริโภค, โทเค็นการเข้าถึง และรหัสลับโทเค็นการเข้าถึง เพื่ออัปเดตไฟล์ '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

ไฟล์ flume.conf จะเปิดในโปรแกรมแก้ไขข้อความ โดยมีคุณสมบัติแหล่งที่มา ช่องสัญญาณ และปลายทางของ MyTwitAgent

ขั้นตอน 2) นอกจากนี้ ให้ตั้งค่า TwitterAgent.sinks.HDFS.hdfs.path ดังต่อไปนี้

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// - - /flume/ทวีต/

คุณสมบัติ hdfs.path ของ HDFS sink ถูกตั้งค่าเป็นชื่อโฮสต์ หมายเลขพอร์ต และไดเร็กทอรีโฮมของ HDFS

เพื่อค้นหา , และ โปรดดูค่าของพารามิเตอร์ 'fs.defaultFS' ที่ตั้งไว้ในไฟล์ $HADOOP_HOME/etc/hadoop/core-site.xml ดังแสดงด้านล่าง

คุณสมบัติ fs.defaultFS ภายในไฟล์ 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"

เปิดไฟล์ flume-env.sh ในโปรแกรมแก้ไขข้อความ โดยตั้งค่า JAVA_HOME และ FLUME_CLASSPATH ให้ถูกต้อง

ขั้นตอน 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 ~/

เทอร์มินัลกำลังย้ายไฟล์ protobuf-java-2.4.1.jar ออกจากไดเร็กทอรี lib ของ Flume

b. ค้นหาไฟล์ JAR ชื่อ 'guava' ตามรายละเอียดด้านล่าง

find . -name "guava*"

ใช้คำสั่ง find ในเทอร์มินัลเพื่อค้นหาไฟล์ JAR ของ guava ที่รวมมาด้วย

ย้ายไฟล์ guava-10.0.1.jar ออกจาก ' /lib'

sudo mv guava-10.0.1.jar ~/

เทอร์มินัลกำลังย้ายไฟล์ guava-10.0.1.jar ออกจากไดเร็กทอรี lib ของ Flume

ค. ดาวน์โหลดไฟล์ guava-17.0.jar จาก ที่เก็บ Maven, แสดงด้านล่าง.

หน้า Maven Repository สำหรับ Guava 17.0 ซึ่งเป็นไฟล์ JAR ตัวใหม่ที่สามารถดาวน์โหลดได้

ตอนนี้ ให้คัดลอกไฟล์ JAR ที่ดาวน์โหลดมานี้ไปยัง ' /lib'

ขั้นตอน 4) ไปที่ ' /bin' และเริ่ม Flume ดังนี้

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

เทอร์มินัลกำลังเริ่มต้นเอเจนต์ Flume ที่ชื่อ MyTwitAgent ด้วยคำสั่ง flume-ng

หน้าต่าง Command Prompt ที่ Flume ใช้ดึงทวีตจะมีลักษณะดังนี้

หน้าต่างคำสั่งแสดงการทำงานของเอเจนต์ Flume ในการดึงทวีตและเขียนลงใน HDFS

จากข้อความในหน้าต่างคำสั่ง เราจะเห็นว่าผลลัพธ์ถูกเขียนลงในไดเร็กทอรี /user/hduser/flume/tweets/ ตอนนี้ ให้เปิดไดเร็กทอรีนี้โดยใช้เว็บเบราว์เซอร์

ขั้นตอน 5) หากต้องการดูผลลัพธ์ของการโหลดข้อมูล ให้เปิด http://localhost:50070/ ในเบราว์เซอร์ เรียกดูระบบไฟล์ จากนั้นไปที่ไดเร็กทอรีที่โหลดข้อมูลไว้ นั่นคือ

/flume/ทวีต/

พอร์ต 50070 คือเว็บ UI ของ NameNode บน Hadoop 2 ส่วน Hadoop 3 ได้ย้ายหน้าเว็บเดียวกันนี้ไปที่พอร์ต 9870 แล้ว

โปรแกรมดูไฟล์ HDFS แสดงไดเร็กทอรี flume/tweets พร้อมไฟล์ทวีตที่โหลดไว้

การไหลของของเหลวเป็นครึ่งหนึ่งของการรับประทาน: สควอช นำเข้าตารางเป็นชุดๆ สตรีมเหตุการณ์ Flume จากนั้น หมู or รัง จัดรูปแบบไฟล์และ oozie กำหนดตารางเวลาของห่วงโซ่ ดูเพิ่มเติม เครื่องมือวิเคราะห์ข้อมูลขนาดใหญ่, การเชื่อมต่อและการนับของ MapReduce และ Talend.

คำถามที่พบบ่อย

ไม่ตรงตามที่เขียนไว้ ปลายทางสตรีมมิ่งสถานะ/ตัวกรองเวอร์ชัน 1.1 ถูกยกเลิกเมื่อวันที่ 9 มีนาคม 2023 และ API เวอร์ชัน 2 ที่ใช้ทดแทนนั้นต้องเสียค่าบริการ กลไกของ Flume ยังคงใช้ได้อยู่สำหรับการปรับแต่งแหล่งข้อมูลเอง

แบบจำลองจะกำหนดค่าพื้นฐานเป็นปริมาณบันทึกปกติและรูปร่างข้อความ จากนั้นจะระบุความเบี่ยงเบนที่เกณฑ์คงที่ตรวจไม่พบ นอกจากนี้ยังจัดกลุ่มสแต็กที่ซ้ำกันด้วย tracสรุปเหตุการณ์ต่างๆ ให้เป็นเหตุการณ์เดียวและร่างสาเหตุที่เป็นไปได้ ช่วยลดขั้นตอนการคัดแยกผู้ป่วย

Copilot ร่างบล็อกแหล่งที่มา ช่องสัญญาณ และปลายทางได้อย่างรวดเร็ว แต่จะสร้างชื่อคุณสมบัติและผสมผสานการเผยแพร่ขึ้นมาเอง ตรวจสอบคีย์ทุกตัวกับคู่มือผู้ใช้ Flume สำหรับเวอร์ชันของคุณก่อนเริ่มใช้งานเอเจนต์

Flume ส่งข้อมูลเหตุการณ์ เช่น บันทึกต่างๆ อย่างต่อเนื่องไปยัง HDFS ในขณะที่ Sqoop ย้ายตารางที่มีโครงสร้างระหว่างฐานข้อมูลเชิงสัมพันธ์และ Hadoop เป็นชุดตามกำหนดเวลา ทั้งสองเครื่องมือครอบคลุมส่วนต่างๆ ของการนำเข้าข้อมูลและทำงานร่วมกันได้ดี

ช่องทางหน่วยความจำนั้นเร็วที่สุด แต่จะสูญเสียเหตุการณ์ที่บัฟเฟอร์ไว้หากเอเจนต์หยุดทำงาน ช่องทางไฟล์จะเขียนลงดิสก์และยังคงใช้งานได้แม้หลังจากรีสตาร์ท แต่มีอัตราการส่งข้อมูลต่ำกว่า ควรเลือกช่องทางที่มีความทนทานสำหรับสิ่งที่ไม่สามารถส่งซ้ำได้

ปัจจุบัน Kafka เป็นตัวเลือกเริ่มต้นที่นิยมใช้กัน เนื่องจากสามารถเก็บรักษาข้อมูลและรองรับผู้ใช้งานจำนวนมาก ส่วน Flume เวอร์ชัน 1.11.0 ที่ออกมาเมื่อเดือนตุลาคม 2022 ก็ยังเหมาะสำหรับการรวบรวมบันทึกข้อมูลแบบทางเดียวไปยัง HDFS อยู่

โดยส่วนใหญ่แล้วมักเกิดจากไฟล์ JAR ที่ขัดแย้งกัน: ไฟล์ tarball ของ Flume จะรวมเวอร์ชัน Guava และ protobuf ของตัวเองไว้ ซึ่งขัดแย้งกับเวอร์ชันที่ Hadoop โหลด การลบไฟล์ JAR เก่าที่รวมมาด้วยมักจะช่วยแก้ปัญหานี้ได้

ตัวแปรเหล่านี้จะกำหนดเวลาที่ตัวจัดการไฟล์จะปิดไฟล์และเปิดไฟล์ใหม่ โดยกำหนดค่าเป็น rollSize (ขนาดไฟล์เป็นไบต์), rollCount (จำนวนเหตุการณ์) และ rollInterval (ช่วงเวลาเป็นวินาที) ค่าศูนย์จะปิดใช้งานตัวกระตุ้นนั้น

สรุปโพสต์นี้ด้วย: