บทช่วยสอน Apache Oozie: คืออะไร เวิร์กโฟลว์ ตัวอย่าง – Hadoop

OOZIE คืออะไร?

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

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

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

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

อูซี่

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

OOZIE ทำงานอย่างไร?

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

ขั้นตอนการทำงานของ Oozie ประกอบด้วย โหนดการกระทำ และ โหนดควบคุมการไหล.

An โหนดการกระทำ แสดงถึงงานเวิร์กโฟลว์ เช่น การย้ายไฟล์ไปยัง HDFS การเรียกใช้ MapReduce, Pig หรือ รัง งานนำเข้าข้อมูลโดยใช้ Sqoop หรือการรันเชลล์สคริปต์ของโปรแกรมที่เขียน Java.

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

เริ่มโหนด, โหนดสิ้นสุดและ โหนดข้อผิดพลาด อยู่ในหมวดหมู่ของโหนดนี้

เริ่มโหนด กำหนดจุดเริ่มต้นของงานเวิร์กโฟลว์

โหนดสิ้นสุด ส่งสัญญาณสิ้นสุดงาน

โหนดข้อผิดพลาด กำหนดการเกิดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องที่จะพิมพ์

เมื่อสิ้นสุดการดำเนินการเวิร์กโฟลว์ Oozie จะใช้การโทรกลับ HTTP เพื่ออัปเดตไคลเอ็นต์ด้วยสถานะเวิร์กโฟลว์ การเข้าหรือออกจากโหนดการกระทำอาจทำให้เกิดการโทรกลับ

ตัวอย่างไดอะแกรมเวิร์กโฟลว์

ตัวอย่างไดอะแกรมเวิร์กโฟลว์

จัดทำแพ็กเกจและการปรับใช้แอปพลิเคชันเวิร์กโฟลว์ Oozie

แอปพลิเคชันเวิร์กโฟลว์ประกอบด้วยคำจำกัดความของเวิร์กโฟลว์และทรัพยากรที่เกี่ยวข้องทั้งหมด เช่น ไฟล์ Jar ของ MapReduce สคริปต์ Pig เป็นต้น แอปพลิเคชันต้องปฏิบัติตามโครงสร้างไดเร็กทอรีที่เรียบง่ายและปรับใช้ เอชดีเอฟเอส เพื่อให้ Oozie สามารถเข้าถึงได้

โครงสร้างไดเร็กทอรีตัวอย่างแสดงอยู่ด้านล่าง -

<name of workflow>/</name>
??? 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. รับสถานะของงานเวิร์กโฟลว์-

สถานะของงานเวิร์กโฟลว์สามารถดูได้โดยใช้คำสั่งย่อย 'งาน' พร้อมด้วยอ็อพชัน '-info' และการระบุ id งานหลัง '-info'

e.g., % oozie job -info <job id>

เอาต์พุตแสดงสถานะเป็น RUNNING, KILLED หรือ SUCCEEDED

4. ผลลัพธ์ของการดำเนินการเวิร์กโฟลว์ที่ประสบความสำเร็จสามารถดูได้โดยใช้คำสั่ง Hadoop เช่น

% hadoop fs -cat <location of result>

ทำไมต้องใช้ Oozie?

วัตถุประสงค์หลักของการใช้ Oozie คือเพื่อจัดการงานประเภทต่างๆ ที่กำลังประมวลผลในระบบ Hadoop

การขึ้นต่อกันระหว่างงานจะถูกระบุโดยผู้ใช้ในรูปแบบของ Directed Acyclic Graphs Oozie ใช้ข้อมูลนี้และดูแลการดำเนินการตามลำดับที่ถูกต้องตามที่ระบุไว้ในเวิร์กโฟลว์ วิธีนี้จะช่วยประหยัดเวลาของผู้ใช้ในการจัดการเวิร์กโฟลว์ทั้งหมด นอกจากนี้ Oozie ยังมีข้อกำหนดในการระบุความถี่ในการปฏิบัติงานโดยเฉพาะ

คุณสมบัติของ Oozie

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