Upgrading DataHub on K8s

Watcharee Skr
CJ Express Tech (TILDI)
4 min readFeb 15, 2023
**Table of contents**

- What is DataHub and Why we need to upgrade
- steps to upgrade datahub
- Upgrade datahub server
- Upgrade DataHub for metadata ingestion
- Upgrade DataHub on Airflow for Data Lineage
- Testing DataHub new version
- References

What is DataHub and Why we need to upgrade

DataHub คือ Data catalog ที่ช่วยให้องค์กรสามารถทำ end-to-end data discovery, data observability และ data governance ได้ ในบทความนี้ไม่ได้อธิบายวิธีการ deploy หรือเริ่มต้นใช้งาน DataHub แต่จะมาเล่าวิธีการอัพเกรดเวอร์ชั่นของ DataHub นี้ค่ะ

ทำไมต้องอัพเกรด DataHub

คำตอบคือ DataHub ออก release ใหม่มาเร็วมาก และแต่ละครั้งจะมี feature ใหม่ ๆ ที่ช่วยให้การค้นหาข้อมูลภายในองค์กรง่ายขึ้นค่ะ เช่น มี in-app product tour, column lineage เป็นต้นค่ะ ยังไงสักวันหนึ่งเราคงไม่สามารถแช่อยู่ที่เวอร์ชั่นเดิมได้ตลอดไป เรียกได้ว่าการอัพเกรดเวอร์ชั่นก็เหมือนสัจธรรมโลกก็ว่าได้ค่ะ

Steps to upgrade DataHub on K8s

1. Upgrade DataHub server

เริ่มต้นก็คือการอัพเกรดตัว DatHub กันเลย วิธีการอัพเกรด DataHub มีด้วยกันหลายวิธีสามารถเข้าไปดูได้ที่ No Code Upgrade (In-Place Migration Guide) แต่เนื่องจากว่าเรา deploy ของไว้บน GKE ดังนั้นเราจะอัพเกรดกันด้วย helm chart ค่ะ

ก่อนอื่นเราต้องมั่นใจก่อนว่าเราอยู่ถูก cluster นะคะ โดยการ run command ตามด้านล่างนี้

kubectl config get-contexts
kubectl config use-context <cluster-name>

ต่อมาเราจะต้องเพิ่ม helm repo ก่อนถ้าใช้ DataHub helm ครั้งแรก

helm repo add datahub <https://helm.datahubproject.io/>

สำหรับคนที่มี helm repo อยู่แล้วอย่าลืมอัพเดต repo เป็น version ล่าสุด

helm repo update datahub

หลังจากนั้น เราก็จะสามารถ run command ด้านล่างนี้เพื่ออัพเกรดได้เลย โดยที่ command ด้านล่างนี้จะเป็นการอัพเกรดตาม default values ของ helm chart

helm upgrade --install datahub datahub/datahub -n datahub

แล้วถ้าเราต้องการอัพเดตไปเวอร์ชั่นอื่นละ จะทำยังไง คำตอบคือ เราสามารถดาวน์โหลดไฟล์ค่า default values จาก datahub helm chart มาแล้วแก้ค่าให้เป็นเวอร์ชั่นที่เราต้องการได้เลย สามารถเช็คเวอร์ชั่นของ DataHub ได้ที่นี่ ซึ่งครั้งนี้เราจะอัพเกรดเป็น v0.9.6.1 กันค่ะ

default value helm chart
datahub-values.yaml

แล้วเรา run command นี้ในการอัพเกรดแทน

helm upgrade --install datahub datahub/datahub -n datahub -f <<path-to-values-file>> --debug

แล้วเราก็นั่งรอให้ helm chart อัพเกรดให้เราค่ะ แล้วหลังจากนั้นเมื่ออัพเกรดเสร็จทุก pod จะมี datahub-upgrade-job มา migrate ข้อมูลให้เราอีกด้วย พอเจ้า datahub-upgrade-job ทำงานเสร็จเรียบร้อย ทีนี้เรียบร้อย จบ…รึเปล่า? ไม่ค่ะ ไม่ง่ายขนาดนั้น

2. Upgrade DataHub for metadata ingestion

เนื่องจากเราใช้ DataHub ทั้ง Data Discocery, Data Catalog, และ Data Lineage ดังนั้นเราต้องอัพเกรดเวอร์ชั่นของ library acryl-datahub ที่ใช้ในการ ingest metadata ด้วย ถ้าปกติใช้ manual command line ก็สามารถอัพเกรดง่าย ๆ ด้วยคำสั่ง

pip install `acryl-datahub[<plugins>]==<version ที่เราจะอัพเกรด>`
e.g.
acryl-datahub[bigquery,datahub-rest]==0.9.6.1

คำถามคือแล้วเราจำเป็นต้องอัพเกรดตัวนี้ตามหรือไม่

คำตอบคือจำเป็นค่ะ ถึงแม้ว่าจะถ้าไม่อัพเกรดก็ยังทำงานได้อยู่ แต่ก็เหมือนใช้งานแบบไม่มีการอัพเกรด DataHub ใด ๆ ค่ะ ดังนั้นถ้าเราอยากจะแก้บัคหรือใช้ฟีเจอร์ในเวอร์ชั่นใหม่ ควรจะอัพเกรดตามให้ server version และ CLI version เป็นเวอร์ชั่นเดียวกันนะคะ (ref: DataHub CLI)

3. Upgrade DataHub on Airflow for Data Lineage

ส่วนสุดท้ายที่เราต้องอัพเกรดกันค่ะ นั่นก็คือ library acryl-datahub-airflow-plugin นั่นเอง ซึ่งตัวนี้แหละคือส่วนสำคัญในการทำ Airflow Integration ทำให้ Data Lineage ของเราไปโผล่บน DataHub ได้ค่ะ

สิ่งที่เราต้องทำก็คืออัพเกรดเวอร์ชั่นของ library นี้ใน Airflow ของเราแล้ว redeploy บน GKE ค่ะ (Airflow เราก็ติดตั้งบน Kubernetes ค่ะ)

acryl-datahub-airflow-plugin==<version ที่เราจะอัพเกรด>

เสร็จเรียบร้อยกับการอัพเกรดค่ะ แล้วทีนี้เราจะแน่ใจได้ยังไงว่าที่เราอัพเกรดไปนั้นใช้งานได้ ดังนั้นเราจะมาแนะนำวิธีการทดสอบ 2 วิธีกันค่ะ

Testing DataHub new version

ส่วนที่เราต้องทดสอบจะมีด้วยกัน 2 ส่วนค่ะ

  1. metadata ingestion หรือก็คือ ข้อมูลทั้งหลายบน BigQuery หรือ source อื่น ๆ เช่น ชื่อ column, table description, column description จะถูก ingest เข้ามาบน DataHub
  2. Data Lineage จะต้องขึ้นบน DataHub

metadata testing

เราสามารถทดสอบได้ง่าย ๆ ค่ะ โดยการทดลองเขียนไฟล์ recipe.yaml ขึ้นมาเพื่อทดสอบเลยว่าสามารถ ingest metadata ได้หรือไม่ ขอแนะนำว่าให้ทดลองทุกรูปแบบค่ะ ในกรณีนี้เราใช้ BigQuery เป็น source หลัก ดังนั้นเราจะสร้าง dataset ที่ชื่อว่า datahub_testing ที่มีทั้ง external table, native table และ view แล้วลองใส่ description ลงไปในแต่ละ table เพื่อทดสอบการ ingest ค่ะ โดยข้อมูลที่เอามาใส่เป็น open data ชื่อว่า Index Villaris, 1680 ค่ะ

เมื่อ ingest เรียบร้อยเราจะต้องเห็น Dataset ขึ้นบน UI ของ DataHub

และเมื่อเข้าไปเช็คแต่ละ Dataset จะต้องเห็นทั้งชื่อ column และ column description แบบนี้ค่ะ

ถ้าขึ้นครบหมดแสดงว่า metadata ingest ผ่าน ไม่มีปัญหาค่ะ ✅

Lineage testing

อีกหนึ่งสิ่งที่สำคัญเลยก็คือเราต้องทดสอบว่าหลังอัพเกรดแล้วเมื่อ dag เรา run จะทำให้ lineage โผล่บน DataHub ค่ะ

ก็ง่าย ๆ ทดลองรัน dag ใหม่ ถ้ามี Data Lineage ขึ้นก็แปลว่าใช้งานได้แค่นี้?

เหมือนจะง่ายแต่ไม่ง่ายค่ะ เหตุผลสำคัญเหมือนกับ metadata เลยก็คือถ้าบน DataHub มี Lineage อยู่ก่อนแล้ว แต่เราใส่ inlets, outlets ผิดวิธี หรือมีเหตุการณ์อื่น ๆ ที่ทำให้ DataHub ส่ง lineage จาก Airflow ไปไม่ได้ ถึงบน Airflow จะขึ้น log แบบนี้ แต่ในหน้า DataHub UI เราจะเห็นเป็น lineage เดิมที่เราเคยมีอยู่เหมือนเดิม ดังนั้นต้องมั่นใจว่าบน DataHub ของเรา DataJob กับ Dataset ที่เกี่ยวข้องกับ dag ที่เราจะ test ไม่เคยมีอยู่หรือ hard delete ทิ้งจนหมดแล้ว ไม่งั้นเราจะโดนหลอกได้ค่ะ

example log error

เมื่อเราจัดการเคลียร์ environment ของเราเรียบร้อยแล้ว ถ้าเราใส่ lineage ผิดวิธีสิ่งที่จะขึ้นให้เราบน DataHub จะขึ้นแบบนี้ค่ะ คือเราจะได้เฉพาะ task สุดท้ายของ dag มา หรือต่อให้ขึ้นทุก task ตัว lineage จะไม่ต่อกันค่ะ

example task on DataHub UI when implements wrong format inlets and outlets
actual pipeline lineage

ทีนี้เรารู้แล้วว่าปัญหาเกิดจากการที่เราใส่ inlets, outlets ใน dag เป็นรูปแบบเก่า เมื่อเปลี่ยนเป็นรูปแบบใหม่ทำให้ได้ lineage ที่ต้องการค่ะ (สามารถดูตัวอย่าง dag ได้ที่นี่ค่ะ)

เพียงเท่านี้การอัพเกรด DataHub ก็เสร็จสิ้นอย่างสมบูรณ์ค่ะ

References

--

--