Apache Atlas ฉบับ 101

Pongthep Vijite
DAMAGeek
Published in
2 min readMar 29, 2020

หมายเหตุ ผู้อ่านสามารถดู table of contents ของ Data Engineering from Noob to Newbie ได้ที่ http://bit.ly/2P7isEw

ในบทความที่แล้วเราได้ทำได้ติดตั้งและ runthrough นิดหน่อยไปแล้วกับ atlas สำหรับในบทความนี้จะเป็นฉบับเบื้องต้นอย่างเป็นทางการของเรากันนะครับ

Apache Atlas เป็น opensource ตัวนึงที่อยู่ในโครงการ Apache เป็นเครื่องมือที่ใช้สำหรับ data governance โดยส่วนตัวที่เคยค้นหา tools สำหรับงานด้านนี้(ณ ปี 2019) เจอว่า atlas เป็นเพียง tool เดียวที่ฟรีและมี features หลักๆครบตามต้องการ โดยตอนนั้นผมเน้นเรื่องการทำ data lineage ซึ่งเป็นส่วนที่จะช่วยให้เรามองเห็นได้ว่า data ที่เรานำเข้าระบบผ่านกระบวนการใดบ้างกว่าจะพร้อมนำไปใช้งาน รวมทั้งมี feature การค้นหา data และจัดกลุ่ม data อย่างดี

Architecture

Atlas High Level Architecture (อ้างอิง https://atlas.apache.org/#/Architecture)

เราจะมาดูโครงสร้างคราวๆของ atlas กันนะครับเริ่มจากล่างขึ้นไปบน โดยล่างสุดจะเป็นชั้นของ persistence layer ทำหน้าที่เก็บข้อมูล 2 ชนิดนั้นคือ metadata และ index ใช้สำหรับการค้นหาข้อมูลใน atlas

ตัว metadata store เราสามารถทำการเลือกได้ว่าจะเก็บใน Apache HBase หรือว่า Apache Cassandra แต่ะตัว index store จากข้อมูลที่ผมมีเหมือนว่าจะสามารถเลือกได้แค่ Apache Solr เจ้าเดียวเท่านั้น

ชั้นต่อมาจะเป็น core layer ของ atlas ประกอบไปด้วย 3 ส่วนนั้นก็คือ

  1. graph engine ใช้สำหรับเชื่อมโยงข้อมูลต่างๆใน atlas
  2. type system เป็นตัวกำหนดประเภทของข้อมูลที่จัดเก็บอยู่ใน atlas
  3. ingest/export ซึ่งเป็นส่วนในการนำ metadata เข้าและออกจาก atlas

ใน layer ถัดมาจะเป็น integration layer ซึ่งเป็นส่วนที่เป็นช่องทางที่เราสามารถติดต่อกับ atlas ได้ โดยจะมีอยู่ด้วยกัน 2 ช่องทางนั้นคือ

  1. rest api เป็นช่องทาง default ของ atlas ในการ insert / update /delete metadata ต่างๆใน atlas
  2. kafka messaging นอกจากจะใช้เป็นช่องทางการ insert / update /delete ข้อมูลเช่นเดียวกับ rest api แล้วยังสามารถเป็นช่องทางการ subscribe metadata ที่เปลี่ยนภายใน atlas ออกไปยังภายนอกได้แบบ realtime อีกด้วย

ใน layer สุดท้ายจะมีอยู่ด้วยกัน 2 ส่วนใหญ่ๆคือ

  1. metadata source ซึ่งจะเป็นส่วนของเครื่องมือในการนำ metadata จาก sources ต่างๆเข้า atlas แบบ auto ผ่านทาง hook api ประมาณว่าถ้าเราต้องการนำ metadata ที่เก็บไว้ใน sources เหล่านี้เข้าสู่ atlas สามารถทำได้ผ่าน configuration โดยไม่ต้องเรียกใช้ integration layer เอง ตัวอย่างเช่นเมื่อเราเชื่อม atlas เข้ากับ hive และเมื่อมีการเปลี่ยนข้อมูลที่เกี่ยวข้องกับ meta ใน hive ก็จะถูก ingest เข้า atlas เองเลย
  2. apps เป็นส่วนของ application ที่ถูกสร้างขึ้นมาเพื่อติดต่อกับตัว atlas เสมือนเป็น gui ที่ใช้ดูข้อมูลในรูปแบบต่างๆของ atlas โดยที่เราได้เห็นในบทความที่แล้วตัวนึงนั้นก็คือ admin ui แต่ในส่วนของ tag based policies ซึ่งตามข้อมูลใน web site บอกไว้ว่าทำงานร่วมกับ Apache Ranger อันนี้ขอละคำอธิบายไว้ก่อนนะครับ เพราะโดยส่วนตัวเองก็ไม่เคยมีโอกาสใช้งาน Apache Ranger เลยจึงอาจจะมองไม่เห็นภาพเมื่อนำมาทำงานร่วมกับ atlas

Type System

ใน apache atlas ตัวข้อมูล metadata จะถูกจัดเก็บอยู่ในรูปแบบของ entity object ซึ่งในการสร้าง entity เราจะต้องระบุว่า entity นี้เป็น metadata ชนิดใดซึ่งจะเรียกว่า type หรือ entity definition ถ้ามองในแบบของ object-oriented programming type จะเป็น class ส่วน entity จะเป็น object ของ class ซึ่งหน้าที่ class ก็จะกำหนด attribute ต่างๆ ตัวอย่างเช่นถ้าเป็น metadata ของ rdbms database ตัว type ก็จะกำหนดว่า metadata นี้จะต้องมี attribute ที่ชื่อว่า host เพื่อเก็บว่า database ตัวนี้ถูก host ไว้ที่ไหน หลักจากสร้าง type ของ rdbms database เรียบร้อยเราก็จะสร้าง entity ของ rdbms database จาก type ดังกล่าว

โดย default ตัว atlas จะมี type ตั้งต้นมาให้เราแล้วจำนวนนึงไม่ว่าจะเป็นสำหรับ rdbms, kafka, hive, sqoop, storm และ falcon ซึ่งผู้อ่านอาจจะสังเกตได้ว่า จำนวนของ type ที่ถูกสร้างไว้ให้ตรงกับจำนวนของ metadata sources ที่ atlas รองรับ ณ ตอนนี้(อ้างอิงจาก version 2.0.0) หมายความว่า ถ้าในอนาคต atlas มีการรองรับการเชื่อมต่อกับ source ประเภทอื่น type สำหรับ source ประเภทนั้นก็จะถูกสร้างเป็น default ภายใน atlas ด้วย

ถึงตรงนี้ผู้อ่านหลายท่านอาจจะกำลังคิดว่าแล้วถ้าเรามีข้อมูล metadata ที่อยู่ในรูปแบบอื่นนอกจาก default ที่เราอยากจะนำเข้า atlas เพื่อเติมเต็ม flow ของ data lineage เราจะทำยังไง คำตอบคือเราสามารถสร้าง type ใส่ใน atlas เองได้เลยครับมีข้อแม้เดียวนั้นก็คือ type ใหม่ที่เราจะทำการสร้างต้องเป็น subtype ของ type ที่ atlas ไว้ให้เท่านั้น โดยใน atlas จะมี root type หรือ super type ที่ใช้งานบ่อยๆอยู่ด้วยกัน 3 ตัวดังนี้

  1. Infrastructure ใช้ในการสร้าง entity สำหรับเก็บข้อมูลพวก cluster, host หรืออื่นๆ อย่างเช่น rdbms_instance ก็อยู่ใน type นี้ไว้เก็บข้อมูลว่า rdbms ของเราถูก host ไว้ที่ไหน
  2. DataSet เป็น type ที่ถูกใช้งานมากที่สุดเพราะมีไว้สำหรับงานด้านการเก็บ medata โดยเฉพาะ อย่างเช่น rdbms_table ซึ่งมีไว้เพื่อเก็บข้อมูล metadata ของ table ใน rdbms
  3. Process เป็น type สำหรับงานด้วยประมวลผลข้อมูล โดยมักจะถูกใช้เมื่อมีการ transformข้อมูล อย่างเช่นถ้าเรามี python script ที่ดึงข้อมูลจาก rdbms table นึงแล้วทำการ transform data นั้น จากนั้นก็จัดเก็บใน rdbms table นึง ตัว python script จะถูกสร้างเป็น entity ภายใน type Process

ในบทความต่อไปเราจะมาทำการสร้าง type และ entity แบบ step by step ผานทาง web api กันนะครับ

สุดท้ายนี้ถ้าท่านใดมีข้อสงสัยหรือคำชี้แนะใดๆสามารถฝากข้อความได้ที่ https://www.facebook.com/coeffest/ นะครับ ขอบคุณมากครับที่ติดตาม

อ้างอิง

https://atlas.apache.org/#/Architecture

https://atlas.apache.org/#/TypeSystem

--

--