アブロ対寄木細工


92

私は、Hadoop関連のプロジェクトにHadoopファイル形式の1つを使用することを計画しています。寄木細工は、列ベースのクエリとフルスキャンのavro、またはすべての列データが必要な場合に効率的であることを理解しています。

先に進んでファイル形式の1つを選択する前に、一方の欠点/欠点が何であるかを理解したいと思います。誰かが私にそれを簡単な言葉で説明できますか?

回答:


53

まだ決定していない場合は、先に進んでデータのAvroスキーマを作成します。それが完了すると、AvroコンテナファイルとParquetファイルのどちらを選択するかは、交換するのと同じくらい簡単です。

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

ために

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

Parquet形式は、書き込み側で少し計算量が多いようです。たとえば、バッファリング用のRAMとデータの順序付け用のCPUが必要ですが、I / O、ストレージ、転送のコストを削減し、効率を高める必要があります。特に、列の一部のみをアドレス指定するSQLのような(HiveやSparkSQLなどの)クエリで読み取ります。

あるプロジェクトでは、スキーマが広すぎてネストされていて(かなり階層的なオブジェクト指向クラスから派生しているため)、ParquetからAvroコンテナーに戻ることになり、数千のParquet列が生成されました。同様に、行グループは非常に広く浅いため、各グループの最後の列の少数の行を処理できるようになるまでに、永遠に時間がかかりました。

より正規化された/正常なデータにParquetを使用する機会はまだあまりありませんが、うまく使用すれば、パフォーマンスが大幅に向上することを理解しています。


2
Parquetは、ネストされたデータセット/コレクションもサポートしています。
tagar 2016

@Ruslan:はい、ネストされた構造を技術的にサポートしていました。問題は、データの大幅な非正規化による列数が非常に多いことでした。それは機能しましたが、非常に遅かったです。
Steamer25 2016

4
はい、寄木細工の床でデータを書くことはより高価です。特にクエリが通常列のサブセットを読み取る場合、読み取りは逆になります。
tagar 2016

4
Parquetは、同じ列のデータが大きく異なり、ほとんどすべての列で常に分析されることを除いて、ほとんどのユースケースに適していると思います。
ロッキーヤン2016

Apache Arrowは、混合ネスト(辞書付きのリストまたはリスト付きの辞書)もまだサポートしていません。したがって、Parquetで複雑なネストを処理する場合は、Spark、Hiveなど、Parquetの読み取りと書き込みにArrowに依存しないツールを使用する必要があります。
ヨシヤ

49

Avroは行ベースのフォーマットです。データ全体を取得したい場合は、Avroを使用できます

寄木細工は列ベースの形式です。データが多数の列で構成されているが、列のサブセットに関心がある場合は、Parquetを使用できます

HBaseは、データの頻繁な更新が含まれる場合に役立ちます。Avroは検索が高速で、Parquetははるかに高速です。


7
最後の段落の最後の2文を修正してください。彼らは全く理解できない。
Cbhihe

39

アブロ

  • シリアル化プラットフォームとして広く使用されています
  • 行ベースで、コンパクトで高速なバイナリ形式を提供します
  • スキーマはファイルにエンコードされているため、データのタグを解除できます
  • ファイルはブロック圧縮をサポートし、分割可能です
  • スキーマの進化をサポート

寄木細工

  • 列指向のバイナリファイル形式
  • Dremelの論文で説明されているレコードのシュレッダーとアセンブリアルゴリズムを使用します
  • 各データファイルには、一連の行の値が含まれています
  • 特定の列を照会する必要がある場合のディスクI / Oの点で効率的

HDFSデータストレージフォーマットの選択から-Avrovs.Parquetなど


30

AvroとParquetはどちらも「自己記述型」のストレージ形式です。つまり、データをファイルに保存するときに、データ、メタデータ情報、スキーマの両方を埋め込みます。どちらのストレージ形式の使用も、ユースケースによって異なります。次の3つの側面が、ケースに最適な形式を選択するための基礎を構成します。

  1. 読み取り/書き込み操作:Parquetは列ベースのファイル形式です。インデックス作成をサポートします。そのため、ライトワンスおよび読み取り集約型の複雑または分析クエリ、低遅延データクエリに適しています。これは通常、エンドユーザー/データサイエンティストによって使用されます。
    一方、行ベースのファイル形式であるAvroは、書き込みの多い操作に最適です。これは通常、データエンジニアによって使用されます。どちらもシリアル化と圧縮の形式をサポートしていますが、方法は異なります。

  2. ツール:寄木細工はインパラにぴったりです。(Impalaは、1つまたはいくつかの外部ストレージエンジンに存在するデータの操作方法を知っている超並列処理(MPP)RDBM SQLクエリエンジンです。)ここでも、Parquetは、複雑でインタラクティブなクエリと高速(低遅延)に適しています。 )HDFSのデータを介して出力します。これはCDH(Cloudera Distribution Hadoop)によってサポートされています。HadoopはApacheのOptimizedRow Columnar(ORC)形式をサポートします(選択はHadoopディストリビューションによって異なります)が、AvroはSpark処理に最適です。

  3. スキーマの進化:DBスキーマを進化させるということは、DBの構造、つまりデータ、そしてクエリ処理を変更することを意味します。
    ParquetとAvroはどちらもスキーマの進化をサポートしていますが、程度は異なります。
    Parquetは、列の追加などの「追加」操作には適していますが、「読み取り」がインデックスによって行われない限り、列の名前変更には適していません。
    Avroは、Parquetよりも列の追加、削除、および一般的な変更に適しています。歴史的に、AvroはParquetよりも豊富なスキーマ進化の可能性を提供してきました。そのスキーマ進化機能はぼやける傾向がありますが、Parquetと比較すると、Avroは依然としてその領域で輝いています。


5
「ツール」の部分は少し誤解を招く可能性があります。Parquetは、Spark、Presto、Hiveなどの他の多くのフレームワークで効率的に使用されます。AvroはSparkに固有のものではなく、KafkaのようにHDFSストレージ形式およびメッセージパッシングシナリオとして広く使用されています。
ᐅdevrimbaris

2
Aakash Aggarwal:段落2の「AvroはSpark処理に最適」とはどういう意味ですか?devrimbarisが述べたように、ParquetはSpark処理環境にも非常によく統合されています。o_O?!?
Cbhihe

11

あなたの理解は正しいです。実際、DWHでのデータ移行中に同様の状況に遭遇しました。私たちが得たディスク節約はAVroで得たもののほぼ2倍だったので、AvroではなくParquetを選択しました。また、クエリの処理時間はAvroよりもはるかに優れていました。しかし、はい、私たちのクエリは集計、列ベースの操作などに基づいていたため、Parquetが明らかに勝者でした。

CDHディストリビューションのHive0.12を使用しています。Hive + Parquetで問題が発生しているとおっしゃいましたが、それらは何ですか?何も遭遇しませんでした。


3

Silver Blazeは、ユースケースの例をうまく説明し、Parquetが彼にとってどのように最良の選択であったかを説明しました。要件に応じて、どちらか一方を検討することは理にかなっています。他のさまざまなファイル形式についても、時間空間の複雑さの比較とともに簡単に説明します。お役に立てば幸いです。

Hiveで使用できるファイル形式はたくさんあります。注目すべき言及はAVRO、Parquetです。RCFile&ORC。これらのファイル形式のパフォーマンスとスペース使用率を比較する場合に参照できる、オンラインで入手できる優れたドキュメントがいくつかあります。あなたを動かすいくつかの便利なリンクをたどります。

このブログ投稿

MapRからのこのリンク[彼らはParquetについては議論していません]

Inquidiaからのこのリンク

上記のリンクはあなたを動かすでしょう。これがあなたの質問に答えることを願っています。

ありがとう!


0

寄木細工の説明については、こちらを参照してください:http//bigdata.devcodenote.com/2015/04/parquet-file-format.html

私はAvroと2つの比較についてもすぐに書くつもりです。完了したらここに投稿します。


比較を待っています。寄木細工の床にはハイブとの互換性の問題があるため、現在私はプロジェクトにAvroを選択しました:)
Abhishek

1
@ Abshinek、ハイブとアブロとの互換性の問題に関する情報を提供できますか
EB

@EB問題はないはずです。問題がある場合は、cwiki.apache.org
confluence / display /
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.