บทช่วยสอน Apache Oozie: แผนภาพเวิร์กโฟลว์, ตัวกำหนดตารางเวลา
⚡ สรุปอย่างชาญฉลาด
Apache Oozie เป็นตัวกำหนดตารางเวลาเวิร์กโฟลว์สำหรับ Hadoop ที่รันงานที่ขึ้นต่อกันในรูปแบบกราฟแบบไม่มีวงจร (Directed Acyclic Graph) โดยผสมผสานกลไกเวิร์กโฟลว์สำหรับการดำเนินการ MapReduce, Pig และ Hive เข้ากับกลไกการประสานงานที่ขับเคลื่อนด้วยเวลาและความพร้อมใช้งานของข้อมูล
Apache Oozie คืออะไร?
Apache Oozie เป็นตัวกำหนดตารางเวลาเวิร์กโฟลว์สำหรับ Hadoopระบบนี้เป็นระบบที่จัดการเวิร์กโฟลว์ของงานที่ขึ้นต่อกัน โดยผู้ใช้สามารถสร้างกราฟแบบไม่มีวงจร (Directed Acyclic Graph) ของเวิร์กโฟลว์ ซึ่งสามารถรันได้ทั้งแบบขนานและแบบเรียงลำดับใน Hadoop
ประกอบด้วยสองส่วน:
- เครื่องมือจัดการเวิร์กโฟลว์: หน้าที่ของเอนจินเวิร์กโฟลว์คือการจัดเก็บและเรียกใช้เวิร์กโฟลว์ที่ประกอบด้วยงาน Hadoop เช่น แผนที่ลด, หมู, รัง.
- กลไกประสานงาน: ระบบจะดำเนินการงานเวิร์กโฟลว์ตามกำหนดการที่ตั้งไว้ล่วงหน้าและตามความพร้อมของข้อมูล
Oozie มีความสามารถในการปรับขนาดและจัดการการดำเนินการเวิร์กโฟลว์หลายพันรายการ (แต่ละรายการประกอบด้วยงานหลายสิบงาน) ในคลัสเตอร์ Hadoop ได้อย่างทันท่วงที แผนภาพด้านล่างแสดงตำแหน่งของตัวกำหนดตารางเวลาเมื่อเทียบกับคลัสเตอร์และงานที่มันควบคุม
Oozie มีความยืดหยุ่นสูงเช่นกัน สามารถเริ่ม หยุด ระงับ และเรียกใช้งานงานซ้ำได้อย่างง่ายดาย Oozie ช่วยให้การเรียกใช้งานเวิร์กโฟลว์ที่ล้มเหลวซ้ำทำได้ง่ายมาก เราจะเข้าใจได้ง่ายว่าการตามงานที่พลาดไปหรือล้มเหลวเนื่องจากเวลาหยุดทำงานหรือความผิดพลาดนั้นยากลำบากเพียงใด และยังสามารถข้ามโหนดที่ล้มเหลวเฉพาะเจาะจงได้อีกด้วย
สถานะโครงการ: Apache Oozie ถูกยกเลิกการใช้งานโดย Apache Software แล้ว Foundation ในเดือนกุมภาพันธ์ 2025 และการย้ายไปยัง อะปาเช่ แอทติก เสร็จสมบูรณ์ในเดือนเมษายน 2025 เวอร์ชันสุดท้ายยังคงเป็น 5.2.1 จากเดือนกุมภาพันธ์ 2021 และที่เก็บซอร์สโค้ดเป็นแบบอ่านอย่างเดียวแล้ว คลัสเตอร์ที่มีอยู่ยังคงใช้งานอยู่ ซึ่งเป็นเหตุผลว่าทำไมกลไกด้านล่างจึงควรทราบ แต่โดยปกติแล้วไปป์ไลน์ใหม่จะสร้างขึ้นบน Apache Airflow
Oozie ทำงานอย่างไร?
Oozie ทำงานในรูปแบบบริการภายในคลัสเตอร์ และไคลเอ็นต์จะส่งคำจำกัดความของเวิร์กโฟลว์เพื่อประมวลผลทันทีหรือในภายหลัง
เวิร์กโฟลว์ของ Oozie ประกอบด้วยโหนดการกระทำและโหนดควบคุมการไหล
โหนดการกระทำแสดงถึงงานในเวิร์กโฟลว์ เช่น การย้ายไฟล์เข้า เอชดีเอฟเอสการรัน MapReduce, Pig หรือ Hive job การนำเข้าข้อมูลโดยใช้ สควอชหรือการเรียกใช้สคริปต์เชลล์หรือโปรแกรมที่เขียนด้วยภาษาอื่น Java.
โหนดควบคุมการไหลของเวิร์กโฟลว์จะควบคุมการทำงานของเวิร์กโฟลว์ระหว่างการกระทำต่างๆ โดยอนุญาตให้ใช้โครงสร้างต่างๆ เช่น ตรรกะแบบมีเงื่อนไข ซึ่งสามารถดำเนินการตามสาขาต่างๆ ได้ขึ้นอยู่กับผลลัพธ์ของโหนดการกระทำก่อนหน้า
โหนดเริ่มต้น โหนดสิ้นสุด และโหนดข้อผิดพลาด จัดอยู่ในประเภทของโหนดนี้
- เริ่มโหนด กำหนดจุดเริ่มต้นของงานเวิร์กโฟลว์
- โหนดสิ้นสุด หมายความว่างานเสร็จสิ้นแล้ว
- โหนดข้อผิดพลาด ระบุตำแหน่งที่เกิดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องที่จะถูกพิมพ์ออกมา
เมื่อเวิร์กโฟลว์ทำงานเสร็จสิ้น Oozie จะใช้การเรียกกลับผ่าน HTTP เพื่ออัปเดตสถานะของเวิร์กโฟลว์ไปยังไคลเอ็นต์ การเข้าหรือออกจากโหนดการดำเนินการอาจทำให้เกิดการเรียกกลับนี้ได้เช่นกัน
โหนดควบคุมและประเภทการกระทำของ Oozie
นอกเหนือจากจุดเริ่มต้น จุดสิ้นสุด และข้อผิดพลาดแล้ว XML ของเวิร์กโฟลว์ยังรองรับคำศัพท์จำนวนเล็กน้อยของโหนดควบคุมที่กำหนดรูปร่างของกราฟ
- การตัดสินใจ: ประเมินนิพจน์และส่งเวิร์กโฟลว์ไปยังหนึ่งในหลายสาขา ซึ่งเทียบเท่ากับคำสั่ง switch
- ส้อม: แบ่งเส้นทางเพื่อให้การกระทำสองอย่างขึ้นไปทำงานพร้อมกัน
- เข้าร่วม: รอให้ทุกสาขาของส้อมที่ตรงกันเสร็จสิ้นก่อนจึงจะดำเนินการต่อ
- ฆ่า: ยุติกระบวนการทำงานทันทีและบันทึกข้อความแสดงข้อผิดพลาด
โหนดการดำเนินการจะครอบคลุมถึงตัวงานเอง และแต่ละโหนดจะมีองค์ประกอบ XML ของตัวเอง:
- map-reduce, pig, hive และ sqoop การดำเนินการเหล่านี้จะเริ่มต้นงาน Hadoop ที่เกี่ยวข้อง
- ชวา รันคลาสหลักบนคลัสเตอร์; เปลือกหอย และ SSH เรียกใช้สคริปต์
- fs ดำเนินการ HDFS housekeeping เช่น คำสั่ง move, delete, mkdir และ chmod
- อีเมล แจ้งให้ผู้รับทราบ และ เวิร์กโฟลว์ย่อย เรียกใช้งานแอปพลิเคชันเวิร์กโฟลว์อื่น
ตัวอย่างไดอะแกรมเวิร์กโฟลว์
แผนภาพด้านล่าง tracเป็นเวิร์กโฟลว์ขนาดเล็กที่เริ่มต้นจากโหนดเริ่มต้น ผ่านการดำเนินการ MapReduce ไปจนถึงโหนดปลายทางหรือเส้นทางข้อผิดพลาดเมื่อการดำเนินการล้มเหลว
ประเภทของงาน Oozie
Oozie อธิบายการทำงานในสามระดับ แต่ละระดับจะห่อหุ้มระดับที่อยู่ด้านล่าง ดังนั้นชุดรวมจึงควบคุมเวิร์กโฟลว์แต่ละรายการจำนวนมากในท้ายที่สุด
| ประเภทงาน | มันกำหนดอะไร | ถูกกระตุ้นโดย |
|---|---|---|
| Workflow | กราฟแบบไม่มีวงจรที่มีทิศทาง (Directed Acyclic Graph) ที่ประกอบด้วยโหนดการกระทำและโหนดควบคุม เขียนไว้ในไฟล์ workflow.xml | การส่งเอกสารด้วยตนเอง หรือผ่านผู้ประสานงาน |
| ผู้ประสาน | กำหนดตารางเวลาที่เกิดขึ้นซ้ำสำหรับเวิร์กโฟลว์หนึ่งรายการ โดยระบุเวลาเริ่มต้น เวลาสิ้นสุด และความถี่ | ความพร้อมใช้งานของเวลาและข้อมูลป้อนเข้า |
| กำ | ชุดแอปพลิเคชันตัวประสานงานที่ได้รับการจัดการร่วมกันในรูปแบบไปป์ไลน์ข้อมูลเดียว | มีการกำหนดเวลาเริ่มต้นสำหรับผู้ประสานงานทั้งหมด |
ความแตกต่างนี้มีความสำคัญในทางปฏิบัติ: เวิร์กโฟลว์ตอบคำถามว่า "อะไรทำงาน" ตัวประสานงานตอบคำถามว่า "เมื่อไหร่จะทำงาน" และบันเดิลตอบคำถามว่า "อะไรเริ่มต้นและสิ้นสุดพร้อมกัน"
การจัดแพ็กเกจและการติดตั้งใช้งานแอปพลิเคชันเวิร์กโฟลว์ Oozie
แอปพลิเคชันเวิร์กโฟลว์ประกอบด้วยคำจำกัดความของเวิร์กโฟลว์และทรัพยากรที่เกี่ยวข้องทั้งหมด เช่น ไฟล์ Jar ของ MapReduce สคริปต์ Pig เป็นต้น แอปพลิเคชันจำเป็นต้องมีโครงสร้างไดเร็กทอรีที่เรียบง่ายและถูกปรับใช้ไปยัง HDFS เพื่อให้ Oozie สามารถเข้าถึงได้
ตัวอย่างโครงสร้างไดเร็กทอรีแสดงอยู่ด้านล่าง:
<name of workflow>/
├── lib/
│ └── hadoop-examples.jar
└── workflow.xml
จำเป็นต้องเก็บไฟล์ workflow.xml (ไฟล์กำหนดนิยามเวิร์กโฟลว์) ไว้ในไดเร็กทอรีระดับบนสุด (ไดเร็กทอรีแม่ที่มีชื่อเวิร์กโฟลว์) ไดเร็กทอรี lib จะมีไฟล์ Jar ที่มีคลาส MapReduce แอปพลิเคชันเวิร์กโฟลว์ที่สอดคล้องกับโครงสร้างนี้สามารถสร้างได้ด้วยเครื่องมือสร้างใดๆ เช่น Ant หรือ Maven
จำเป็นต้องคัดลอกไฟล์ที่สร้างขึ้นดังกล่าวไปยัง HDFS โดยใช้คำสั่ง เช่น:
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
ขั้นตอนการเรียกใช้งานเวิร์กโฟลว์ Oozie
ในส่วนนี้ เราจะดูวิธีการรันงานเวิร์กโฟลว์ เพื่อดำเนินการนี้ เราจะใช้เครื่องมือบรรทัดคำสั่ง Oozie (โปรแกรมไคลเอนต์ที่สื่อสารกับเซิร์ฟเวอร์ Oozie)
1. ส่งออก OOZIE_URL ตัวแปรสภาพแวดล้อม ซึ่งจะบอกคำสั่ง oozie ว่าจะใช้เซิร์ฟเวอร์ Oozie ตัวใด (ในที่นี้เราใช้เซิร์ฟเวอร์ที่ทำงานอยู่บนเครื่องโลคอล):
% export OOZIE_URL="http://localhost:11000/oozie"
2. เรียกใช้งานเวิร์กโฟลว์โดยใช้คำสั่ง:
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
ตัวเลือก -config อ้างถึงท้องถิ่น Java ไฟล์คุณสมบัติที่มีคำจำกัดความสำหรับพารามิเตอร์ในไฟล์ XML เวิร์กโฟลว์ รวมถึง oozie.wf.application.path ซึ่งบอก Oozie ถึงตำแหน่งของแอปพลิเคชันเวิร์กโฟลว์ใน HDFS
เนื้อหาของไฟล์คุณสมบัติตัวอย่าง:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. ตรวจสอบสถานะของงานเวิร์กโฟลว์
สามารถดูสถานะของงานเวิร์กโฟลว์ได้โดยใช้คำสั่งย่อย 'job' ร่วมกับตัวเลือก '-info' โดยระบุรหัสงานต่อท้าย '-info'
e.g., % oozie job -info <job id>
ผลลัพธ์จะแสดงสถานะอย่างใดอย่างหนึ่ง ได้แก่ กำลังทำงาน (RUNNING), ถูกยกเลิก (KILLED) หรือ สำเร็จ (SUCCEEDED)
4. สามารถดูผลลัพธ์ของการดำเนินการเวิร์กโฟลว์ที่สำเร็จได้โดยใช้คำสั่ง Hadoop ดังนี้:
% hadoop fs -cat <location of result>
ทำไมต้องใช้ Oozie?
จุดประสงค์หลักของการใช้ Oozie คือการจัดการงานประเภทต่างๆ ที่ประมวลผลในระบบ Hadoop
ผู้ใช้กำหนดความสัมพันธ์ระหว่างงานต่างๆ ในรูปแบบของกราฟแบบไม่มีวงจร (Directed Acyclic Graph) Oozie จะประมวลผลข้อมูลนี้และจัดการการดำเนินการตามลำดับที่ถูกต้องตามที่ระบุไว้ในเวิร์กโฟลว์ ด้วยวิธีนี้ ผู้ใช้จึงประหยัดเวลาในการจัดการเวิร์กโฟลว์ทั้งหมด นอกจากนี้ Oozie ยังมีฟังก์ชันให้กำหนดความถี่ในการดำเนินการของงานแต่ละงานได้อีกด้วย
คุณสมบัติของ Oozie
- Oozie มี API สำหรับไคลเอ็นต์และอินเทอร์เฟซบรรทัดคำสั่ง ซึ่งสามารถใช้ในการเรียกใช้งาน ควบคุม และตรวจสอบงานต่างๆ ได้จากระยะไกล Java แอพลิเคชัน
- ด้วยการใช้ API บริการบนเว็บ ผู้ใช้สามารถควบคุมงานได้จากทุกที่
- Oozie มีฟังก์ชันในการเรียกใช้งานโปรแกรมที่กำหนดไว้ให้ทำงานเป็นระยะๆ
- Oozie มีฟังก์ชันส่งอีเมลแจ้งเตือนเมื่อการทำงานเสร็จสมบูรณ์
Oozie เทียบกับ Apache Airflow
เนื่องจาก Oozie ถูกยกเลิกการใช้งานไปแล้ว ทีมส่วนใหญ่ที่ประเมินตัวจัดตารางเวลาในปัจจุบันจึงเปรียบเทียบสิ่งที่พวกเขามีอยู่แล้วกับ Apache Airflow เครื่องมือทั้งสองแก้ปัญหาเดียวกันแต่ในทิศทางตรงกันข้าม
| แง่มุม | อะปาเช่ อูซี่ | อาปาเช่แอร์โฟลว์ |
|---|---|---|
| ภาษานิยาม | เวิร์กโฟลว์ที่เขียนในรูปแบบ XML | DAG เขียนเป็น Python รหัส |
| ขอบเขต | สร้างขึ้นโดยใช้การทำงานของ Hadoop เช่น MapReduce, Pig, Hive และ Sqoop | ใช้งานได้หลากหลายวัตถุประสงค์ โดยมีตัวดำเนินการสำหรับบริการคลาวด์ ฐานข้อมูล และคอนเทนเนอร์ |
| การกำหนด | งานประสานงานขึ้นอยู่กับเวลาและความพร้อมของข้อมูล | กำหนดช่วงเวลาและเซ็นเซอร์ที่รอตรวจสอบสภาวะภายนอก |
| สถานะโครงการ | ยุติการใช้งานและนำไปเก็บไว้ใน Apache Attic ในปี 2025; เวอร์ชันสุดท้าย 5.2.1 | โครงการระดับสูงสุดของ Apache ที่ได้รับการพัฒนาอย่างต่อเนื่อง |
Oozie ยังคงเป็นตัวเลือกที่ง่ายกว่าบนคลัสเตอร์ที่ใช้งานอยู่แล้ว เนื่องจากแอ็กชันต่างๆ จะจับคู่กับส่วนประกอบของ Hadoop แบบหนึ่งต่อหนึ่ง ในขณะที่ Airflow เป็นตัวเลือกที่เหมาะสมสำหรับสิ่งใหม่ๆ โดยเฉพาะอย่างยิ่งในกรณีที่ไปป์ไลน์ขยายออกไปนอก Hadoop


