รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ

รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ
เทพสภาพอากาศ โดย Remarin

ทีม Mail.ru โซลูชั่นคลาวด์ ข้อเสนอ การแปลบทความ วิศวกร Rahul Bhatia จาก Clairvoyant เกี่ยวกับรูปแบบไฟล์ที่มีอยู่ใน Big Data อะไรคือคุณสมบัติที่พบบ่อยที่สุดของรูปแบบ Hadoop และรูปแบบใดที่เหมาะกับการใช้งานมากกว่า

เหตุใดจึงต้องมีรูปแบบไฟล์ที่แตกต่างกัน

ปัญหาคอขวดด้านประสิทธิภาพที่สำคัญสำหรับแอปพลิเคชันที่เปิดใช้งาน HDFS เช่น MapReduce และ Spark คือเวลาที่ใช้ในการค้นหา อ่าน และเขียนข้อมูล ปัญหาเหล่านี้ประกอบขึ้นด้วยความยากลำบากในการจัดการชุดข้อมูลขนาดใหญ่ หากเรามีสคีมาที่พัฒนาไปมากกว่าที่จะแก้ไข หรือมีข้อจำกัดด้านพื้นที่จัดเก็บข้อมูล

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

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

  1. เวลาอ่านเร็วขึ้น
  2. เวลาบันทึกเร็วขึ้น
  3. ไฟล์ที่ใช้ร่วมกัน
  4. รองรับการพัฒนาสคีมา
  5. รองรับการบีบอัดแบบขยาย

ไฟล์บางรูปแบบมีไว้สำหรับการใช้งานทั่วไป บางรูปแบบสำหรับการใช้งานเฉพาะเจาะจง และบางรูปแบบได้รับการออกแบบเพื่อให้ตรงตามคุณลักษณะเฉพาะของข้อมูล ดังนั้นทางเลือกจึงค่อนข้างใหญ่จริงๆ

รูปแบบไฟล์ Avro

สำหรับ การจัดลำดับข้อมูล Avro มีการใช้กันอย่างแพร่หลาย-มัน ตามสตริงนั่นคือรูปแบบการจัดเก็บข้อมูลสตริงใน Hadoop โดยจะจัดเก็บสคีมาในรูปแบบ JSON ทำให้โปรแกรมต่างๆ อ่านและตีความได้ง่าย ข้อมูลอยู่ในรูปแบบไบนารี กะทัดรัดและมีประสิทธิภาพ

ระบบการทำให้เป็นอนุกรมของ Avro เป็นภาษาที่เป็นกลาง ไฟล์สามารถประมวลผลได้หลายภาษา ปัจจุบันคือ C, C++, C#, Java, Python และ Ruby

คุณสมบัติที่สำคัญของรว์คือการสนับสนุนที่แข็งแกร่งสำหรับแผนข้อมูลที่เปลี่ยนแปลงตลอดเวลา ซึ่งก็คือการพัฒนา Avro เข้าใจการเปลี่ยนแปลงสคีมา ไม่ว่าจะเป็นการลบ เพิ่ม หรือเปลี่ยนแปลงฟิลด์

Avro รองรับโครงสร้างข้อมูลที่หลากหลาย ตัวอย่างเช่น คุณสามารถสร้างเรกคอร์ดที่มีอาร์เรย์ ประเภทที่แจกแจง และเรกคอร์ดย่อยได้

รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ
รูปแบบนี้เหมาะสำหรับการเขียนไปยังโซนลงจอด (เปลี่ยนผ่าน) ของ Data Lake (ทะเลสาบข้อมูลหรือ Data Lake - ชุดของอินสแตนซ์สำหรับการจัดเก็บข้อมูลประเภทต่างๆ นอกเหนือจากแหล่งข้อมูลโดยตรง)

ดังนั้น รูปแบบนี้จึงเหมาะที่สุดสำหรับการเขียนไปยังโซนลงจอดของ Data Lake ด้วยเหตุผลต่อไปนี้:

  1. โดยปกติแล้วข้อมูลจากโซนนี้จะถูกอ่านอย่างครบถ้วนเพื่อการประมวลผลเพิ่มเติมโดยระบบดาวน์สตรีม และรูปแบบตามแถวจะมีประสิทธิภาพมากกว่าในกรณีนี้
  2. ระบบดาวน์สตรีมสามารถดึงตารางสคีมาจากไฟล์ได้อย่างง่ายดาย โดยไม่จำเป็นต้องจัดเก็บสคีมาแยกต่างหากในที่จัดเก็บข้อมูลเมตาภายนอก
  3. การเปลี่ยนแปลงใด ๆ กับสคีมาดั้งเดิมนั้นสามารถประมวลผลได้อย่างง่ายดาย (วิวัฒนาการของสคีมา)

รูปแบบไฟล์ปาร์เก้

Parquet เป็นรูปแบบไฟล์โอเพ่นซอร์สสำหรับ Hadoop ที่จัดเก็บ โครงสร้างข้อมูลที่ซ้อนกันในรูปแบบเสาแบน.

เมื่อเปรียบเทียบกับวิธีการแถวแบบดั้งเดิม ไม้ปาร์เก้มีประสิทธิภาพมากกว่าทั้งในแง่ของการจัดเก็บและประสิทธิภาพ

สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับแบบสอบถามที่อ่านคอลัมน์เฉพาะจากตารางแบบกว้าง (หลายคอลัมน์) ด้วยรูปแบบไฟล์ ทำให้อ่านเฉพาะคอลัมน์ที่จำเป็นเท่านั้น ดังนั้น I/O จึงถูกเก็บไว้ให้น้อยที่สุด

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

เช่นเรกคอร์ดจะประกอบด้วยฟิลด์ ID ชื่อ และแผนก ในกรณีนี้ ค่าคอลัมน์ ID ทั้งหมดจะถูกจัดเก็บไว้ด้วยกัน เช่นเดียวกับค่าคอลัมน์ Name เป็นต้น ตารางจะมีลักษณะดังนี้:

ID
Name
แผนก

1
emp1
d1

2
emp2
d2

3
emp3
d3

ในรูปแบบสตริง ข้อมูลจะถูกบันทึกดังนี้:

1
emp1
d1
2
emp2
d2
3
emp3
d3

ในรูปแบบไฟล์เรียงเป็นแนว ข้อมูลเดียวกันจะถูกบันทึกดังนี้:

1
2
3
emp1
emp2
emp3
d1
d2
d3

รูปแบบเรียงเป็นแนวจะมีประสิทธิภาพมากกว่าเมื่อคุณต้องการสืบค้นหลายคอลัมน์จากตาราง มันจะอ่านเฉพาะคอลัมน์ที่ต้องการเนื่องจากอยู่ติดกัน ด้วยวิธีนี้ การดำเนินการ I/O จะถูกเก็บไว้ให้น้อยที่สุด

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

ดังนั้น รูปแบบเรียงเป็นแนวช่วยปรับปรุงประสิทธิภาพคิวรี เนื่องจากต้องใช้เวลาในการค้นหาน้อยลงเพื่อไปยังคอลัมน์ที่ต้องการ และลดจำนวนการดำเนินการ I/O เนื่องจากอ่านเฉพาะคอลัมน์ที่ต้องการเท่านั้น

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

รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ
เพื่อให้เข้าใจรูปแบบไฟล์ Parquet ใน Hadoop คุณจำเป็นต้องทราบคำศัพท์ต่อไปนี้:

  1. กลุ่มของสตริง (กลุ่มแถว): การแบ่งข้อมูลตามแนวนอนเชิงตรรกะออกเป็นแถว กลุ่มแถวประกอบด้วยส่วนของแต่ละคอลัมน์ในชุดข้อมูล
  2. ส่วนของคอลัมน์ (ก้อนคอลัมน์): ส่วนของคอลัมน์เฉพาะ ส่วนของคอลัมน์เหล่านี้อยู่ในกลุ่มแถวเฉพาะและรับประกันว่าจะอยู่ติดกันในไฟล์
  3. หน้า (หน้า): ส่วนของคอลัมน์จะถูกแบ่งออกเป็นหน้าที่เขียนทีละหน้า หน้าต่างๆ มีชื่อเหมือนกัน ดังนั้นคุณจึงสามารถข้ามชื่อที่ไม่จำเป็นเมื่ออ่านได้

รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ
ที่นี่ชื่อเรื่องมีเพียงหมายเลขเวทย์มนตร์ PAR1 (4 ไบต์) ซึ่งระบุไฟล์เป็นไฟล์ Parquet

ส่วนท้ายบอกว่าต่อไปนี้:

  1. ข้อมูลเมตาของไฟล์ที่มีพิกัดเริ่มต้นของข้อมูลเมตาของแต่ละคอลัมน์ เมื่ออ่าน คุณต้องอ่านข้อมูลเมตาของไฟล์ก่อนเพื่อค้นหาส่วนของคอลัมน์ที่สนใจทั้งหมด ส่วนคอลัมน์ควรอ่านตามลำดับ ข้อมูลเมตาอื่นๆ รวมถึงเวอร์ชันของรูปแบบ สคีมา และคู่คีย์-ค่าเพิ่มเติม
  2. ความยาวข้อมูลเมตา (4 ไบต์)
  3. เลขมหัศจรรย์ PAR1 (4 ไบต์)

รูปแบบไฟล์ ORC

ปรับรูปแบบไฟล์แถว-คอลัมน์ให้เหมาะสม (คอลัมน์แถวที่ปรับให้เหมาะสม ORC) นำเสนอวิธีการจัดเก็บข้อมูลที่มีประสิทธิภาพมากและได้รับการออกแบบมาเพื่อเอาชนะข้อจำกัดของรูปแบบอื่นๆ จัดเก็บข้อมูลในรูปแบบที่กะทัดรัด ช่วยให้คุณสามารถข้ามรายละเอียดที่ไม่จำเป็น โดยไม่ต้องสร้างดัชนีขนาดใหญ่ ซับซ้อน หรือบำรุงรักษาด้วยตนเอง

ข้อดีของรูปแบบ ORC:

  1. ไฟล์เดียวคือเอาต์พุตของแต่ละงาน ซึ่งจะช่วยลดภาระบน NameNode (โหนดชื่อ)
  2. รองรับประเภทข้อมูล Hive รวมถึงประเภทข้อมูล DateTime ทศนิยมและซับซ้อน (struct รายการ แผนที่ และสหภาพ)
  3. การอ่านไฟล์เดียวกันพร้อมกันโดยกระบวนการ RecordReader ที่แตกต่างกัน
  4. ความสามารถในการแยกไฟล์โดยไม่ต้องสแกนหาเครื่องหมาย
  5. การประมาณค่าการจัดสรรหน่วยความจำฮีปที่เป็นไปได้สูงสุดสำหรับกระบวนการอ่าน/เขียนโดยอิงตามข้อมูลในส่วนท้ายของไฟล์
  6. ข้อมูลเมตาจะถูกจัดเก็บไว้ในรูปแบบไบนารีของบัฟเฟอร์โปรโตคอล ซึ่งอนุญาตให้เพิ่มและลบฟิลด์ได้

รูปแบบไฟล์ในข้อมูลขนาดใหญ่: โปรแกรมการศึกษาสั้น ๆ
ORC จัดเก็บคอลเลกชันของสตริงในไฟล์เดียว และภายในคอลเลกชัน ข้อมูลสตริงจะถูกจัดเก็บในรูปแบบคอลัมน์

ไฟล์ ORC เก็บกลุ่มของบรรทัดที่เรียกว่าแถบและข้อมูลสนับสนุนในส่วนท้ายของไฟล์ Postscript ที่ท้ายไฟล์ประกอบด้วยพารามิเตอร์การบีบอัดและขนาดของส่วนท้ายที่ถูกบีบอัด

ขนาดแถบเริ่มต้นคือ 250 MB เนื่องจากแถบขนาดใหญ่ดังกล่าว การอ่านจาก HDFS จึงมีประสิทธิภาพมากขึ้น: ในบล็อกขนาดใหญ่ที่อยู่ติดกัน

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

ส่วนท้ายของแถบประกอบด้วยไดเร็กทอรีของตำแหน่งสตรีม

ข้อมูลแถวจะใช้เมื่อสแกนตาราง

ข้อมูลดัชนีประกอบด้วยค่าต่ำสุดและสูงสุดสำหรับแต่ละคอลัมน์และตำแหน่งของแถวในแต่ละคอลัมน์ ดัชนี ORC ใช้สำหรับการเลือกแถบและกลุ่มแถวเท่านั้น ไม่ใช่สำหรับการตอบแบบสอบถาม

การเปรียบเทียบรูปแบบไฟล์ต่างๆ

รว์เมื่อเทียบกับปาร์เก้

  1. Avro เป็นรูปแบบการจัดเก็บแถว ในขณะที่ Parquet เก็บข้อมูลเป็นคอลัมน์
  2. Parquet เหมาะสำหรับการสืบค้นเชิงวิเคราะห์มากกว่า ซึ่งหมายความว่าการดำเนินการอ่านและการสืบค้นข้อมูลจะมีประสิทธิภาพมากกว่าการเขียนมาก
  3. การดำเนินการเขียนใน Avro ดำเนินการได้อย่างมีประสิทธิภาพมากกว่าใน Parquet
  4. Avro เกี่ยวข้องกับวิวัฒนาการของวงจรที่เป็นผู้ใหญ่มากขึ้น Parquet รองรับเฉพาะการเพิ่มสคีมา ในขณะที่ Avro รองรับการวิวัฒนาการแบบมัลติฟังก์ชั่น นั่นคือ การเพิ่มหรือการเปลี่ยนแปลงคอลัมน์
  5. Parquet เหมาะอย่างยิ่งสำหรับการสืบค้นชุดย่อยของคอลัมน์ในตารางแบบหลายคอลัมน์ Avro เหมาะสำหรับการดำเนินการ ETL ที่เราสืบค้นคอลัมน์ทั้งหมด

ORC กับปาร์เก้

  1. ไม้ปาร์เก้เก็บข้อมูลที่ซ้อนกันได้ดีกว่า
  2. ORC เหมาะกว่าในการเพรดิเคตการกดลง
  3. ORC รองรับคุณสมบัติกรด
  4. ORC บีบอัดข้อมูลได้ดีขึ้น

มีอะไรอีกให้อ่านในหัวข้อ:

  1. การวิเคราะห์ข้อมูลขนาดใหญ่ในระบบคลาวด์: วิธีที่บริษัทสามารถมุ่งเน้นข้อมูลได้.
  2. คู่มือแบบเรียบง่ายสำหรับ Schema ฐานข้อมูล.
  3. ช่องโทรเลขของเราเกี่ยวกับการเปลี่ยนแปลงทางดิจิทัล.

ที่มา: will.com

เพิ่มความคิดเห็น