Hadoop/Hive初心者はこちら。私はハイブでカスタムテキストベースのフォーマットで保存されたデータを使用しようとしています。私の理解では、カスタムFileFormat
またはカスタムSerDe
クラスを書くことができます。そうか、それとも私はそれを誤解していますか?どのオプションをいつ選択するのかに関する一般的なガイドラインは何ですか?ありがとう!FileFormatを使用する。v Serdeを使用してカスタムテキストファイルを読む。
答えて
に役立ちます願っています。結局serdeを書く必要はなく、カスタムRecordReader(実装org.apache.hadoop.mapred.RecordReader<K, V>
)を返すカスタムInputFormat(extend org.apache.hadoop.mapred.TextInputFormat
)を書きました。 RecordReaderは、ファイルを読み込んで解析し、タブで区切られた行を返すロジックを実装しています。それと
私はこれがネイティブSerDeを使用しています
create table t2 (
field1 string,
..
fieldNN float)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT 'namespace.CustomFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
としての私のテーブルを宣言しました。また、カスタム入力形式を使用するときは出力形式を指定する必要があるため、組み込み出力形式の1つを選択します。
ハイブを使用している場合は、serdeと記入してください。次の例を参照してください。 https://github.com/apache/hive/tree/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/serde2
このインターフェイスはハイブ固有であることに注意してください。通常のハープ・ジョブにカスタム・ファイル形式を使用する場合は、別のインタフェースを実装する必要があります(どちらが完全かはわかりません)。
データを別の言語で逆シリアル化する方法がわかっている場合は、(任意の言語を使用して)ストリーミングジョブを作成し、既存のライブラリを使用するだけです。
私はそれを考え出した
テキストファイルの内容によって異なります。
カスタムレコードリーダーを作成して、テキストログファイルを解析し、必要な方法で返すことができます。入力フォーマットクラスは、そのジョブを行います。このjarを使用してHiveテーブルを作成し、そのテーブルにデータをロードします。
SerDeについては、私は少し違った使い方をしています。 InputFormatとSerDeの両方を使用しています。前者は実際のデータを解析し、後者は実際のデータを表すメタデータに安定化させます。なぜ私はそれを行うのですか?私は自分のログファイルの行ごとにハイブテーブルに適切な列を作成したいと思うし、SerDeは私にとって完璧な解決策だと思う。
最終的に、それらのテーブルをそのまま保持したい、または保持している場合は、これらの2つをマップして、それらのテーブルからクエリを実行できるようにします。
私はClouderaブログの説明が好きです。
http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/
基本的にはSerDeと、いつなFileFormatを変更する方法を変更することの違いを理解する必要があります。公式ドキュメントから
:SerDeは何Hive SerDe
? 1.SerDeは、シリアライザとデシリアライザの略称です。 2.Hiveは、SerDe(およびFileFormat)を使用してテーブル行を読み書きします。 3.HDFSファイル - > InputFileFormat - > - >デシリアライザ - >行オブジェクト 4。行オブジェクト - >シリアライザ - > - > OutputFileFormat - > HDFSファイル
したがって、3番目と4番目の点が違いを明確に推測しています。 通常とは異なる方法でレコードを読みたい場合(レコードが '\ n'で区切られている場合)、カスタムのファイル形式(入出力)が必要です。 読んだレコードをカスタム方法で解釈したい場合は、SerDeをカスタマイズする必要があります。
よく使用される形式のJSONの例を考えてみましょう。
シナリオ1: 1つの行に1つのjsonレコードが含まれている入力jsonファイルがあるとします。 これで、読んだレコードを好きなように解釈するカスタムSerdeが必要になりました。 1行は1レコードとなるため、カスタム入力形式は不要です。
シナリオ2:あなたは1つのJSONレコードが複数行にまたがる入力ファイルを持っていて、それを読みたい場合は は今、それはあなたの最初の1つのJSONレコードに読み取るために、カスタム入力フォーマットを記述する必要があり 続いているとし、このjsonレコードを読み込むとCustom SerDeに行きます。
- 1. OpenMPを使用してテキストファイルを読む
- 2. AVFoundationを使用してDataMatrixを読む
- 3. Scannerを使用してファイルを読む
- 4. Cを使用してXMLを読む#
- 5. iTextを使用してpdfを読む
- 6. てjavap -vを使用して
- 7. serdeを安定したリリースのRustに使用する方法
- 8. Serdeを使用してnull値を含むJSONファイルを逆シリアル化する方法は?
- 9. ルートビューコントローラを使用して読み込むビューを決定する
- 10. Serdeを使用して逆シリアル化中にフィールドを変換する方法は?
- 11. Serdeを使用してシリアル化中にフィールドを変換する方法は?
- 12. Vue.js + v-data内のv-dataテーブルを使用して
- 13. Vue JSを使用してHTMLの同じタグで "v-if"と "v-else"を使用する方法は?
- 14. Pythonを使用してバイナリファイルをプレーンテキストとして読む
- 15. vuejs、v-forループ内でv-bindを使用してクラスをバインドする方法
- 16. Twitter API v.1.1を使用して情報を取得する
- 17. SerDeを使用して固定幅ファイルを含むハイブテーブルをロードできません
- 18. javascriptを使用してアップロードしたxmlファイルを読むには?
- 19. .xlsxを読むGoogleドライブAPIを使用
- 20. テキストファイルをダウンロードしてアンドロイド用のphonegapを使用して読む方法
- 21. 読むワードリストは、私がRapidminerを使用しているR
- 22. Nest v。2.1を使用してElasticSearchですべてを照会
- 23. 特定のエンコーディングを使用してtsvファイルを読むR
- 24. C++を使用して行単位で文字列を読む
- 25. ChromeでJavaScriptを使用してXML文書を読む
- 26. SQLalchemyを使用して大きなファイルを読む
- 27. スキャナを使用して文字を読む
- 28. リフレクションを使用して構造体にバイトを読み込む
- 29. pdfファイルを読むpowershellスクリプトを使用してカスタムドキュメントのプロパティ
- 30. javascriptを使用してxmlを読む方法
あなたが持っているコードを共有したいですか? Java + hadoop newbieはここにあります。圧縮解除時に1行で圧縮されたときに改行があることがあるファイルを解凍しようとしています。 Hadoopはそれを改行で分割し、データが壊れてしまいます。私はハイブ用のプラグインを作ろうとしています。私はこれが古いスレッドだと知っていますが、尋ねなければなりません。ありがとう – Jeff