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