問題タブ [hadoop-streaming]

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.

0 投票する
2 に答える
1030 参照

python - Hadoopストリーミングで依存関係を管理しますか?

Hadoopストリーミングについて簡単に質問します。Pythonストリーミングを使用していて、マッパー/レデューサーが必要とするPythonパッケージがあるが、デフォルトでインストールされていない場合、それらをすべてのHadoopマシンにもインストールする必要がありますか、それともそれらをに送信する何らかのシリアル化がありますか?リモートマシン?

0 投票する
2 に答える
1126 参照

python - Hadoop ストリーミングの複数行入力

いくつかの Hadoop ストリーミング ジョブにDumboを使用しています。それぞれ記事 (複数行テキスト) といくつかのメタデータを含む JSON 辞書がたくさんあります。Hadoop は大きなファイルを提供するときに最適なパフォーマンスを発揮することを知っているので、すべての JSON 辞書を 1 つのファイルに連結したいと考えています。

問題は、改行で分割するのではなく、各辞書/記事を個別の値として Hadoop に読み込ませる方法がわからないことです。Hadoop にカスタム レコード セパレータを使用するように指示するにはどうすればよいですか? それとも、すべての JSON 辞書をリスト データ構造に入れ、Hadoop にそれを読み込ませることができるでしょうか?

それとも、文字列をエンコードする (base64?) と、すべての新しい行が削除され、通常の「リーダー」がそれを処理できるでしょうか?

0 投票する
1 に答える
3871 参照

hadoop - Hadoop ストリーミングの問題

Hadoop ストリーミングを使用しているときに、これらの問題に遭遇しました。Pythonでコードを書いています

1) 集合ライブラリパッケージ

Hadoop ストリーミング ドキュメントによると ( http://hadoop.apache.org/common/docs/r0.20.0/streaming.html#Working+with+the+Hadoop+Aggregate+Package+%28the+-reduce+aggregate+option%29 )、マッパーとリデューサーの両方として機能する組み込みの Aggregate クラスがあります。

コマンドは次のとおりです。

このコマンドを実行すると、マッパーは次のエラーで失敗します。

ただし、コンバイナーではなくレデューサーとして集約を使用してこのコマンドを実行すると、ジョブは正常に機能します。

これは、集約クラスをコンバイナーとして使用できないということですか?

2) | は使用できません。一般的なオプションの区切りとして

これは、上記のリンクからのコマンドの例です

| は使用できません。map.output.key.field.separator の引数として。エラーは

(更新) | をエスケープする必要があります。このような\で

3) 例のようにコマンドの最後に -D オプションを指定することはできません。エラーは

ドキュメントに欠陥がありますか、それとも何か間違っていますか?

私が間違っていることについての洞察は大歓迎です。thnx

0 投票する
3 に答える
2211 参照

hadoop - レデューサーごとに 1 つのキーを確保する Hadoop ストリーミング

データの処理中に出力を3つの異なるタイプに分類するマッパーがあります(タイプは出力キーです)。私の目標は、レデューサーを介して 3 つの異なる csv ファイルを作成し、それぞれにヘッダー行を持つ 1 つのキーのすべてのデータを作成することです。

キー値は変更可能で、テキスト文字列です。

さて、理想的には、3 つの異なるレデューサーが必要であり、各レデューサーは値のリスト全体で 1 つのキーのみを取得します。

ただし、キーが特定のレデューサーにマップされないため、これは機能しないようです。

他の場所でのこれに対する答えは、必要な各キー値を特定のレデューサーにマップするカスタム パーティショナー クラスを作成することでした。Pythonでストリーミングを使用する必要があり、ジョブにカスタムストリーミングjarを含めることができないため、これはオプションではないように思われることを除いて、これは素晴らしいことです。

Hadoop のドキュメントで、セカンダリ ソートを有効にできる代替のパーティショナー クラスがあることがわかりますが、デフォルトまたはキー フィールド ベースのパーティショナーのいずれかを使用して、各キーが確実に終了するようにすることが可能であることはすぐにはわかりません。Java クラスを作成したり、カスタム ストリーミング jar を使用したりせずに、独自のレデューサーを使用します。

どんな提案でも大歓迎です。

:

マッパー出力:

csv2\tfieldA,fieldB,fieldC csv1\tfield1,field2,field3,field4 csv3\tfieldRed,fieldGreen ...

問題は、3つのレデューサーがある場合、次のようなキー配布になることです:

1 つのレデューサーは 2 つの異なるキー タイプを取得し、1 つのレデューサーはデータをまったく送信しません。これは、hash(key csv1) mod 3 と hash(key csv2) mod 3 が同じ値になるためです。

0 投票する
2 に答える
1857 参照

hadoop - Hadoop ストリーミングを使用して別のファイルに書き込む

現在、10 台のサーバーの Hadoop クラスターで約 300 GB のログ ファイルを処理しています。私のデータは YYMMDD という名前のフォルダーに保存されているため、毎日すぐにアクセスできます。

私の問題は、今日、ログ ファイルにあるタイムスタンプが、予想どおり UTC ではなく DST (GMT -0400) になっていることを発見したことです。つまり、これは、logs/20110926/*.log.lzo に 2011-09-26 04:00 から 2011-09-27 20:00 までの要素が含まれていることを意味し、そのデータに対して行われた map/reduce をほとんど台無しにしています (つまり、統計を生成します)。

map/reduce ジョブを実行して、すべてのログ ファイルを正しく再分割する方法はありますか? 私が知る限り、ストリーミングを使用して特定のレコードを出力ファイル A に送信し、残りのレコードを出力ファイル B に送信する方法はないようです。

現在使用しているコマンドは次のとおりです。

Java やカスタム クラスの作成については何も知りません。http://blog.aggregateknowledge.com/2011/08/30/custom-inputoutput-formats-in-hadoop-streaming/に投稿されたコードを試してみました(そこにあるものをほとんどコピー/貼り付けました) が、できませんでした。まったく機能しません。何を試しても、「-outputformat : class not found」というエラーが表示されます。

お時間とご協力ありがとうございました:)。

0 投票する
1 に答える
1579 参照

python - Python Streaming : 複数の出力に減らす方法は? (ただし、Java では可能です)

Hadoop in Actionを読んだところ、とクラスをJava使用するとデータを複数のファイルに減らすことができることがわかりましたが、 を使用して同じことを達成する方法がわかりません。 MultipleOutputFormatMultipleOutputsPython streaming

例えば:

知っている方、聞いた方、同じようなことをした方、教えてください。

0 投票する
4 に答える
6773 参照

python - hadoopストリーミング:キー値のリストをレデューサーに提供する方法は?

したがって、プログラムのJava作成に使用するmap/reduceと、マップはデータを収集し、レデューサーはキーごとの値のリストを受け取ります。

取り組む。pythonしかし、を使用して同じことを行うことは可能streamingですか?これを参照として使用しましたが、reducerはコマンドラインで指定されたとおりに1行ごとにデータを取得するようです

0 投票する
0 に答える
3857 参照

java - Hadoop ストリーミング内での hdfs との間のコピー

以前にこれと同様の質問をしましたが、いくつかの調査を行った後、何が起こっているのかをよりよく理解していますが、他の人が私のアプローチに代わる解決策を持っているかどうかを確認したいと思います.

問題

hdfs で大量の非常に大きなファイルを gzip する Hadoop ストリーミング ジョブを作成しようとしているとします。 Hadoop ストリーミング ガイドでは、ファイルを hdfs からローカル ノードにコピーするマッパーを作成し、作業を行ってから、ファイルを hdfs にコピーして戻すことを提案しています。これは、インラインで説明されているいくつかの追加コードを含む小さなスクリプトで、もう少し基本的なタスクを実行します:単にファイルの名前を変更するだけです

スクリプト

出力

スクリプトを実行すると、この出力が得られます

問題

との出力からわかるように、関連するファイルの転送が完了する前に と が戻ってきているように見えhadoop dfs -copyToLocalます。私の推測では、Hadoop ストリーミング jvm はコマンドによって作成されたスレッドを採用しているため、ファイル転送スレッドは終了しても実行され続けますが、これは単なる推測です。これは、ファイルが大きく、最後のファイルのコピーが完了する前に Hadoop ストリーミングが終了する場合に特に厄介です。ファイル転送が途中で終了し、HDFS に部分的なファイルが残っているようです。私のこのハックは、少なくともファイルのコピーが完了することを保証するようです。hadoop dfs -copyFromLocalspincopy spinhadoop dfshadoop dfs

Cloudera の Hadoop バージョン 0.20.2+737 を使用していることに注意してください。

誰かがこの問題に遭遇しましたか? どのような代替回避策を見つけましたか? また、この問題は Hadoop の新しいリリースで修正されていますか?

0 投票する
2 に答える
2641 参照

hadoop - hadoop-streaming : 出力を別のファイルに書き込む

これがシナリオです

レデューサーでは、さまざまなファイルにデータを書き込みたいのですが、レデューサーが次のようになっているとしましょう

次のように書き込むパスを検討してください。

で実行するとpseudo-distributed mode(machine with one node and hdfs daemons running)、すべてのデーモンが同じファイルのセットに書き込むため、問題はありません

質問: - 1000 台のマシンのクラスターでこれを実行すると、それらは同じファイル セットに書き込みますか? 私はwriting to local filesystemこの場合、でこの操作を実行するためのより良い方法はありhadoop streamingますか?

0 投票する
1 に答える
1914 参照

python - Hadoop クラスター - ジョブを実行する前に、すべてのマシンにコードを複製する必要がありますか?

これが私を混乱させるものです。ワードカウントの例を使用すると、コードをマスターに保持し、彼にスレーブで何かをさせると、正常に動作します

しかし、コードを実行していると、スレーブで失敗し始め、次のような奇妙なエラーが発生します

パスにコードがないため、間違ったことをしていますか?

ありがとうございました