問題タブ [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.
hive - Hive を使用した Hadoop SequenceFiles の読み取り
SequenceFile 形式で保存した Common Crawl からのマップ済みデータがあります。このデータを「そのまま」Hive で使用することを繰り返し試みたので、さまざまな段階でクエリとサンプリングを行うことができます。しかし、ジョブの出力には常に次のエラーが表示されます。
[Text, LongWritable] レコードのより単純な (そして小さい) データセットを作成しましたが、これも失敗します。データをテキスト形式に出力し、その上にテーブルを作成すると、正常に機能します。
カスタム入力形式を使用してみました:
次に、次のようにテーブルを作成します。
しかし、それでも同じ SerDer エラーが発生します。
ここに欠けている本当に基本的なものがあると確信していますが、正しく理解できないようです。さらに、SequenceFiles をその場で解析できなければなりません (つまり、データをテキストに変換できません)。したがって、プロジェクトの将来の部分のために SequenceFile アプローチを理解する必要があります。
解決策: @mark-grover が以下で指摘したように、問題は Hive がデフォルトでキーを無視することです。列が 1 つしかない (値のみ) ため、serder は 2 番目の列をマップできませんでした。
解決策は、私が最初に使用したものよりもはるかに複雑なカスタム InputFormat を使用することでした。値の代わりにキーを使用することについて、Git へのリンクで 1 つの回答を追跡し、必要に応じてそれを変更しました。内部の SequenceFile.Reader からキーと値を取得し、それらを最終的な BytesWritable に結合します。つまり、次のようなものです (すべてのハードワークが発生するカスタム リーダーから):
これで、すべての列を取得できました。
hadoop - HadoopHDFSとシーケンスファイル
もう1つ、非常に基本的な概念レベルの質問が思い浮かびます。HDFSとさまざまなファイル形式(シーケンスファイル(それに基づくマップファイル)、HARファイル)の違いと関係は何ですか?
答えは、HDFSが基盤ファイルシステムであり、生のバイナリファイルをHDFSにアップロードでき(シーケンスファイルやHARファイルなどを使用せずに)、特別に設計されたファイル形式を使用してに基づいてファイルを書き込むこともできると思います。 HDFS-シーケンスファイル(それに基づくマップファイル)形式、HARファイル形式のように。それは正しい理解ですか?
hadoop - 特定のキーのシーケンスファイルを見つける効率的な方法はありますか?
私のmap-reduceジョブは、最終結果をシーケンスファイルに書き込みます。特定のキーのシーケンスファイルを見つける効率的な方法はありますか?
hadoop - Hadoop HDFS: 書き込まれているシーケンス ファイルの読み取り
Hadoop 1.0.3 を使用しています。
Hadoop シーケンス ファイルのログを HDFS に書き込みます。ログの各束の後に syncFS() を呼び出しますが、ファイルを閉じることはありません (毎日のローリングを実行している場合を除く)。
私が保証したいのは、ファイルがまだ書き込まれている間、ファイルが読者に利用可能であることです。
FSDataInputStream を介してシーケンス ファイルのバイトを読み取ることができますが、SequenceFile.Reader.next(key,val) を使用しようとすると、最初の呼び出しで false が返されます。
FSDataInputStream または cat コマンドを使用してデータを読み取ることができるため、データがファイル内にあることがわかり、syncFS() が呼び出されることは 100% 確実です。
namenode と datanode のログを確認しましたが、エラーや警告はありませんでした。
SequenceFile.Reader が現在書き込まれているファイルを読み取れないのはなぜですか?
hadoop - MapperクラスはSequenceFileをhadoopの入力ファイルとしてどのように識別しますか?
私の1つのMapReduceタスクでは、BytesWritableをKeyBytesWritableとしてオーバーライドし、ByteWritableをValueBytesWritableとしてオーバーライドします。次に、SequenceFileOutputFormatを使用して結果を出力します。
私の質問は、次のMapReduceタスクを開始するときに、このSequenceFileを入力ファイルとして使用したいということです。では、どのようにジョブクラスを設定でき、Mapperクラスは以前にオーバーライドしたSequenceFileのキーと値をどのように識別できるのでしょうか。
SequenceFile.Readerでキーと値を読み取ることができることを理解しています。
しかし、このリーダーを使用して、キーと値をパラメーターとしてMapperクラスに渡す方法がわかりません。conf.setInputFormatをSequenceFileInputFormatに設定してから、Mapperにキーと値を取得させるにはどうすればよいですか?
ありがとう
hadoop - Hadoop SequenceFileを読む:奇妙な16進数ストリーム
次のコードを使用して、HadoopSequenceFileの一部をプレーンテキストに変換しようとしています。
キーは適切に変換できます。ただし、値は16進数の16進数ストリームに変換されます。サンプルは次のとおりです。
実際のストリームはこれよりはるかに長くなります。私が知っているのは、キーはHadoop Textフォーマットとして保存され、値はとして保存されるということHadoop BytesWritableです。値は中国語かもしれませんが、これについてはよくわかりません。
誰かが何が起こっているのか知っていますか?
hadoop - HDFS ファイルから SequenceFile へのバイナリ データの書き込み
HDFS に大量のファイルがあり、それらを MR ジョブでシーケンス ファイルにコピーしたいと考えています。seq ファイルのキー タイプは TEXT (SHA1 を使用) で、値のタイプは BytesWritable (ファイル コンテンツ) です。いくつかのサンプル コードでは、すべてのファイル コンテンツをバイト配列 (たとえばバッファー) に読み取り、バッファーを ByteWritable オブジェクトに設定しています。元:
私の質問は次のとおりです。入力ファイルが非常に大きい場合、バッファ サイズがメモリ制限を超えてしまう可能性があります。各反復で少量のデータを書き込むループを ByteWritable オブジェクトに追加できますか? または、入力ストリームを BytesWritable オブジェクトに割り当てて、問題を処理させることはできますか?
ありがとう。
hadoop - Hadoop シーケンス ファイルのサイズを制限するには?
txt を入力として使用して Hadoop seq ファイルを作成しています。テキストファイルからシーケンスファイルを書き込む方法を知っています。
しかし、出力シーケンスファイルを特定のサイズ、たとえば 256MB に制限したいと考えています。
これを行う組み込みの方法はありますか?
performance - HDFSシーケンスファイルのパフォーマンスチューニング
Hadoopを使用して、シーケンスファイルに保存されている多数の小さなファイルを処理しようとしています。私のプログラムはIOバウンドが高いので、IOスループットが十分に高いことを確認したいと思います。
シーケンスファイルから小さなサンプルファイルを読み取り、これらのファイルをRAMディスク(/ dev / shm / test /)に書き込むMRプログラムを作成しました。計算なしでRAMディスクに書き込まれたファイルを削除する別のスタンドアロンプログラムがあります。したがって、テストはほぼ純粋なIOバウンドである必要があります。ただし、IOスループットは思ったほど良くありません。
5つのデータノードがあり、各データノードには5つのデータディスクがあります。各ディスクは約100MB/秒のスループットを提供できます。理論的には、このクラスターは100MB / s * 5(ディスク)* 5(マシン)= 2500MB/sを提供できるはずです。しかし、私は約600MB/秒しか得られません。5台のマシンで「iostat-d-x1」を実行しましたが、 IOの負荷が十分にバランスされていないことがわかりました。通常、使用率が100%のディスクはごくわずかであり、使用率が非常に低い(10%以下)ディスクもあります。また、一部のマシンには、ある時点でIOロードがありません。これがスクリーンショットです。(もちろん、各ディスク/マシンのロードは急速に変化します)

これは、 「top-cd1」コマンド
によるCPU使用率を示す別のスクリーンショットです。
これが私のケースに関するより詳細な設定です:
Hadoopクラスターハードウェア:128GBのRAMと32コアのCPU(実際には2台のXeon E5-2650)を搭載した5台のDellR620マシン。2台のHDDは、CentOS用のRAID1ディスクとHDFS用の5台のデータディスクで構成されています。したがって、uouは上のスクリーンショットで6つのディスクを見ることができます。
Hadoop設定:ブロックサイズ128MB; データノードハンドラーの数は8です。タスクトラッカーごとに15のマップ。2GB Mapは、子ヒーププロセスを削減します。
テストファイルセット:約400,000の小さなファイル、合計サイズ320GB。160のシーケンスファイルに保存され、各seqファイルのサイズは約2GBです。すべてのファイルをさまざまなサイズのseqファイル(1GB、512MB、256MB、128MB)に保存しようとしましたが、パフォーマンスはそれほど変わりませんでした。
システム全体で100%(2500MB / s)のIOスループットが得られるとは思いませんが、40%(1000MB / s)以上が妥当だと思います。誰かがパフォーマンスチューニングのガイドを提供できますか?