Avro เทียบกับปาร์เก้


92

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

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

คำตอบ:


53

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

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

สำหรับ

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

รูปแบบปาร์เก้ดูเหมือนจะเน้นการคำนวณมากกว่าในด้านการเขียนเช่นต้องการ RAM สำหรับบัฟเฟอร์และ CPU ในการสั่งซื้อข้อมูลเป็นต้น แต่ควรลดค่า I / O การจัดเก็บและการถ่ายโอนรวมทั้งทำให้มีประสิทธิภาพ อ่านโดยเฉพาะอย่างยิ่งกับคำสั่ง SQL-like (เช่น Hive หรือ SparkSQL) ที่ระบุเฉพาะบางส่วนของคอลัมน์

ในโครงการหนึ่งฉันลงเอยด้วยการเปลี่ยนจาก Parquet เป็นคอนเทนเนอร์ Avro เนื่องจากสคีมานั้นกว้างขวางเกินไปและซ้อนกัน (ได้มาจากคลาสเชิงวัตถุแบบลำดับชั้นที่ค่อนข้างเป็นธรรม) และส่งผลให้มีคอลัมน์ปาร์เก้ 1,000 คอลัมน์ ในทางกลับกันกลุ่มแถวของเรากว้างและตื้นมากซึ่งหมายความว่าต้องใช้เวลาตลอดไปก่อนที่เราจะประมวลผลแถวจำนวนน้อยในคอลัมน์สุดท้ายของแต่ละกลุ่ม

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


2
ไม้ปาร์เก้รองรับชุดข้อมูล / คอลเลกชันที่ซ้อนกันด้วย
Tagar

@Ruslan: ใช่มันสนับสนุนโครงสร้างที่ซ้อนกันในทางเทคนิค ปัญหาคือจำนวนคอลัมน์ที่สูงมากเนื่องจากข้อมูลที่ไม่ปกติอย่างกว้างขวาง มันใช้งานได้ แต่มันช้ามาก
steamer25

4
ใช่การเขียนข้อมูลด้วยไม้ปาร์เก้มีราคาแพงกว่า การอ่านเป็นวิธีอื่น ๆ โดยเฉพาะอย่างยิ่งหากการสืบค้นของคุณโดยปกติอ่านคอลัมน์ย่อย
Tagar

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

Apache Arrow ยังไม่รองรับการซ้อนแบบผสม (รายการที่มีพจนานุกรมหรือพจนานุกรมที่มีรายการ) ดังนั้นหากคุณต้องการทำงานกับการทำรังที่ซับซ้อนในไม้ปาร์เก้คุณจะต้องติดอยู่กับ Spark, Hive และเครื่องมืออื่น ๆ ที่ไม่ต้องพึ่งพา Arrow ในการอ่านและเขียน Parquet
โยสิยาห์

49

Avro เป็นรูปแบบตามแถว หากคุณต้องการดึงข้อมูลโดยรวมคุณสามารถใช้ Avro

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

HBase มีประโยชน์เมื่อมีการอัปเดตข้อมูลบ่อยครั้ง Avro ดึงข้อมูลได้รวดเร็วปาร์เก้เร็วกว่ามาก


7
โปรดแก้ไข 2 ประโยคสุดท้ายของคุณในย่อหน้าสุดท้าย พวกเขาไม่สามารถเข้าใจได้อย่างจริงจัง
Cbhihe

39

Avro

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

ปาร์เก้

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

ตั้งแต่การเลือกรูปแบบการจัดเก็บข้อมูล HDFS - Avro เทียบกับปาร์เก้และอื่น ๆ


30

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

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

  2. เครื่องมือ : ไม้ปาร์เก้เหมาะสำหรับอิมพาลา (Impala เป็นกลไกการสืบค้นข้อมูล SQL แบบ RDBM แบบ Massive Parallel Processing (MPP) ซึ่งรู้วิธีดำเนินการกับข้อมูลที่อยู่ในเอ็นจินหน่วยเก็บข้อมูลภายนอกหนึ่งหรือสองสามตัว) อีกครั้ง Parquet ยืมตัวเองได้ดีสำหรับการสืบค้นที่ซับซ้อน / โต้ตอบและรวดเร็ว (เวลาแฝงต่ำ ) ส่งออกข้อมูลใน HDFS รองรับโดย CDH (Cloudera Distribution Hadoop) Hadoop รองรับรูปแบบ Optimized Row Columnar (ORC) ของ Apache (การเลือกขึ้นอยู่กับการกระจาย Hadoop) ในขณะที่ Avro เหมาะที่สุดสำหรับการประมวลผล Spark

  3. Schema Evolution : การพัฒนาสคีมา DB หมายถึงการเปลี่ยนแปลงโครงสร้างของ DB ดังนั้นข้อมูลจึงประมวลผลแบบสอบถาม
    ทั้ง Parquet และ Avro รองรับวิวัฒนาการของสคีมา แต่ในระดับที่แตกต่างกัน
    ไม้ปาร์เก้เหมาะสำหรับการดำเนินการ 'ผนวก' เช่นการเพิ่มคอลัมน์ แต่ไม่ใช่สำหรับการเปลี่ยนชื่อคอลัมน์เว้นแต่ 'อ่าน' จะทำโดยดัชนี
    Avro เหมาะสำหรับการต่อท้ายการลบและการกลายพันธุ์คอลัมน์โดยทั่วไปมากกว่า Parquet ในอดีต Avro ได้จัดเตรียมชุดความเป็นไปได้ในการวิวัฒนาการของ schema ที่สมบูรณ์กว่า Parquet และแม้ว่าความสามารถในการวิวัฒนาการของ schema จะเบลอ แต่ Avro ก็ยังคงส่องแสงในพื้นที่นั้นเมื่อเทียบกับ Parquet


5
ส่วน "เครื่องมือ" นั้นทำให้เข้าใจผิดเล็กน้อย ไม้ปาร์เก้ถูกใช้อย่างมีประสิทธิภาพโดยเฟรมเวิร์กอื่น ๆ เช่น Spark, Presto, Hive เป็นต้น Avro ไม่ได้เฉพาะเจาะจงสำหรับ Spark แต่ใช้กันอย่างแพร่หลายในรูปแบบการจัดเก็บ HDFS และสถานการณ์การส่งผ่านข้อความเช่นใน Kafka
ᐅ devrimbaris

2
Aakash Aggarwal: คุณสามารถอธิบายความหมายในวรรค 2 ได้ไหมว่า "Avro เหมาะสมที่สุดสำหรับการประมวลผล Spark" ดังที่กล่าวถึงโดย devrimbaris ปาร์เก้ถูกรวมเข้าด้วยกันเป็นอย่างดีในสภาพแวดล้อมการประมวลผลของ Spark เช่นกัน o_O?!?
Cbhihe

11

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

เราใช้ Hive 0.12 จาก CDH distro คุณบอกว่าคุณกำลังประสบปัญหากับ Hive + Parquet สิ่งเหล่านี้คืออะไร? เราไม่พบใด ๆ


3

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

มีรูปแบบไฟล์มากมายที่คุณสามารถใช้ได้ใน Hive การกล่าวถึงที่โดดเด่น ได้แก่ AVRO, Parquet RCFile และ ORC มีเอกสารดีๆบางอย่างทางออนไลน์ที่คุณอาจอ้างถึงหากคุณต้องการเปรียบเทียบประสิทธิภาพและการใช้พื้นที่ของรูปแบบไฟล์เหล่านี้ ตามลิงค์ที่มีประโยชน์ที่จะพาคุณไป

บล็อกโพสต์นี้

ลิงค์นี้จาก MapR [พวกเขาไม่พูดถึงปาร์เก้เลย]

ลิงค์นี้จาก Inquidia

ลิงก์ที่ระบุข้างต้นจะช่วยให้คุณไปได้ ฉันหวังว่านี่จะตอบคำถามของคุณ

ขอบคุณ!


0

สำหรับคำอธิบายเกี่ยวกับไม้ปาร์เก้คุณสามารถดูได้ที่นี่: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

ฉันตั้งใจจะเขียนเกี่ยวกับ Avro เร็ว ๆ นี้และการเปรียบเทียบระหว่าง 2 ตัวนี้ด้วย จะโพสต์ที่นี่เมื่อทำเสร็จแล้ว


กำลังรอการเปรียบเทียบ ขณะนี้ฉันเลือก Avro สำหรับโครงการของฉันเนื่องจากไม้ปาร์เก้มีปัญหาความเข้ากันได้กับรัง :)
Abhishek

1
@Abshinek คุณสามารถให้ข้อมูลบางอย่างเกี่ยวกับปัญหาความเข้ากันได้กับรังและ avro
EB

@EB ไม่ควรมีปัญหาใด ๆ หากมีจะกล่าวถึงที่cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.