web-dev-qa-db-ja.com

Hiveはどのようにデータを保存し、SerDeとは何ですか?

テーブルをクエリするとき、SerDeはファイル内のバイトからデータの行を操作するためにHiveによって内部的に使用されるオブジェクトにデータの行を逆シリアル化します。 INSERTまたはCTAS(441ページの「データのインポート」を参照)を実行すると、テーブルのSerDeはデータ行のHiveの内部表現を出力ファイルに書き込まれるバイトにシリアル化します

  1. SerDeライブラリですか?
  2. Hiveはどのようにデータを保存しますか?つまり、ファイルまたはテーブルに保存しますか?
  3. 大胆な文章をはっきりと説明できる人はいますか?私はハイブに不慣れです!
9
pramav

回答

  1. はい、SerDeはHadoopAPIに組み込まれているライブラリです
  2. Hiveは、HDFSやその他のストレージ(FTP)などのファイルシステムを使用してデータを保存します。ここでのデータは、テーブル(行と列)の形式です。
  3. SerDe-シリアライザー、デシリアライザーは、レコード(行)の処理方法をHiveに指示します。 Hiveを使用すると、半構造化(XML、電子メールなど)または非構造化レコード(オーディオ、ビデオなど)も処理できます。たとえば、1000 GB相当のRSSフィード(RSS XML)がある場合。それらをHDFS内の場所に取り込むことができます。 XML構造に基づいてカスタムSerDeを作成し、HiveがXMLファイルをHiveテーブルまたはその他の方法でロードする方法を認識できるようにする必要があります。

SerDeの書き方の詳細については、こちらをお読みください post

10
shazin

この側面では、Hiveをある種のデータベースエンジンと見なすことができます。このエンジンは、recordsから構築されたテーブルで動作しています。
Hive(およびその他のデータベース)を独自の内部形式で動作させる場合、問題はありません。
Hiveに独自のファイルをテーブル(外部テーブル)として処理させたい場合は、ファイル内のデータをレコードに変換する方法を彼に知らせる必要があります。これはまさにSerDeの役割です。これは、Hiveがデータの読み取り/書き込みを行えるようにするプラグインとして見ることができます。
たとえば、CSVで作業したいとします。これがCSV_Serdeの例です https://github.com/ogrodnek/csv-serde/blob/master/src/main/Java/com/bizo/Hive/serde/csv/CSVSerde.Java メソッドserializeはデータを読み取り、CSVであると想定してフィールドに切り刻みます
メソッドdeserializeはレコードを取得し、CSVとしてフォーマットします。

6
David Gruzman

Hiveは、(1)複素数データ型(struct、array、unions)(2)SerDeを使用して、半構造化データと非構造化データも分析できます。

SerDeインターフェースを使用すると、レコードの処理方法についてHiveに指示できます。 SerializerはHiveが取り組んでいるJavaオブジェクトを取得し、それをHiveが格納できるものに変換し、Deserializerはレコードのバイナリ表現を取得してJava = Hiveが操作できるオブジェクト。

1
Manish Pansari

上記には、シリアル化と逆シリアル化の概念があります。シリアル化は書き込み時に行われ、構造化データはストレージ用にビット/バイトストリームにシリアル化されます。読み取り時に、データはビット/バイトストレージ形式からリーダーに必要な構造に逆シリアル化されます。たとえば、Hiveには行や列のような構造が必要ですが、hdfsはデータをビット/バイトブロックで格納するため、書き込み時にシリアル化し、読み取り時に逆シリアル化します。

0
Greg