web-dev-qa-db-ja.com

アブロ対寄木細工

Hadoop関連プロジェクトにhadoopファイル形式の1つを使用する予定です。 I 理解 parquetは、列ベースのクエリとavroでフルスキャンを行う場合、またはすべての列データが必要な場合に効率的です!

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

78
Abhishek

まだ決定していない場合は、データのAvroスキーマを作成します。それが完了したら、AvroコンテナファイルとParquetファイルのいずれかを選択するのは、スワップアウトと同じくらい簡単です。

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

for

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

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

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

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

48
steamer25

Avroは行ベースの形式です。データ全体を取得する場合は、Avroを使用できます

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

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

44

アブロ

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

寄木細工

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

から HDFSデータストレージ形式の選択-Avro vs. Parquetなど

27
secfree

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

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

  2. ツール:寄せ木張りはImpalaに適しています。 (Impalaは、大規模並列処理(MPP)RDBM SQLクエリエンジンであり、1つまたはいくつかの外部ストレージエンジンに存在するデータを操作する方法を知っています。 )HDFSのデータを介した出力。これはCDH(Cloudera Distribution Hadoop)でサポートされています。 HadoopはApacheのOptimized Row Columnar(ORC)形式をサポートしています(選択はHadoopディストリビューションに依存します)が、AvroはSpark処理に最適です。

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

18
Aakash Aggarwal

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

CDH distroのHive 0.12を使用しています。 Hive + Parquetで問題が発生しているとおっしゃいましたが、それは何ですか?遭遇しませんでした。

9
Silver Blaze

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

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

このブログ投稿

MapRからのこのリンク[ただし、Parquetについては説明しません]

Inquidiaからのこのリンク

上記のリンクはあなたを元気づけます。これがあなたの質問に答えることを願っています。

ありがとう!

3
Rahul

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

私はすぐにAvroで記事を書くつもりで、2つを比較するつもりです。完了したらここに投稿します。

0
Abhishek Jain