問題タブ [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.
hadoop - Hadoop ストリーミングで実行されるマッパーの数を制限する
Hadoop ストリーミングを使用して、特定の時間にジョブで実行されるマッパーの数を制限することはできますか? たとえば、ノードごとに 1 つのタスクを実行できる 28 ノードのクラスターがあります。100 個のタスクを含むジョブがある場合、いつでも 28 個のノードのうち、たとえば 20 個のみを使用したいと考えています。長時間実行されるタスクが多数含まれている可能性があるため、いくつかのジョブを制限したいと思います。また、長時間実行されるジョブが終了するのを待つのではなく、より高速に実行されるジョブを実行して、すぐに実行できるようにしたい場合もあります。
この質問を見ましたが、タイトルは適切ですが、回答はこの特定の問題に対処していないようです。
ありがとう!
subprocess - Python と Python サブプロセスによる Hadoop ストリーミング
基本的な Hadoop マスター スレーブ クラスターのセットアップを確立し、クラスターで mapreduce プログラム (Python を含む) を実行できるようになりました。
現在、C バイナリにアクセスする python コードを実行しようとしているため、subprocess モジュールを使用しています。通常の Python コードに Hadoop ストリーミングを使用できますが、サブプロセス モジュールを含めてバイナリにアクセスすると、ジョブが失敗します。
以下のログからわかるように、hello 実行可能ファイルはパッケージ化に使用されていることが認識されていますが、コードを実行することはできません。
. . packageJobJar: [ /tmp/hello/hello , /app/hadoop/tmp/hadoop-unjar5030080067721998885/] [] /tmp/streamjob7446402517274720868.jar tmpDir=null
私がしようとしているコマンドは次のとおりです。
hello は C 実行可能ファイルです。これは、基本的な機能を確認するために使用している単純な helloworld プログラムです。
私のPythonコードは次のとおりです。
Hadoop ストリーミングで Python を使用して実行可能ファイルを実行する方法や、これをデバッグする方法についてのヘルプは、私を前進させてくれます。
ありがとう、
ガネーシャ
python - Hadoop ストリーミング: マッパーの実行時に PYTHONPATH が機能しない
- PYTHONPATH を設定しましたが、map-reduce ジョブを実行する場合を除いて、正常に動作します
言って失敗する
トレースバック (最後の最後の呼び出し): ファイル "/work/app/hadoop/tmp/mapred/local/taskTracker/hduser/jobcache/job_201203091218_0006/attempt_201203091218_0006_m_000020_0/work/./mapper.py"、57 行目、src.utilities からインポートユーティリティ ImportError: src.utilities という名前のモジュールがありません java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): org.apache.apache の org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311) でサブプロセスがコード 1 で失敗しました.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545) org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:121) org.apache.hadoop.mapred.MapRunner.run(MapRunner.java) :50) org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36) で org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) で org.apache.hadoop.org.apache.hadoop.mapred.Child$4.run(Child.java:261) の mapred.MapTask.run(MapTask.java:372) javax.security.auth の java.security.AccessController.doPrivileged(ネイティブ メソッド) .Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child.main(Child.java:255) java .lang.RuntimeException: PipeMapRed.waitOutputThreads(): サブプロセスは、org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed. java:545) org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132) で org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) で org.apache.hadoop.streaming .PipeMapRunner.run(PipeMapRunner.java:36) org.org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) org.apache.hadoop.mapred.Child$4.run(Child .java:261) で java.security.AccessController.doPrivileged(Native Method) で javax.security.auth.Subject.doAs(Subject.java:396) で org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java) :1059) org.apache.hadoop.mapred.Child.main (Child.java:255) でapache.hadoop.mapred.Child.main(Child.java:255)apache.hadoop.mapred.Child.main(Child.java:255)
質問: - Hadoop ストリーミング中に Python パスを具体的に設定する必要があるということですか? どこ?
hadoop-streaming - mapreduce 生成エラーを実行するには、dumbo で cdh3u3 hadoop を使用します。
私の python スクリプト: #!/usr/bin/python インポート sys インポート ダンボ インポート cgi、urlparse #ダンボ.lib インポート JoinReducer から #ダンボ.装飾インポート プライマリ、セカンダリ
実行コマンド:
jobtracker ログの hadoop エラー
原因: org.apache.hadoop.streaming.io.TypedBytesOutputReader.readKeyValue(TypedBytesOutputReader.java:57) での java.lang.NullPointerException 事前にすべてのヘルプに感謝します。
java - Hadoop でイメージを読み取る
Hadoopで画像をシーケンスファイル形式に変換するには? . たくさんのファイルを読みたくありません.1つの画像だけを読み込んで操作します。
hadoop - ログ分析のためのAmazonMapReduceのベストプラクティス
Apache、Nginx、Darwin(ビデオストリーミングサーバー)によって生成されたアクセスログを解析し、配信された各ファイルの統計を日付/リファラー/ユーザーエージェントごとに集計しています。
1時間ごとに大量のログが生成され、その数は近い将来劇的に増加する可能性があります。そのため、AmazonElasticMapReduceを介してその種のデータを分散して処理することは合理的と思われます。
これで、マッパーとレデューサーを使用してデータを処理し、次のフローでプロセス全体をテストする準備が整いました。
- アマゾンS3にアップロードされたマッパー、レデューサー、データ
- 適切なジョブを構成し、正常に処理しました
- 集計結果をAmazonS3からサーバーにダウンロードし、CLIスクリプトを実行してMySQLデータベースに挿入しました
私は、Amazon ERMについてインターネット上でグーグルできる何千ものチュートリアルに従って、手動でそれを行いました。
次に何をすればいいですか?このプロセスを自動化するための最良のアプローチは何ですか?
- APIを介してAmazonEMRjobTrackerを制御する必要がありますか?
- ログが2回処理されないようにするにはどうすればよいですか?
- 処理されたファイルをアーカイブに移動するための最良の方法は何ですか?
- 結果をPostgreSQL/MySQLに挿入するための最良のアプローチは何ですか?
- ジョブのデータを入出力ディレクトリにどのように配置する必要がありますか?
- APIを使用して毎回新しいEMRジョブを作成する必要がありますか?
- 生のログをAmazonS3にアップロードするための最良のアプローチは何ですか?
- 誰かがデータ処理フローの設定を共有できますか?
- ファイルのアップロードとジョブの完了を制御する方法は?
このトピックは、Amazon Elastic MapReduceを使用してアクセスログを処理しようとしたが、適切な資料やベストプラクティスを見つけることができなかった多くの人々に役立つと思います。
UPD:ここで明確にするために、最後の質問が1つあります。
Amazon Elastic MapReduceを利用したログ処理のベストプラクティスは何ですか?
関連記事:
php - AWS SDK for PHPからHadoopストリーミングの引数を渡すにはどうすればよいですか?
AWS SDKforPHPを介してジョブを追加しようとしています。APIを介してクラスターを正常に開始し、新しいジョブフローを開始することはできますが、Hadoopストリーミングステップを作成しようとするとエラーが発生します。
これが私のコードです:
次のようなエラーが発生します:無効なストリーミングパラメータ'-input s3:// .... -output s3://..... -mapper s3://....../ mapper.php -reducer s3://...../ reducer.php "
したがって、HadoopストリーミングJARに引数を渡す方法が明確ではありませんか?
AWS SDK for PHPの公式ドキュメントには、例やドキュメントは含まれていません。
おそらく関連する未回答のスレッド:
python - hadoop-streaming:ジョブが完了したら後処理を自動化しますか?
ステップ1-処理するデータの量に基づいて可変時間かかるHadoopストリーミングジョブがありますステップ2-ジョブが完了したら、すべてのデータダンプをmongodbにインポートし、そこからフラットcsvファイルを作成する必要があります
質問
Hadoopストリーミングを使用してステップ2をステップ1に接着し、ステップ2を手動で実行しないようにする方法はありますか?
hadoop - Hadoopストリーミングでノードあたりのレデューサーの最大数を設定するにはどうすればよいですか?
C ++ベースのMapReduceジョブがあり、Hadoopストリーミングを使用しています。
ただし、コマンドライン構成で;として7
設定した場合でも、ノードあたりのレデューサーの最大数は最終的になります。18
mapred.tasktracker.reduce.tasks.maximum=18
レデューサーがより多くのリデュースタスクを発行するのを妨げるものは他にありますか?
hadoop - ファイルではなくディレクトリをhadoop-streamingに渡しますか?
私の仕事では、多くの履歴ログセットを解析する必要があります。個々の顧客 (数千人) は、日付ごとに分割された数百のログ サブディレクトリを持っている場合があります。例えば:
- ログ/Customer_One/2011-01-02-001
- ログ/Customer_One/2012-02-03-001
- ログ/Customer_One/2012-02-03-002
- ログ/Customer_Two/2009-03-03-001
- ログ/Customer_Two/2009-03-03-002
個々のログ セット自体が 5 ~ 6 レベルの深さで、数千のファイルが含まれている場合があります。
したがって、実際には、個々のマップ ジョブでサブディレクトリの移動を処理する必要があります。個々のファイルを単純に列挙することは、私の分散コンピューティングの問題の一部です。
残念ながら、ログのサブディレクトリのみを含むディレクトリを Hadoop に渡そうとすると、これらのサブディレクトリをマッパーに渡すことができないというエラーが表示されます。(繰り返しますが、サブディレクトリを入力として受け入れるように書いています):
$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .
[ . . . ]
12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
Streaming Command Failed!
[cloudera@localhost ~]$
ディレクトリを作業項目として割り当てることを Hadoop ストリーミングに許可する簡単な方法はありますか?