私は、Hadoop関連のプロジェクトにHadoopファイル形式の1つを使用することを計画しています。寄木細工は、列ベースのクエリとフルスキャンのavro、またはすべての列データが必要な場合に効率的であることを理解しています。
先に進んでファイル形式の1つを選択する前に、一方の欠点/欠点が何であるかを理解したいと思います。誰かが私にそれを簡単な言葉で説明できますか?
回答:
まだ決定していない場合は、先に進んでデータの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を使用する機会はまだあまりありませんが、うまく使用すれば、パフォーマンスが大幅に向上することを理解しています。
Avroは行ベースのフォーマットです。データ全体を取得したい場合は、Avroを使用できます
寄木細工は列ベースの形式です。データが多数の列で構成されているが、列のサブセットに関心がある場合は、Parquetを使用できます
HBaseは、データの頻繁な更新が含まれる場合に役立ちます。Avroは検索が高速で、Parquetははるかに高速です。
アブロ
寄木細工
AvroとParquetはどちらも「自己記述型」のストレージ形式です。つまり、データをファイルに保存するときに、データ、メタデータ情報、スキーマの両方を埋め込みます。どちらのストレージ形式の使用も、ユースケースによって異なります。次の3つの側面が、ケースに最適な形式を選択するための基礎を構成します。
読み取り/書き込み操作:Parquetは列ベースのファイル形式です。インデックス作成をサポートします。そのため、ライトワンスおよび読み取り集約型の複雑または分析クエリ、低遅延データクエリに適しています。これは通常、エンドユーザー/データサイエンティストによって使用されます。
一方、行ベースのファイル形式であるAvroは、書き込みの多い操作に最適です。これは通常、データエンジニアによって使用されます。どちらもシリアル化と圧縮の形式をサポートしていますが、方法は異なります。
ツール:寄木細工はインパラにぴったりです。(Impalaは、1つまたはいくつかの外部ストレージエンジンに存在するデータの操作方法を知っている超並列処理(MPP)RDBM SQLクエリエンジンです。)ここでも、Parquetは、複雑でインタラクティブなクエリと高速(低遅延)に適しています。 )HDFSのデータを介して出力します。これはCDH(Cloudera Distribution Hadoop)によってサポートされています。HadoopはApacheのOptimizedRow Columnar(ORC)形式をサポートします(選択はHadoopディストリビューションによって異なります)が、AvroはSpark処理に最適です。
スキーマの進化:DBスキーマを進化させるということは、DBの構造、つまりデータ、そしてクエリ処理を変更することを意味します。
ParquetとAvroはどちらもスキーマの進化をサポートしていますが、程度は異なります。
Parquetは、列の追加などの「追加」操作には適していますが、「読み取り」がインデックスによって行われない限り、列の名前変更には適していません。
Avroは、Parquetよりも列の追加、削除、および一般的な変更に適しています。歴史的に、AvroはParquetよりも豊富なスキーマ進化の可能性を提供してきました。そのスキーマ進化機能はぼやける傾向がありますが、Parquetと比較すると、Avroは依然としてその領域で輝いています。
Silver Blazeは、ユースケースの例をうまく説明し、Parquetが彼にとってどのように最良の選択であったかを説明しました。要件に応じて、どちらか一方を検討することは理にかなっています。他のさまざまなファイル形式についても、時間空間の複雑さの比較とともに簡単に説明します。お役に立てば幸いです。
Hiveで使用できるファイル形式はたくさんあります。注目すべき言及はAVRO、Parquetです。RCFile&ORC。これらのファイル形式のパフォーマンスとスペース使用率を比較する場合に参照できる、オンラインで入手できる優れたドキュメントがいくつかあります。あなたを動かすいくつかの便利なリンクをたどります。
MapRからのこのリンク[彼らはParquetについては議論していません]
上記のリンクはあなたを動かすでしょう。これがあなたの質問に答えることを願っています。
ありがとう!
寄木細工の説明については、こちらを参照してください:http://bigdata.devcodenote.com/2015/04/parquet-file-format.html
私はAvroと2つの比較についてもすぐに書くつもりです。完了したらここに投稿します。