เปรียบเทียบ Hive FileFormat ประเภทต่าง ๆ เช่น RCFile, Avro Files, ORC Files, Parquet

Nutnaree Poosungnoen
5 min readApr 17, 2020

--

‘Big Data’ คือข้อมูลขนาดใหญ่ที่มีปริมาณมาก( large volume) มีความหลากหลายของข้อมูล (variety of data)และมีความเร็วสูง(high velocity) โดยมีอัตราการเพิ่มขึ้นแบบ day by day ดังนั้น ระบบการจัดการข้อมูลแบบดั้งเดิมเป็นเรื่องยากมากที่จะประมวลผลข้อมูลขนาดใหญ่ ดังนั้นจึงมี Apache software ที่ออกมาเพื่อแก้ไขปัญหาดังกล่าวที่เรียกว่า Hadoop

Hadoop คือ ซอฟท์แวร์ประเภท Open Source ที่จัดทำขึ้นเพื่อเป็นแพลตฟอร์มในการจัดเก็บข้อมูล ซึ่งมีกรอบการทำงานเพื่อใช้ในการจัดเก็บข้อมูลและประมวลผลข้อมูลที่มีขนาดใหญ่มากๆ ที่เราเรียกกันว่า Big Data ซึ่งเจ้าตัว Hadoop ก็สามารถปรับขยาย ยืดหยุ่น เพื่อรองรับข้อมูลที่มีจำนวนมากมายมหาศาลได้ ทั้งนี้ก็เพราะมันมีกระบวนการประมวลผลที่แข็งแกร่งมากซึ่งเป็นผลมาจากการประมวลผลข้อมูลแบบกระจายผ่านเครื่องคอมพิวเตอร์ที่ถูกจัดอยู่ในรูปแบบ Cluster อันนำไปสู่ความสามารถในการรองรับข้อมูลที่ไม่จำกัดแถมยังมีความน่าเชื่อถือสูง

Hadoop นั้นมี library ที่สามารถนำมาทำงานร่วมกันได้มากมาย เช่น

  • Spark
  • Hive
  • Pig
  • Sqoop
  • Samza
  • Cascading
hadoop-ecosystem

Hive เป็นระบบ Data Warehouse ซึ่งสร้างอยู่บน Hadoop ใช้สำหรับการวิเคราะห์ข้อมูล โดยจุดเด่นคือการใช้คำสั่งภาษา SQL ในการเรียกข้อมูล ทั้งที่อยู่ในรูปแบบของ Database และไฟล์บน Hadoop ได้ เหมาะสำหรับการเก็บข้อมูลขนาดใหญ่มากๆ เช่น การเก็บข้อมูลที่นำออกมาจากฐานข้อมูลนำมาเก็บไว้เพื่อใช้การวิเคราะห์ต่อ

Hive

โดย Apache Hive นั้นจะสนับสนุนการทำงาน File Format ประเภทต่าง ๆ ที่ถูกใช้งานใน apache hadoop โดย hive สามารถทำการโหลดหรือ query ข้อมูลด้วย hadoop components เช่น Pig หรือ MapReduce โดย File Fomat ที่ hive สนับสนุนการทำงานจะมีหลากหลาย ที่นิยมใช้กันคือ

TEXTFILE เป็น file format default สำหรับ storage โดย text format นั้นจะเป็นไฟล์พื้นฐานที่ถูกบีบอับ(BZIP2) เพื่อทำการลดพื้นที่จัดเก็บใน storage

Sequence File เป็น Hadoop flat files ที่ถูกจัดเก็บข้อมูลในรูปแบบ binary key-value pairs โดยข้อได้เปรียบหลักๆของ sequence ไฟล์นั้นคือการรวมเอาไฟล์จำนวนสองหรือมากกว่าให้เป็นไฟล์เดียว

RC File เป็น file format ในรูปแบบ Row Column tableมักถูกใช้งานเมื่อต้องการการทำงานบน Row หลายๆ row พร้อมๆกัน โดยรูปแบบการจัดเก็บจะคล้ายกับ sequence file โดยจะจัดเก็บเป็น key-value pairs

AVRO File เป็น file format ที่ได้รับความนิยมในการทำ bigdata Hadoop based applications โดย AVRO เป็น open source project ที่ให้บริการเกี่ยวกับการทำ data serialization และการทำ data exchange service สำหรับ Hadoop โดยสามารถทำการแลกเปลี่ยนข้อมูลระหว่าง Hadoop และ program ที่ถูกเขียนด้วยภาษาทางด้านโปรแกรมรูปแบบต่างๆ

ORC File เป็น file format ที่ถูกออกแบบมาเพื่อประสิทธิภาพการทำงานของไฟล์ในรูปแบบ Row Column table และก้าวข้ามขีดจำกัดของการทำงาน hive file format ในรูปแบบอื่่นๆ ORC file ถูกจัดเก็บบน Hive table เพื่อเพิ่มประสิทธิภาพเมื่อ hive ทำการอ่าน เขียน หรือประมวลผลไฟล์ที่มาจากตารางข้อมูลขนาดใหญ่

Parquet File เป็น column-oriented binary file format โดย Parquet นั้นจะทำงานได้ดีกับงานที่ต้องใช้ large-scale queries การ query ข้อมูลจำนวนมาก หรือสแกนคอลัมน์ใดคอลัมน์หนึ่งภายในตาราง

การที่เราจะตัดสินใจเลือกประเภท file format จึงต้องดูเหตุผลหลายอย่างประกอบกันคือ

  1. Hadoop Distribution — องค์กรได้เลือกใช้ในการทำ Big Data Analytics เช่น Cloudera, Hortonworks, MapR, IBM, Pivotal เป็นต้น
  2. Schema Evolution — รูปแบบการวิวัฒนาการของข้อมูล
  3. Processing Requirements — ความต้องการในแง่ของกระบวนการทำงาน
  4. Read/Query Requirements — ความต้องการในแง่ของการอ่านหรือ query ข้อมูล
  5. Extract Requirements — รูปแบบการจัดเก็บข้อมูล

ข้อมูลทดสอบ

Dataset From ; https://github.com/sagespl/HADOOP/tree/master/data ชื่อชุดข้อมูลว่า olympic-athletes.csv มีจำนวน Record อยู่ทั้งประมาณ 8000 กว่า Records

olympic-athletes from github

โดยจะเปรียบเทียบความเร็วในการ Query ข้อมูล จาก flie format ในรูปแบบที่แตกต่างกันสร้าง Hive Table ทำให้ควรรู้ว่าต้องใช้ file format ไหนในการจัดการข้อมูล

สร้าง Hive Table

สร้าง Hive Table โดยผ่าน Hue ใช้คำสั่งตามด้านล่าง

create table olympic(athelete STRING,age INT,country STRING,year STRING,closing STRING,sport STRING,gold INT,silver INT,bronze INT,total INT) row format delimited fields terminated by ‘,’ stored as textfile;

Create Table

สร้างจนครบ format โดย เปลี่ยน stored as ตาม format

Load Data โดยใช้คำสั่ง

load data local inpath ‘root/olympic-athletes.csv’ into table olympic;

Load data

ทดสอบ Text flie

เป็นตัวตั้งต้นที่ใช้ในการทำงาน ทดสอบด้วยคำสั่ง SELECT athelete FROM olympic;

Text file

ทดสอบ sequencefile

เช็ครูปแบบการจัดเก็บและดูว่าข้อมูลมีรูปแบบอะไรบ้าง ด้วยคำสั่ง describe

describe Table

INSERT OVERWRITE TABLE เพื่อดูเวลาในการ Mapreduce ของ format flie

Sequencefile 174.505 Sec

Mapreduce sequencefile

ทำด้วยวิธีการเดียวกันจนครบ format

RC File 187.531 Sec

Mapreduce rcfile

ORC flie 129.056 Sec

Mapreduce ORC flie

AVRO file 68.569 sec

Mapreduce AVRO flie

Parquet file 213.397 sec

Mapreduce Parquet file

ผลการทดสอบได้ดังนี้

Comparison MapReduce Time Taken (Second)
Map reduce time taken

จากกราฟแสดงให้เห็นว่า file format มีผลกับเวลาในการทำ MapReduce โดย AVRO ใช้เวลาในการ MapReduce น้อยที่สุดเนื่องจาก Avro file นั้นมีลักษณะ lightweight และ fast data ในการ serialisation และ deserialization ให้ประสิทธิภาพการส่งผ่านข้อมูลที่ดีมาก

เราจะเลือก File Format ให้เหมาะสมได้อย่างไร?

นอกจากเหตุผลประกอบตามข้างต้นแล้วเราสามารถใช้ลักษณะของข้อมูลที่เราเห็นว่าเป็นลักษณะโครงสร้างตาราง โดยตัว Hive Engine มีการแทนข้อมูลและอ่านข้อมูลเป็น File Format 2 แบบ คือ Row Major หรือ Column Major

Row Major

การแทนข้อมูลของ Record จะวางเรียงเป็นแนวบรรทัด และ กระบวนเข้าถึงข้อมูลของ Record หนึ่งๆ แม้ว่าจะต้องการข้อมูลแค่ 1 Column ตัว MapReduce ก็จะต้องอ่านข้อมูลเต็มบรรทัดขึ้นมา

Column Major

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

AVRO file VS. Parquet file

เปรียบเทียบการทำงานของไฟล์ Avro และ Parquet

จากการค้นคว้าข้อมูลได้เลือก File Format 2 ชนิดที่เป็นที่นิยมในงานของ Data มาเปรียบเทียบกัน

Source from Nexla analysis
  • ในแง่ schema evolution Avro file จะสามารถจัดการข้อมูลที่มี schema evolution สูงหรือข้อมูลที่มีโอกาสเปลี่ยนแปลงตามช่วงเวลาได้ดีกว่า Parquet ไฟล์
  • ในแง่การ Compression ข้อมูล Parquet file format จะมีความสามารถในการ compression สูงกว่า Avro format โดยในแง่นี้จะเป็นการพูดในแง่การรองรับการขยายตัวของข้อมูลจากการใช้งาน file formats ที่จะขยายใหญ่ขึ้นในอนาคต
  • ในแง่ของการ Split ability data ส่วนนี้จะขึ้นอยู่กับรูปแบบ transactions หรือการ queries ข้อมูลซึ่งเป็นส่วนที่มีบทบาทสำคัญในการทำ MapReduce ข้อมูลที่มีลักษณะ Row base formats อย่าง Avro จะสามารถแบ่งข้อมูลออกมาในลักษณะของ row boundaries โดยจะสามารถทำได้ทีละ record ซึ่งจะต่างจาก Parquet ซึ่งมีลักษณะเป็น Column base เราจะสามารถทำงานโดยการแบ่งเป็นทีละ job ได้
  • ผลิตภัณฑ์ที่รองรับการทำงาน AVRO file format ได้แก่ Kafka, Druid
  • ผลิตภัณฑ์ที่รองรับการทำงาน Parquet file format ได้แก่ Impala, Arrow Drill, Spark
  • รูปแบบการทำงาน AVRO จะสนับสนุนการทำงานของข้อมูลที่มีลักษณะเป็น Row base ส่วน Parquet จะสนับสนุนการทำงานของข้อมูลที่มีลักษณะเป็น Column base
  • AVRO file format เหมาะสำหรับงานประเภทเขียน (Write data) ส่วน Parquet เหมาะสำหรับงานประเภทอ่าน (Read data) หรือ Data exploration มากกว่า

โดยสรุปอย่างง่ายเป็นไปตามตาราง

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

Create and edit by; Kantapong, Nutnaree, Nuttapol

เอกสารอ้างอิง

http://www.ijtc.org/download/Volume-3/june-3/IJTC201706003-Comparative%20Analysis%20of%20Various%20File%20Formats%20in%20HIVE-s241.pdf

https://thinksis.com/wp-content/uploads/2018/10/Nexla_Whitepaper_Introduction-to-Big-Data-Formats-Saket-Saurabh.pdf

--

--