問題タブ [sequencefile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hadoop SequenceFile バイナリは安全ですか?
hadoop-1.0.4 ソース コードの SequenceFile.java を読みました。そしてsync(long)
、MapReduce で SequenceFile をファイル分割に分割するときに、SequenceFile で「同期マーカー」(ファイル作成時に生成された場合は 16 バイトの MD5) を見つけるために使用されるメソッドを見つけます。
これらのコードは、単に「同期マーカー」と同じデータを含むデータ シーケンスを探します。
私の疑問:
SequenceFile のデータに「同期マーカー」と同じ 16 バイトのデータ シーケンスが含まれている状況を考えてみましょう。上記のコードは、誤ってその 16 バイトのデータを「同期マーカー」として扱い、SequenceFile が勝ち正しく解析されませんか?
データまたは同期マーカーに関する「エスケープ」操作が見つかりません。SequenceFile をバイナリセーフにするにはどうすればよいですか? 何か不足していますか?
hadoop - リースの不一致 LeaseExpiredException
このトピックに関する投稿をいくつか見ましたが、問題の解決策を見つけることができませんでした。Hadoop バージョン Hadoop 2.0.0-cdh4.2.0、および Java バージョン「1.7.0_09-icedtea」を使用しています。単純な mapreduce の例で、カウンターを使用して相互作用を制御するプログラムを実行しています。また、データ通信にはシーケンスファイルも使用しています。コードは単純です。たとえば、3 などの数字で始まります。マッパーは数字を変更せず、値を送信するだけです。レデューサーは、実行するたびに数値を 1 減らします。数値が 0 より大きい場合、カウンターはインクリメントされます。最終的に、数値は 0 に減少する必要があり、プログラムはその時点で停止する必要があります。ただし、最初の反復後 (2 回目の反復中) に常に次のエラーが発生します。
誰でも助けてもらえますか?ありがとうございました。
よろしく...
hadoop - レデューサーの出力をシーケンス ファイルに書き込めません
クラス Text と IntWritable の kep 値のペアを出力する Map 関数と Reduce 関数があります。これは Main 関数の Map 部分の要点です。
そして、出力を HDFS に書き込む Main 関数の Reducer 部分を次に示します。
代わりにレデューサーをシーケンス ファイルに書き込むにはどうすればよいですか?
次のコードを試しましたが、動作しません
編集:実行時に表示される出力メッセージは次のとおりです
hadoop - ハイブへのオブジェクトのシーケンス ファイル
NetCDF ファイルに格納された一連のデータから始めました。そこから、いくつかの Java コードを作成して、NetCDF ファイルからシーケンス ファイルを作成しました。コードの本来の意図についてはあまり知りませんが、シーケンス ファイル自体については少し知ることができました。最終的に、これらのシーケンス ファイルを使用して Hive 内にテーブルを作成しようとしていますが、現時点では実行できないようです。
シーケンス ファイル内のキーと値は、WritableComparable を実装するオブジェクトとして格納されることがわかっています。また、シーケンス ファイル内のすべてのデータを反復処理する Java コードを作成することもできます。
では、これらのシーケンス ファイルのオブジェクト内のデータを実際に Hive に適切に読み取らせるには何が必要でしょうか?
ありがとうございます!
更新:問題が発生している場所を正確に説明するのが非常に難しい理由は、必ずしもエラーが発生しているわけではないためです。Hive は単にシーケンス ファイルを正しく読み取っていないだけです。シーケンス ファイルで Hadoop -text コマンドを実行すると、次のようなオブジェクトのリストが表示されます。
NetCDFCompositeKey@263c7e3f 、 NetCDFRecordWritable@4d846db5
データはそれらのオブジェクト自体の中にあります。したがって、現在@Tariqの助けを借りて、これらのオブジェクトを実際に読み取るために必要なことは、キーを読み取るカスタムInputFormatと、オブジェクトをシリアル化および逆シリアル化するカスタムSerDeを作成することだと思いますか?
bigdata - 単一のキーを複数の値にマップするシーケンスファイル
索引付けのために LucidWorks ビッグデータにフィードされるデータに対して前処理を行おうとしています。LWBD は、Sequencefile ファイルの形式で SolrXML を受け入れます。ディレクトリ内のすべての SolrXML ファイルを取得し、それらを次の形式で出力する Pig スクリプトを作成したいと考えています。
Pig のネイティブPigStorage()
ロード関数は、データが抽出されたファイルの名前を含む列を自動的に作成できます。理想的には次のようになります。
ただし、PigStorage() は自動的に '\n' を行区切り文字として使用するため、実際には次のようなバッグになります。
私はあなたが絵を手に入れると確信しています。私の質問は、このバッグを SequenceFile に書き込むとしたら、他のアプリケーションはどのように読み取るのでしょうか? として組み合わせることができますか?
、私がそれをフィードするアプリケーションのデフォルトの処理によって?または、この形式にするためにできる後処理はありますか? ご協力ありがとうございました。
java - SequenceFileInputFormat を拡張してファイル名 + オフセットを含める
シーケンス ファイルを読み取るカスタム InputFormat を作成できるようにしたいと考えていますが、さらにレコードが配置されているファイル内のファイル パスとオフセットを公開します。
一歩戻って、使用例を次に示します。可変サイズのデータを含むシーケンス ファイルがあります。キーはほとんど無関係であり、値はさまざまな異なるフィールドを含む最大数メガバイトです。ファイル名とオフセットとともに、elasticsearch でこれらのフィールドのいくつかにインデックスを付けたいと思います。このようにして、elasticsearch からこれらのフィールドをクエリし、ファイル名とオフセットを使用してシーケンス ファイルに戻り、すべてを ES に格納する代わりに元のレコードを取得できます。
私はこのプロセス全体を単一の Java プログラムとして動作させています。SequenceFile.Reader クラスは、これを実現する便利なメソッドを提供getPosition
します。seek
ただし、最終的には何テラバイトものデータが必要になるため、これを MapReduce ジョブ (おそらく Map のみ) に変換する必要があります。シーケンス ファイル内の実際のキーは無関係であるため、私が望んでいたアプローチは、SquenceFileInputFormat を拡張するか何らかの形で利用するカスタム InputFormat を作成することですが、実際のキーを返す代わりに、ファイルで構成される複合キーを返します。そしてオフセット。
しかし、それは実際にはより困難であることが証明されています。可能であるように思われますが、実際の API と公開されているものを考えると、難しいことです。何か案は?多分私が取るべき別のアプローチですか?
serialization - Hadoop SequenceFile での Writable の完全修飾名の変更の処理
私が書いたいくつかの書き込み可能なサブクラスで書かれた一連の Hadoop SequenceFiles があります。それをFishWritableと呼びましょう。
この Writable は、わかりやすくするためにパッケージの名前を変更する必要があると判断するまで、しばらくはうまくいきました。したがって、FishWritable の完全修飾名はcom.vertebrates.fishes.FishWritable
ではなくcom.mammals.fishes.FishWritable
. 問題のパッケージの範囲がどのように進化したかを考えると、これは合理的な変更でした。
次に、SequenceFileRecordReader を初期化しようとするとクラッシュするため、MapReduce ジョブが実行されないことがわかりました。
これに対処するためのいくつかのオプションがすぐに明らかになります。以前のすべてのジョブを再実行するだけで、依存するジョブを順番に実行して、最新のキー クラス名で出力を再生成できます。これは明らかに非常に時間がかかり、場合によっては不可能なこともあります。
もう 1 つの可能性は、SequenceFile をテキストとして読み取り、クラス名のインスタンスを新しいものに置き換える単純なジョブを作成することです。これは基本的には方法 1 に微調整を加えたもので、簡単に実行できます。大きなファイルがたくさんある場合、それはまだかなり非現実的です。
SequenceFiles で使用される完全修飾クラス名のリファクタリングを処理するより良い方法はありますか? 理想的には、指定されたクラス名が見つからない場合に新しいフォールバック クラス名を指定して、この SequenceFile の日付付きタイプと更新済みタイプの両方に対して実行できるようにする方法を探しています。
hadoop - SequenceFiles から Avro に移行する簡単な方法はありますか?
私は現在、書き込み可能な SequenceFiles で Hadoop mapreduce ジョブを使用しています。システムの非 Hadoop 関連部分でも、同じ Writable タイプがシリアル化に使用されます。
この方法は保守が困難です。主な理由は、スキーマがなく、バージョン変更を手動で処理する必要があるためです。
apache avro がこれらの問題を処理しているようです。
問題は、移行中にデータが両方の形式になることです。移行を処理する簡単な方法はありますか?
hadoop - SequenceFile Hadoop を使用して複雑なデータを保存する
私の質問は、テキストから sequenceFile を生成して、次のような形式を出力する方法です。
左側がキー、右側が値です。