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

Apache Flume ใน Hadoop คืออะไร

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

Flume ใน Hadoop รองรับหลายแหล่ง เช่น –

  • 'tail' (ซึ่งไพพ์ข้อมูลจากไฟล์ในเครื่องและเขียนลงใน HDFS ผ่าน Flume คล้ายกับคำสั่ง Unix 'tail')
  • บันทึกระบบ
  • อาปาเช่ log4j (เปิดใช้งาน Java แอปพลิเคชันเพื่อเขียนเหตุการณ์ลงในไฟล์ใน HDFS ผ่าน Flume)

ไลเดอร์ Archiเทคเจอร์

A ตัวแทนฟลูม คือ JVM กระบวนการซึ่งมี 3 องค์ประกอบ –แหล่งที่มาของ Flume ช่องฟลูม รวมถึง อ่างล้างจานฟลูม– เหตุการณ์ใดแพร่กระจายหลังจากเริ่มต้นที่แหล่งภายนอก

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

คุณสมบัติที่สำคัญบางประการของ FLUME

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

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

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

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

ขั้นตอน 1) สร้างไดเรกทอรีใหม่ด้วยชื่อ 'FlumeTutorial'

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

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

ตรวจสอบการอนุญาตไฟล์ของไฟล์เหล่านี้ทั้งหมดและหากการอนุญาต 'อ่าน' หายไปให้อนุญาตแบบเดียวกัน

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

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

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

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

คลิกถัดไป

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

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

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

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

คำสั่งนี้จะสร้างไดเร็กทอรีใหม่ชื่อ apache-flume-1.4.0-bin และแตกไฟล์ลงไป ไดเรกทอรีนี้จะเรียกว่า ในส่วนที่เหลือของบทความ

ขั้นตอน 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 ที่คัดลอกอย่างใดอย่างหนึ่งหรือทั้งหมดจะต้องดำเนินการอนุญาต นี่อาจทำให้เกิดปัญหากับการคอมไพล์โค้ด ดังนั้นให้เพิกถอนการอนุญาตดำเนินการบน JAR ดังกล่าว

ในกรณีของฉัน twitter4j-core-4.0.1.jar คือ ต้องดำเนินการอนุญาต ฉันเพิกถอนมันตามด้านล่าง -

sudo chmod -x twitter4j-core-4.0.1.jar

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

หลังจากคำสั่งนี้ให้สิทธิ์ 'อ่าน' บน 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 รถในตำนานจากเกม https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- JAR เปลวไฟทั้งหมดเช่น flume-ng-*-1.4.0.jar รถในตำนานจากเกม http://mvnrepository.com/artifact/org.apache.flume

โหลดข้อมูลจาก Twitter โดยใช้ Flume

ขั้นตอน 1) ไปที่ไดเร็กทอรีที่มีไฟล์ซอร์สโค้ดอยู่

ขั้นตอน 2) ชุด คลาสพาธ บรรจุ /lib/* รวมถึง ~/FlumeTutorial/flume/mytwittersource/*

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

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

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

โหลดข้อมูลจาก Twitter โดยใช้ Flume

ขั้นตอน 4)สร้างขวดโหล

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

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

ตอนนี้สร้าง JAR 'MyTwitterSourceForFlume.jar' เช่น-

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

ขั้นตอน 5) คัดลอกกระปุกนี้ไปที่ /lib/

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

ขั้นตอน 6) ไปที่ไดเร็กทอรีการกำหนดค่าของ Flume /ประชุม

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

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

If flume-env.sh ไม่มีอยู่ ให้คัดลอก flume-env.sh.เทมเพลต และเปลี่ยนชื่อเป็น flume-env.sh

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

โหลดข้อมูลจาก Twitter โดยใช้ Flume

การสร้างแอปพลิเคชัน Twitter

ขั้นตอน 1) สร้างแอปพลิเคชัน Twitter โดยลงชื่อเข้าใช้ https://developer.twitter.com/

การสร้างแอปพลิเคชัน Twitter

การสร้างแอปพลิเคชัน Twitter

ขั้นตอน 2) ไปที่ 'ใบสมัครของฉัน' (ตัวเลือกนี้จะดรอปดาวน์เมื่อ 'ไข่' คลิกปุ่มมุมขวาบน)

การสร้างแอปพลิเคชัน Twitter

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

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

การสร้างแอปพลิเคชัน Twitter

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

การสร้างแอปพลิเคชัน Twitter

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

การสร้างแอปพลิเคชัน Twitter

การสร้างแอปพลิเคชัน Twitter

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

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

การสร้างแอปพลิเคชัน Twitter

ขั้นตอน 9) แก้ไข 'flume.conf' ใช้สิ่งเหล่านี้ การตั้งค่า OAuth- ขั้นตอนในการปรับเปลี่ยน 'flume.conf' ได้รับด้านล่าง

การสร้างแอปพลิเคชัน Twitter

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

ขั้นตอน 2) ตั้งยัง TwitterAgent.sinks.HDFS.hdfs.path ดังต่อไปนี้,

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

แก้ไขไฟล์ 'Flume.conf'

เพื่อทราบ , รวมถึง , ดูค่าของพารามิเตอร์ 'fs.defaultFS' ที่ตั้งอยู่ใน $HADOOP_HOME/etc/hadoop/core-site.xml

แก้ไขไฟล์ 'Flume.conf'

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

การสตรีมข้อมูล Twitter โดยใช้ Flume

ขั้นตอน 2) เริ่ม Hadoop

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

ขั้นตอน 3) ไฟล์ JAR สองไฟล์จาก Flume tarball เข้ากันไม่ได้กับ Hadoop 2.2.0 ดังนั้น เราจะต้องทำตามขั้นตอนด้านล่างในตัวอย่าง Apache Flume นี้เพื่อทำให้ Flume เข้ากันได้กับ Hadoop 2.2.0

a. ย้าย โปรโตบุฟ-จาวา-2.4.1.jar จาก - /lib'

ไปที่ - /lib'

ซีดี /lib

sudo mv protobuf-java-2.4.1.jar ~/

การสตรีมข้อมูล Twitter โดยใช้ Flume

b. ค้นหาไฟล์ JAR 'guava' ดังต่อไปนี้

find . -name "guava*"

การสตรีมข้อมูล Twitter โดยใช้ Flume

ย้าย ฝรั่ง-10.0.1.jar จาก - /lib'

sudo mv guava-10.0.1.jar ~/

การสตรีมข้อมูล Twitter โดยใช้ Flume

c. ดาวน์โหลด ฝรั่ง-17.0.jar รถในตำนานจากเกม http://mvnrepository.com/artifact/com.google.guava/guava/17.0

การสตรีมข้อมูล Twitter โดยใช้ Flume

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

ขั้นตอน 4) ไปที่ - /บิน' และเริ่ม Flume เป็น-

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

การสตรีมข้อมูล Twitter โดยใช้ Flume

หน้าต่างพรอมต์คำสั่งที่ flume กำลังดึงข้อมูลทวีต -

การสตรีมข้อมูล Twitter โดยใช้ Flume

จากข้อความหน้าต่างคำสั่ง เราจะเห็นว่าเอาต์พุตถูกเขียนลงไป /user/hduser/flume/ทวีต/ ไดเรกทอรี

ตอนนี้ เปิดไดเร็กทอรีนี้โดยใช้เว็บเบราว์เซอร์

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

/flume/ทวีต/

การสตรีมข้อมูล Twitter โดยใช้ Flume