問題タブ [mrjob]
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 - MRJob でステップを実行する前に S3 データを HDFS にロードする特定の構文例は何ですか?
MRJob スクリプトを実行し、CLI を使用して作業のために EMR クラスターを起動するとき、S3 からクラスター内の HDFS にデータをロードする方法を見つけようとしています。これをセットアップ プロセスの一部として実行したいと考えています。
S3 データを HDFS にプリロードするために MRJob で使用する適切な構文を理解するために、さまざまな場所を検索しました。私はまだ専門用語とプロセスについて理解を深めています。
MRJob は、ドキュメントで JarStep と Hadoop ストリーミングについて言及しています: https://pythonhosted.org/mrjob/guides/writing-mrjobs.html
Yelp には、これに関するディスカッション スレッドがあります: https://github.com/Yelp/mrjob/pull/665
AWS には、ロード用の構文を提供するツール S3DistCp があり、例は Java に関連しているように見えます。(2 つ以上のリンクを投稿することはできませんが、Google 検索でこれに関する詳細情報が得られます)
私のアプローチは、MRJob スクリプトのステップ メソッドに MRStep の前のステップとして JarStep を含めることでした。S3DistCp コマンドを引数として渡そうとしました。
引用符または入力と出力を分割する引用符、またはコンマ間のスペースを使用して、または使用せずに、これについていくつかのバリエーションを試しました。主に発生するエラーは、「スレッド 'main' java.lang.RuntimeException の例外: 引数 --src,, --desc,, が一致しません。
私が見つけた例は、次のようなものです。
JarStep.INPUT を置き換えるか、別の場所で定義する必要があるかどうかは明確ではありません。S3DistCp ドキュメントに合わせて --jobconf の下の CLI で Java コマンドを渡す必要があると考え始めています。
アイデアや単純な例があれば、私の方法で送ってください。
python - IPython ノートブックから MRJob を実行する
IPython ノートブックから mrjob の例を実行しようとしています
次に、コードで実行します
エラーが発生します:
IPython ノートブックから mrjob を実行する方法はありますか?
python - mrjob subprocess.CalledProcessError を使用した Python hadoop mapreduce ジョブ
カスタム データで mrjob の Web サイトから基本的な例を実行しようとしています。ストリーミングを使用して Hadoop map reduce を正常に実行しました。また、Hadoop を使用せずにスクリプトを正常に試行しましたが、次のコマンドで mrjob を介して Hadoop で実行しようとしています。
mapred.py のソース コードは次のとおりです。
残念ながら、次のエラーが発生します。
mrjob は HDFS にディレクトリを作成できないようですが、残念ながらこの問題を解決する方法がわかりません。
私の Hadoop は cloudera CDH5.1 です。クイックスタート。
提案やアドバイスをお寄せいただきありがとうございます。
編集:
cloudera CDH4.7 で同じコードを実行しようとしました。クイックスタートでうまくいきました。したがって、私の修正された質問は次のとおりです。cloudera CDH5.1 です。mrjob フレームワークでサポートされていますか? もしそうなら、それを実行する方法は?
hadoop - Hadoop ストリーミング mapreduce でコンバイナを使用する (mrjob を使用)
mapreduce について教えられたとき、重要なコンポーネントの 1 つはコンバイナーでした。マッパーが出力するデータの行数を減らすために、基本的にマップフェーズの最後にリデューサーを実行するのは、マッパーとリデューサーの間のステップです。処理する必要があるデータのサイズが (数テラバイト規模で) 増加するにつれて、reduce ステップは非常に遅くなります。私の友人と話したところ、これは彼の経験でもあり、コンバイナーを使用する代わりに、reduce ステップで各キーに送られる値の数を減らすハッシュ関数を使用して、reduce キーを分割すると言いました。 . 私はこれを試してみましたが、うまくいきました。コンバイナーステップがうまくスケーリングしないという経験をした人はいますか?なぜこの問題と回避策のドキュメントが見つからないのですか? 私'
[編集] コンバイナーよりもはるかに高速に動作する、私の友人が提案した回避策の例を次に示します。
出力する代わりにword, count
マッパー出力(word, hash(timestamp) % 1024), count
次に、マッパーの結果をマージするための 2 つの削減ステップがあります。
hadoop - Python MRJobで、一時出力ディレクトリのオプションを設定する方法
MRJob を使用して、非常に単純な単語カウントを標準の Hadoop ジョブとして実行しています。
この出力エラーは、一時出力用の一時ディレクトリを作成できないことを示しています。
MRJob でデフォルトで必要なディレクトリを作成できないとします。コマンドラインから MRJob にオプションを渡すことはできますか? これまでに見つけた唯一のオプションはbase_tmp_dirです。説明には、「ローカル一時ディレクトリを配置するパス」と記載されていました。一時出力ディレクトリはhdfsにあるはずなので、「ローカル」は正確には探しているものではありません。それでも、やってみるつもりでした(:
また
しかし、MRJob がそのようなオプションがないと文句を言うので失敗しました:
は、ここword_count.pyにある標準的なものです。MRJobj に関する重要な知識が欠けているか、Hadoop ストリーミングに戻らなければならない可能性があります。