บทช่วยสอน Apache Oozie: แผนภาพเวิร์กโฟลว์, ตัวกำหนดตารางเวลา

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

Apache Oozie เป็นตัวกำหนดตารางเวลาเวิร์กโฟลว์สำหรับ Hadoop ที่รันงานที่ขึ้นต่อกันในรูปแบบกราฟแบบไม่มีวงจร (Directed Acyclic Graph) โดยผสมผสานกลไกเวิร์กโฟลว์สำหรับการดำเนินการ MapReduce, Pig และ Hive เข้ากับกลไกการประสานงานที่ขับเคลื่อนด้วยเวลาและความพร้อมใช้งานของข้อมูล

  • 🔘 เครื่องยนต์สองเครื่อง: เอนจินเวิร์กโฟลว์จะรันกราฟงานของ Hadoop ในขณะที่เอนจินตัวประสานงานจะเรียกใช้งานตามกำหนดเวลาหรือเมื่อมีข้อมูลเข้ามา
  • ☑️ ประเภทโหนด: โหนดแอ็กชันทำหน้าที่ดำเนินการ ส่วนโหนดควบคุม เช่น การตัดสินใจ การแยก และการรวม จะกำหนดทิศทางของเส้นทาง
  • ✅ ลักษณะงาน 3 ประเภท: กระบวนการทำงาน การประสานงาน และการรวมกลุ่มงานต่างๆ จะกลายเป็นไปป์ไลน์ข้อมูลที่สมบูรณ์แบบ
  • 🧪 การใช้งาน: แอปพลิเคชันเวิร์กโฟลว์คือไดเร็กทอรีที่เก็บไฟล์ workflow.xml และโฟลเดอร์ lib ซึ่งคัดลอกไปยัง HDFS
  • 🛠️ บรรทัดคำสั่ง: ตั้งค่า OOZIE_URLส่งงานด้วยคำสั่ง `oozie job -run` จากนั้นตรวจสอบข้อมูลงานด้วยคำสั่ง `oozie job -info` จนกว่าจะแสดงข้อความว่า `SUCCEEDED`
  • ⚠️ สถานะโครงการ: Oozie ถูกปลดระวางและเก็บไว้ใน Apache Attic ในปี 2025 ดังนั้นไปป์ไลน์ใหม่ๆ ส่วนใหญ่จึงใช้ Apache Airflow แทน

บทช่วยสอน Apache Oozie ครอบคลุมเรื่องเวิร์กโฟลว์ งานประสานงาน และการจัดตารางเวลาใน Hadoop

Apache Oozie คืออะไร?

Apache Oozie เป็นตัวกำหนดตารางเวลาเวิร์กโฟลว์สำหรับ Hadoopระบบนี้เป็นระบบที่จัดการเวิร์กโฟลว์ของงานที่ขึ้นต่อกัน โดยผู้ใช้สามารถสร้างกราฟแบบไม่มีวงจร (Directed Acyclic Graph) ของเวิร์กโฟลว์ ซึ่งสามารถรันได้ทั้งแบบขนานและแบบเรียงลำดับใน Hadoop

ประกอบด้วยสองส่วน:

  • เครื่องมือจัดการเวิร์กโฟลว์: หน้าที่ของเอนจินเวิร์กโฟลว์คือการจัดเก็บและเรียกใช้เวิร์กโฟลว์ที่ประกอบด้วยงาน Hadoop เช่น แผนที่ลด, หมู, รัง.
  • กลไกประสานงาน: ระบบจะดำเนินการงานเวิร์กโฟลว์ตามกำหนดการที่ตั้งไว้ล่วงหน้าและตามความพร้อมของข้อมูล

Oozie มีความสามารถในการปรับขนาดและจัดการการดำเนินการเวิร์กโฟลว์หลายพันรายการ (แต่ละรายการประกอบด้วยงานหลายสิบงาน) ในคลัสเตอร์ Hadoop ได้อย่างทันท่วงที แผนภาพด้านล่างแสดงตำแหน่งของตัวกำหนดตารางเวลาเมื่อเทียบกับคลัสเตอร์และงานที่มันควบคุม

Apache 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

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

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

ไม่ครับ ซอฟต์แวร์ Apache Foundation Oozie ถูกปลดระวางในเดือนกุมภาพันธ์ 2025 และย้ายไปยัง Attic เสร็จสมบูรณ์ในเดือนเมษายน 2025 เวอร์ชันสุดท้ายคือ 5.2.1 ซึ่งเผยแพร่ในเดือนกุมภาพันธ์ 2021 และคลังเก็บข้อมูลเป็นแบบอ่านอย่างเดียว แต่เอกสารประกอบยังคงออนไลน์อยู่

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

Copilot สร้างไฟล์ workflow.xml ที่ดูสมเหตุสมผลได้อย่างรวดเร็ว แต่บ่อยครั้งที่มันสร้างชื่อองค์ประกอบหรือเวอร์ชันสคีมาที่ไม่ถูกต้อง ตรวจสอบ XML ที่สร้างขึ้นกับสคีมาเวอร์ชัน 5.2.1 และทดลองใช้งานบนคลัสเตอร์ทดสอบก่อน

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

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

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

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

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

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