บทช่วยสอน 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 ช่องฟลูม รวมถึง อ่างล้างจานฟลูม– เหตุการณ์ใดแพร่กระจายหลังจากเริ่มต้นที่แหล่งภายนอก

- ในแผนภาพด้านบน เหตุการณ์ที่สร้างโดยแหล่งที่มาภายนอก (WebServer) จะถูกใช้โดยแหล่งข้อมูล Flume แหล่งที่มาภายนอกส่งเหตุการณ์ไปยังแหล่งที่มา Flume ในรูปแบบที่แหล่งที่มาเป้าหมายรู้จัก
- Flume Source รับเหตุการณ์และจัดเก็บไว้ในช่องทางเดียวหรือหลายช่อง ช่องทางทำหน้าที่เป็นร้านค้าที่เก็บกิจกรรมไว้จนกว่าอ่างล้างจานจะหมดไป ช่องนี้อาจใช้ระบบไฟล์ในเครื่องเพื่อจัดเก็บเหตุการณ์เหล่านี้
- Flume sink จะลบเหตุการณ์ออกจากช่องและจัดเก็บไว้ในที่เก็บข้อมูลภายนอก เช่น HDFS อาจมีสารระบายหลายตัว ในกรณีนี้ flume sink ส่งต่อเหตุการณ์ไปยังแหล่งที่มาของ flume ของสาร flume ถัดไปในโฟลว์
คุณสมบัติที่สำคัญบางประการของ FLUME
- Flume มีการออกแบบที่ยืดหยุ่นตามกระแสข้อมูลแบบสตรีม ทนทานต่อข้อผิดพลาดและทนทานด้วยกลไกการเฟลโอเวอร์และการกู้คืนที่หลากหลาย Flume Big data มีระดับความน่าเชื่อถือที่แตกต่างกันซึ่งรวมถึง 'การส่งมอบอย่างดีที่สุด' และ 'จัดส่งตั้งแต่ต้นทางถึงปลายทาง'. การส่งมอบความพยายามอย่างดีที่สุด ไม่ยอมให้โหนด Flume ล้มเหลวในขณะที่ 'จัดส่งตั้งแต่ต้นทางถึงปลายทาง' โหมดรับประกันการส่งมอบแม้ในกรณีที่โหนดล้มเหลวหลายโหนด
- Flume นำข้อมูลระหว่างแหล่งที่มาและซิงก์ การรวบรวมข้อมูลนี้สามารถกำหนดเวลาหรือขับเคลื่อนด้วยเหตุการณ์ก็ได้ Flume มีกลไกประมวลผลคิวรีของตัวเอง ซึ่งทำให้ง่ายต่อการแปลงข้อมูลชุดใหม่แต่ละชุดก่อนที่จะย้ายไปยังซิงก์ที่ต้องการ
- เป็นไปได้ ฟลูมจมลง ประกอบด้วย เอชดีเอฟเอส รวมถึง เอชเบสFlume Hadoop ยังสามารถใช้เพื่อขนส่งข้อมูลเหตุการณ์ต่างๆ รวมไปถึงแต่ไม่จำกัดเพียงข้อมูลการรับส่งข้อมูลบนเครือข่าย ข้อมูลที่สร้างขึ้นจากเว็บไซต์โซเชียลมีเดีย และข้อความอีเมล
การตั้งค่า Flume ไลบรารี และซอร์สโค้ด
ก่อนที่เราจะเริ่มกระบวนการจริง ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง 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 ที่ดาวน์โหลดมาลงในไดเร็กทอรีที่คุณเลือกและแตกเนื้อหาโดยใช้คำสั่งต่อไปนี้
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
คำสั่งนี้จะสร้างไดเร็กทอรีใหม่ชื่อ 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
หลังจากคำสั่งนี้ให้สิทธิ์ 'อ่าน' บน 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/*"
ขั้นตอน 3) คอมไพล์ซอร์สโค้ดโดยใช้คำสั่ง-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
ขั้นตอน 4)สร้างขวดโหล
ขั้นแรกให้สร้าง รายการ.txt ไฟล์โดยใช้โปรแกรมแก้ไขข้อความที่คุณเลือกและเพิ่มบรรทัดด้านล่างในนั้น
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. ที่นี่ flume.mytwittersource.MyTwitterSourceForFlume เป็นชื่อของคลาสหลัก โปรดทราบว่าคุณต้องกดปุ่ม Enter ที่ท้ายบรรทัดนี้
ตอนนี้สร้าง JAR 'MyTwitterSourceForFlume.jar' เช่น-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
ขั้นตอน 5) คัดลอกกระปุกนี้ไปที่ /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
If flume-env.sh ไม่มีอยู่ ให้คัดลอก flume-env.sh.เทมเพลต และเปลี่ยนชื่อเป็น flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
การสร้างแอปพลิเคชัน Twitter
ขั้นตอน 1) สร้างแอปพลิเคชัน Twitter โดยลงชื่อเข้าใช้ https://developer.twitter.com/
ขั้นตอน 2) ไปที่ 'ใบสมัครของฉัน' (ตัวเลือกนี้จะดรอปดาวน์เมื่อ 'ไข่' คลิกปุ่มมุมขวาบน)
ขั้นตอน 3) สร้างแอปพลิเคชันใหม่โดยคลิก 'สร้างแอปใหม่'
ขั้นตอน 4) กรอกรายละเอียดการสมัครโดยระบุชื่อใบสมัคร คำอธิบาย และเว็บไซต์ คุณสามารถดูหมายเหตุที่ระบุไว้ใต้ช่องกรอกข้อมูลแต่ละช่องได้
ขั้นตอน 5) เลื่อนหน้าลงและยอมรับเงื่อนไขด้วยการทำเครื่องหมาย 'ใช่ฉันเห็นด้วย' และคลิกที่ปุ่ม'สร้างแอปพลิเคชัน Twitter ของคุณ'
ขั้นตอน 6) ในหน้าต่างของแอปพลิเคชันที่สร้างขึ้นใหม่ ให้ไปที่แท็บ 'คีย์ API' เลื่อนหน้าลงแล้วคลิกปุ่ม 'สร้างโทเค็นการเข้าถึงของฉัน'
ขั้นตอน 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 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 ~/
b. ค้นหาไฟล์ JAR 'guava' ดังต่อไปนี้
find . -name "guava*"
ย้าย ฝรั่ง-10.0.1.jar จาก - /lib'
sudo mv guava-10.0.1.jar ~/
c. ดาวน์โหลด ฝรั่ง-17.0.jar รถในตำนานจากเกม http://mvnrepository.com/artifact/com.google.guava/guava/17.0
ตอนนี้ให้คัดลอกไฟล์ jar ที่ดาวน์โหลดมานี้ไปที่ - /lib'
ขั้นตอน 4) ไปที่ - /บิน' และเริ่ม Flume เป็น-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
หน้าต่างพรอมต์คำสั่งที่ flume กำลังดึงข้อมูลทวีต -
จากข้อความหน้าต่างคำสั่ง เราจะเห็นว่าเอาต์พุตถูกเขียนลงไป /user/hduser/flume/ทวีต/ ไดเรกทอรี
ตอนนี้ เปิดไดเร็กทอรีนี้โดยใช้เว็บเบราว์เซอร์
ขั้นตอน 5) หากต้องการดูผลลัพธ์ของการโหลดข้อมูลโดยใช้เบราว์เซอร์ที่เปิดอยู่ http://localhost:50070/ และเรียกดูระบบไฟล์ จากนั้นไปที่ไดเร็กทอรีที่มีการโหลดข้อมูล นั่นคือ-
/flume/ทวีต/