เมื่อเราต้องการใช้ SQL บน Big Data Platform ตอนที่ 1

Softnix
Softnix
Published in
3 min readDec 10, 2017

หลังจากกลับมาจากงาน Strata Data Conference ที่สิงคโปร์ ซึ่งเป็นงานด้าน Big Data Technology ที่ใหญ่ที่สุดงานหนึ่ง จัดโดย Cloudera และ Oreilly โดยในงานมีพูดถึง Presto (http://Prestodb.io) กันหลาย Session มาก โดย Startup ชื่อดังระดับโลกหลายรายที่เรารู้จักดีก็ใช้อยู่ และต่างก็แชร์ประสบการณ์ใน Production ของตนเองให้ฟัง จึงทำให้ยิ่งเพิ่มความน่าสนใจอย่างมาก จึงอยากจะศึกษาเครื่องมือตัวนี้ให้ละเอียดและเตรียมนำไปคุยกับทีมงาน R&D ให้ดูอีกทีในระดับ Production

Architecture Softnix Data Platform

ต้องขอกล่าวถึงความต้องการก่อนครับ คือเรากำลังทำ Softnix Data Platform ซึ่งเป็น Big Data Analytic Platform (ถ้าไม่เหนื่อยฟังผมพูด เชิญรับฟังคลิปวิดีโอนี้ครับว่า Softnix Data Platform คืออะไร) และใน Roadmap เรื่องหนึ่งคือเราจะต้องรองรับการเชื่อมกับ Business Intelligence Tools ให้ได้ซึ่งมี Partner ของเราทำอยู่ ให้เข้ามาใช้ Big Data จาก Platform เรา ซึ่งนั้นก็หมายความว่า เราต้องรองรับ SQL Interface ได้ เดิมทีเรามองไว้ 3 ช่องทางคือ

  • Hive เรามีประสบการณ์ใช้ แต่มันก็ช้าพอสมควร และไม่รองรับบาง function ของ SQL
  • Drill อันนี้ตอนแรกตื่นเต้นมาก ติดตั้งก็ง่าย ทำงานแบบ Standalone ได้ รองรับ Data Source หลากหลายแหล่ง แต่ Drill ก็เพิ่งคลอดจากช่วง incubator project ยังน้องใหม่อยู่ (ในความคิดเรา) ซึ่งยังไม่กล้าใช้เท่าไหร่ แต่ก็ได้ฟังจากทีม Google Cloud Services (Google สิงคโปร์) บอกว่า Google เองได้ Support โครงการ Apache Drill และ Drill เปรียบได้กับ version opensource ของ Google BigQuery แสดงว่าอนาคตของ Drill อยู่ในการขับเคลือนของทีม Google ศึกษา Apache Drill ได้จากนี้ครับ https://wiki.apache.org/incubator/DrillProposal?action=AttachFile&do=get&target=Drill+slides.pdf
    ตัวอย่างการใช้งาน Apache Drill ที่เข้าใจง่าย
    http://dez.blanchfield.com.au/apache-drill-quick-dirty-5-min-guide-using-linkedin-contacts-csv-export/
  • SparkSQL อันนี้ก็ดีพอสมควร เร็ว คนใช้เยอะ แต่ใน Platform เราต้องมี Spark อยู่ โดยส่วนใหญ่คนใช้ SparkSQL ก็มักจะใช้บน Platform ที่มี Spark อยู่แล้ว เป็นระบบงานที่ต้องใช้ Spark ในการขับเคลื่อน โดย SparkSQL เป็นการใช้ SQL คุยกับ Spark DataFrame และ Spark เองก็กิน Memory พอสมควร ซึ่งระบบงานของเราบางครั้งก็ไม่สามารถมี Resource ได้มากขนาดนั้น
  • Phoenix ตัวนี้ทีมงานเราบางคนมีประสบการณ์ แต่เห็นว่าติดตั้งยากและ Maintenance ด้วย Configuration ก็ซับซ้อนพอสมควร ก็ยังกลัวๆว่า หากบน Production ติดปัญหาเราจะเอาอยู่หรือไม่
  • Presto ตัวนี้หลังจากกลับจากงาน น่าสนใจมากด้วยที่รองรับคล้าย Apache Drill มีการใช้งานอย่างแพร่หลายมานาน และได้ฟัง Lesson Learn จาก Startup ระดับโลกแชร์ให้ฟัง จึงประทับใจมาก จึงเริ่มต้นหาข้อมูลเพิ่มเติม และอยากเอามาแชร์ให้คนที่สนใจใน Medium นี้ด้วย

เรามาทำความรู้จัก Presto กันนิดหน่อยครับ

Presto (http://Prestodb.io)

Presto เป็น SQL Distributed Query Engine ที่ใช้ Query Data บน HDFS ได้ รวมทั้ง Cloud Storage สำหรับ Data Lake อย่าง AWS S3 และ Azure Data Lake Store หรือแม้กระทั่ง Relational Database ได้ จึงนับได้น่าครอบคุมที่เราต้องการทีเดียว

Presto ถูกสร้างจากทีมงาน Facebook และทีม Facebook ใช้ Presto ในการ Query ข้อมูลของ Facebook มากกว่า 300 PB นอกจากนี้ Airbnb และ Dropbox เองก็ใช้

Presto History จาก Teradata

รองรับการ query ไปยัง HDFS ได้โดยตรง โดยไม่จำเป็นต้องทำ ETL (เขาว่าอย่างงั้นนะ)

Presto ไม่ใช่ Database (อ่านจากเว็บ www.prestodb.io) ไม่ได้ออกแบบมาเพื่อแทนที่ Software พวก Database ทั่วๆไป เช่น MySQL, PostgreSQL ซึ่งรองรับ Online Transaction Processing (OLTP) แต่ Presto ออกแบบมาสำหรับ Query Data บน Hadoop HDFS แบบ Distribution Query ได้ จึงรองรับงานที่ต้อง Query ข้อมูลระดับ Terabytes หรือ Petabytes เป็นทางเลือกที่นอกเหนือจาก MapReduce, Hive, Pig และ Presto ออกแบบมารองรับ Online Analytical Processing (OLAP) เพื่อทำงานเป็น BigData Warehouse ได้ด้วยความสามารถ Query Multi Source แล้วใช้ SQL Join ได้ เช่นตัวอย่าง command ใช้ Query ข้อมูลจาก Hive และ Cassandra แล้วทำ Join กัน

Presto มี Enterprise Company หลักที่ให้บริการ Presto แบบ Enterprise Services พร้อมทั้งพัฒนาเครื่องมือ Management คือ Teradata สนใจดู Product ของเขาได้ที่ http://www.teradata.com/products-and-services/Presto/Presto-Download

Presto รองรับการใช้งานเชื่อมต่อกับ BI อย่าง Tableau (รองรับตัวอื่นๆด้วย เช่นกัน อันนี้สำคัญมาก)

ตัวอย่างการใช้ Presto ร่วมกับ Tableau จาก Teradata

Presto ทำงานแบบ In-memory Database รองรับการทำ Data Pipeline ใน Cluster ของ Presto ใช้ Latency ระหว่าง Cluster ต่ำและใช้ I/O น้อย เพราะการประมวลผลข้อมูลทำงานใน Memory ของแต่ละ node เป็นหลัก จากภาพเป็น Architecture ของ Presto

Presto Architecture

การทำ Big Data Platform ในแบบ Data Lake คือเก็บข้อมูลก่อนและวิเคราะห์ภายหลังได้ (Data lake คืออะไรอ่านได้จาก Blog ผมที่นี่ครับ) สิ่งที่ขาดไม่ได้เลยคือ Workflow Management จากที่ได้รับแชร์ความรู้มา ตัวที่เขาแนะนำคือ Azkaban เพื่อทำ Schedule Jobs ในระบบ Azkaban มี Web UI ให้บริหารจัดการ และรองรับ Presto ด้วย

Azkaban Web UI

Presto มี Web Client เพื่อใช้ในการทำงานเป็น SQL Editor อย่าง Yanagishima (https://github.com/yanagishima/yanagishima)

Presto ถูกใช้ในระบบ Log Analytic Platform ขนาดใหญ่ที่มี Log ต่อวันสูงมากถึง 10TB ต่อวันครับ ( Use case นี้ได้ใจคนเขียนเพราะลูกค้ากลุ่มใหญ่ของเราเป็น Telecom)

ตอนนี้ขอแค่นี้ก่อนครับ ตอนต่อไปเราจะมาทดสอบกัน

ฝากติดตามที่เพจ www.facebook.com/Softnixtech ด้วยนะครับ เรามีเนื้อหาความรู้จากทีม Engineer ของเราที่อยากแชร์ (มีเนื้อหาขายของด้วยนะ 555) ไว้ติดตามครับ

อ่านต่อตอนที่ 2 ทำความเข้าใจเพิ่มเติมด้วยการลงมือ

--

--